一、多维特征
前面所述的房价预测的线性模型,只用到了一维特征,即size,房屋尺寸,要用这个特征量来预测房屋价格:

当数据集的信息不止一种时,便有了多维特征,比如:

上图有四个X,即四个特征,来预测房屋价格。
于是房价预测的假设函数h(x)也从一元线性回归变成了多元线性回归:

上述假设函数中的θo可以看作:有一个额外的Xo ,Xo = 1 。那么多元线性回归的假设函数可以 简化成:θ的转置乘以X (θ和X都可看作n+1维向量)

二、多元梯度下降法
与一元线性回归的代价函数与多元线性回归的代价函数都是针对所有的θ,只是多元线性回归的θ个数更多,

梯度下降算法的实质也是一样的,如果不清楚可看往期内容:
机器学习——梯度下降、梯度下降的线性回归算法

计算代价函数J(θ)的python代码实现:

def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
三、梯度下降之特征缩放
面对多维特征问题的时候,保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。
当各个特征间的数值差距很大,梯度下降算法需要非常多次的迭代才能收敛。以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图,能看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。

解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。如图:
即 将特征的值除以该特征的最大值

有时候也不需要完全在-1:1的范围内,相近即可,比如下图-3:3也可以,但是如果差的太多则不行。

特征缩放的另一种方法:

上述的Sn也可以用特征的( max-min )
四、梯度下降之学习率
梯度下降算法收敛所需要的迭代次数根据模型的不同及学习率的不同而不同,不能提前预知,我们可以绘制代价函数J随θ迭代次数变化的图来观测算法在何时趋于收敛。

判断代价函数是否在逐渐收敛,即梯度下降算法是否在正确的work,可以将迭代后与迭代前的代价函数的变化值与某个阀值(例如0.001)进行比较,但绘制代价函数J随θ迭代次数变化的图更加直观。
当梯度下降算法不是在正确的work时:
下图两种情况均是学习率过大导致,可以采用更小的学习率

下图(X轴应为θ)蓝色箭头的多次迭代则是学习率太小导致

当学习率过大时:代价函数可能不是每次迭代都下降,也可能最终不会收敛(可见上图的红色箭头所示)。而当学习率过小时,代价函数可能需要很多很次才能最终收敛。
因此确定合适的学习率很重要,可以通过尝试一系列不同的学习率来确定,比如:

合理的大可以保证速度而不牺牲太多的精度;合理的小可以保证精度而不牺牲太多的速度。
网友评论