吴恩达机器学习笔记及作业代码实现中文版
第二章 单变量线性回归
模型描述
-
我们使用一个监督学习算法的例子:预测住房价格。
- 我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。
- 在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。
- 比方说,如果你朋友的房子是 1250 平方尺大小,你要告诉他们这房子能卖多少钱。
- 那么模型也许是条直线,从这个数据模型上来看,他能以大约 220000(美元)左右的价格卖掉这个房子。
-
在监督学习中我们有一个数据集,这个数据集被称训练集。以房屋交易问题为例,假使我们回归问题的训练集( Training Set)如下表所示:
-
我们将要用来描述这个回归问题的标记如下:
- m代表训练集中实例的数量。
- x代表特征/输入变量。
- y代表目标变量/输出变量。
- (x, y)代表训练集中的实例。
- (x(i),y(i)x^{(i)}, y^{(i)}x(i),y(i))代表第i个观察实例。
- ℎ 代表学习算法的解决方案或函数也称为假设( hypothesis)。
-
要解决房价预测问题,我们实际上是要将训练集“喂”给我们的学习算法, 进而学习得到一个假设ℎ,然后将我们要预测的房屋的尺寸作为输入变量输入给ℎ,预测出该房屋的交易价格作为输出变量输出为结果。
-
一种可能的表达方式为: hθ(x)=θ0+θ1xℎ_\theta(x) = \theta_0 + \theta_1xhθ(x)=θ0+θ1x,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
代价函数
-
在线性回归中我们有一个像这样的训练集, m代表了训练样本的数量,而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式:hθ(x)=θ0+θ1xℎ_\theta(x) = \theta_0 + \theta_1xhθ(x)=θ0+θ1x。
-
我们现在要做的便是为我们的模型选择合适的参数(parameters)θ0\theta_0θ0和θ1\theta_1θ1,在房价问题这个例子中便是直线的斜率和在y 轴上的截距。
-
我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的
值与训练集中实际值之间的差距就是建模误差( modeling error)。 -
我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。即使得代价函数J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta_0, \theta_1)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2最小。
-
代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。
梯度下降
-
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)J(\theta_0, \theta_1)J(θ0,θ1)的最小值。
-
梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1,θ2,...,θn)(\theta_0, \theta_1, \theta_2, ... ,\theta_n)(θ0,θ1,θ2,...,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值( local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值( global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
-
批量梯度下降( batch gradient descent)算法
- 公式为:θj=θj−α∗∂J(θ0,θ1)∂θj\theta_j=\theta_j-\alpha*\frac{\partial J(\theta_0, \theta_1)}{\partial \theta_j}θj=θj−α∗∂θj∂J(θ0,θ1)。
- 其中α\alphaα是学习率( learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
- 在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
- 实现梯度下降算法的微妙之处。
- 在这个表达式中,如果你要更新这个等式,你需要同时新θ0\theta_0θ0和θ1\theta_1θ1。
- 实现方法是计算公式右边的部分,通过那一部分计算出θ0\theta_0θ0和θ1\theta_1θ1的值,然后同时更新θ0\theta_0θ0和θ1\theta_1θ1。
- 如果α\alphaα太小。
- 学习速率太小。
- 这样就需要很多步才能到达最低点。
- 可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。
- 如果α\alphaα太大。
- 梯度下降法可能会越过最低点,甚至可能无法收敛。
- 下一次迭代移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远。
- 导致无法收敛,甚至发散。
- 假设你将θ1\theta_1θ1初始化在局部最低点。
- 在这儿,它已经在一个局部的最优处或局部最低点。
- 结果是局部最优点的导数将等于零,因为它是那条切线的斜率。
- 这意味着你已经在局部最优点,它使得θ1\theta_1θ1不再改变,也就是新的θ1\theta_1θ1等于原来的θ1\theta_1θ1。
- 如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。
- 这也解释了为什么即使学习速率α\alphaα保持不变时,梯度下降也可以收敛到局部最低点。
- 在梯度下降法中,当接近局部最低点时,梯度下降法会自动采取更小的幅度。
- 这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零。
- 当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。
- 实际上没有必要再另外减小α\alphaα。
- 批量梯度下降指的是在梯度下降的每一步中, 我们都用到了所有的训练样本。
- 在梯度下降中,在计算微分求导项时,我们需要进行求和运算。
- 在每一个单独的梯度下降中,我们最终都需要对所有m个训练样本求和。
- 批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本。
- 事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。