吴恩达机器学习2-多变量线性回归(Linear Regression with Multiple Variables)
多维特征
以房价模型为例,现在引入多个特征,例如房间数量,离主干道的距离等等构成一个含有多个变量的模型,模型中的特征为(𝑥1, 𝑥1, . . . , 𝑥𝑛)。
𝑛 代表特征的数量
𝑥(𝑖)代表第 𝑖 个训练实例,是特征矩阵中的第𝑖行,是一个向量(vector)。
比方说,上图的
𝑥𝑗(𝑖)代表特征矩阵中第 𝑖 行的第 𝑗 个特征,也就是第 𝑖 个训练实例的第 𝑗 个特征。
如上图的𝑥2(2) = 3, 𝑥3(2) = 2,
支持多变量的假设 ℎ 表示为:
这个公式中有𝑛 + 1个参数和𝑛个变量,为了使得公式能够简化一些,引入𝑥0 = 1,则公式转化为:
此时模型中的参数是一个𝑛 + 1维的向量,任何一个训练实例也都是𝑛 + 1维的向量,特征矩阵𝑋的维度是 𝑚 ∗ (𝑛 + 1)。 因此公式可以简化为:
其中上标𝑇代表矩阵转置。
梯度下降
与单变量的相似,我们也构建一个代价函数
其中:
批量梯度下降算法为
计算代价函数的python代码:
def computecost(X,y,theta):
inner = np.power(((X * theta.T) - y), 2 )#np.power是计算次方
return np.sum(inner) / (2 * len(X)))
特征缩放
在多维变量中,不排除存在一些数量级很大的数字。举个例子,就房屋的模型来看,影响特征中,有房间的个数,距离城区的距离,一个仅仅个位数,了一个可能上千位。以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
解决的方法是将所有特征尺度收缩到-1到1之间,最简单的方法是:
学习率
学习率就相当于盲人下山每一次的步长
如果学习率𝑎过小,则达到收敛所需的迭代次数会非常高;
如果学习率𝑎过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
通常可以考虑尝试些学习率:
𝛼 = 0.01,0.03,0.1,0.3,1,3,10
特征和多项式回归
有时候线性回归不一定适用于全部数据,此时需要曲线来适应我们的数据,比如二次方程模型,三次方程模型等等
注意:采用多项式回归模型,运行梯度下降算法的时候,特征缩放是必须的。
正规方程
正规方程和梯度下降都可以解决线性回归的问题,且各有各的优点
梯度下降 | 正规方程 |
---|---|
需要选择学习率 | 不需要 |
需要多次迭代 | 一次运算得出 |
特征量n巨多时较好使用 | 不适用超大量特征的数据 |
适用于各种模型 | 只能用线性模型,不适用逻辑回归等 |
总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数𝜃的替代方法,具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。
正规方程解出向量:
上标 T 代表矩阵转置,上标-1 代表矩阵的逆
代码实现正规方程
import numpy as np
def normaleqn(X,y):
theta = np.linalg.inv(X.T@X)@X.T@y#linalg。int是求逆矩阵,@相当于dot()运算矩阵积
return theta