Multiple Features 多特征
我们已经学习了单特征的线性回归算法,但一般实际问题不会只有一个特征。在房价预测问题上,除了房子面积,我们还可能知道比如房间数,房子楼层,建筑年龄等等,这时有许多特征来预测房价。
所以我们的预测函数h也会变成如下形式:
此时有n个特征,如上图房价问题,n = 4, 为了方便,加一个,然后得到:
此时仍然是n个特征,但可以写成向量相乘的形式了:
两个向量都是n + 1维的。
Gradient Descent for Multiple Variables 多特征形式下的梯度下降
多特征时的价值函数J与单特征时一样,只不过特征数增加;
梯度下降算法也是价值函数J对求偏导所得。
Gradient Descent in Practice 1: Feature Scaling 特征缩放
有多个特征的时候经常会遇到不同的特征在差距很大的不同数值范围内,比如房子面积在1000-3000的平方feat,房间数特征是个位数,差距很大的特征同时存在时,J可能的等高线图像如下:
然后做梯度下降算法的迭代时,有可能会沿着蓝色的轨迹趋近最低点,需要很多步,非常耗时。
所以对所有特征做一个预处理,让它们在大概相近的同一数值范围内,就是用feature scaling,如下:
μ1是某特征所有值的平均数(matlab 中用mean()),S1可以是该特征中的max-min,也可以是标准差(matlab std())。用这个式子处理所有会在比较小的一个相同范围内。J的等高线图像会变成:
经过比较少此迭代后到达最优点,提高算法的性能。
要注意的一点是,特征缩放后梯度下降法得到了参数,在对新的数据做预测时,必须先根据同样的μ和S做feature scaling。
Andrew推荐特征缩放后的数据范围在-3 to 3,和 -1/3 to 1/3之内是比较好用的。
Gradient Descent in Practice 2: Learning Rate 学习速率
选择不同的学习速率α可能遇到的错误情况如图左侧两个,J随着迭代进行上升或震荡,这是因为选取的学习速率过大,学习速率足够小的时候,J一定是随着迭代进行下降的。
但如果学习速率太小,下降的步进很小,迭代收敛很慢。
速率的选择有个人经验和根据遇到问题的不同而做不同选择,下面是Andrew推荐的:
Features and Polynomial Regression 特征处理和多项式回归
在讲单特征线性回归时我们只有一个特征房屋面积size,它的预测函数h是:
这个函数在数学性质上是一条直线,并不能很好的拟合训练数据,这时我们人工增加特征,变为多项式回归(Polynomial Regression):
增加size平房特征时数据更大的时候函数会下降,不符合现实房价规律,所以再增加size三次方特征,不过新增特征数值范围会很大(特征缩放很必要)。
或者选择size开方特征:
需要熟悉多项式函数的曲线才能选择合适的特征,使用多项式回归。一般特征数越多,对训练数据的拟合也越好,不过计算量大而且会造成过拟合问题。
Normal Equation 正规方程
这周最后介绍一种不同于梯度下降的求θ的方法:Normal Equation正规方程。
梯度下降方法是不断的迭代寻找J的极小值以点求出θ,正规方程是用矩阵求导的方式一次求出θ。
公式为:
公式的推导略,在课程官方的笔记中有,用到矩阵求导,trace等概念。
为应对矩阵不可逆的情况,在matlab中用求伪逆的函数pinv():
pinv(X'*X)*X'*y;
造成的原因有:1)冗余的特征,比如一个特征是房子的面积平方米表示,另一个是房子面积平方英尺表示。这时删去其中一个。2)有太多的特征,m<=n。删除一些特征或者用正则化方法。
梯度下降与正规方程的对比如下: