在这里附上上一章的链接机器学习个人笔记(一)_NanGuai的博客-CSDN博客
目录
多变量线性回归
多维特征
前面我们讨论了单变量线性回归,但我们知道,在实际生活中一件事物总是被多件事物影响。例如房价模型当中影响房价的其实还可能包括房间数量、楼层、房屋年限等。
此时我们假设
为了简化公式,设,即
进一步简化为,上标T表示矩阵转置
多变量梯度下降
与单变量线性回归类似,多变量线性回归的误差函数为:
其中:,求导方式与单变量类似,在这里直接给出结果:
代码示例:
计算误差函数
其中:
python代码:
def computeCost(X, y, theta):
inner = np.power(((X * theata.T) - y), 2 )
return np.sum(inner) / (2 * len(X))
梯度下降法实践1-特征缩放
特征缩放听起来可能有点绕口,但我相信标准化、归一化这样的名词你一定听过,它们便是常见的特征缩放方法。那么为什么要进行这样的操作呢?当存在一个范围相较其他特征偏大的特征存在时,会导致结果有偏差(例如,范围为0到100的变量将主导范围为0到1的变量)。而如果这些特征都具有相似的尺度,可以帮助梯度下降算法更快的收敛。
还是以房价问题为例,以横轴为房屋面积(0-2000平方英尺),竖轴为房间数量(0-5)作等高线图。可以看出图像非常的扁平,这就导致了梯度下架算法需要迭代很多次才能够收敛,找到局部最优点。
为了解决这一问题,就需要对特征进行缩放,尽量让所有尺度都在一个数量级上。在本例当中,面积缩小了2000倍,房间数缩小了5倍。
梯度下降算法实践2-学习率
在梯度下降算法的公式中我们可以明显看出学习率α的影响。在选择学习率时不能过大也不能过小。过小会导致每次下降太少,需要迭代的次数就会变得很高;过大的话可能会直接越过局部最优点从而导致无法收敛的情况出现。
在选择学习率时,一般取以下值做实验:
α=0.01, 0.03, 0.1, 0.3, 1, 3, 10, ...
特征和多项式回归
线性回归不一定适合所有的情况,有时候我们可以选择曲线来构建模型,比如二次方模型:
或者三次方模型:
在经过观察后选择合适的模型。除此之外,还可以令:,从而将模型再转换回线性模型。
正规方程
对于某些线性回归问题,正规方程相较于梯度下降算法更为出色。如:
假设训练集特征矩阵为X,对应的结果向量为y,则利用正规方程解出向:具体推导过程可以看下面这篇博客,在这里我就直接把结果列出来了哈。
正规方程求解特征参数的推导过程_chenlin41204050的博客-CSDN博客_正规方程组的求解过程
下面举个例子:
那么梯度下降与正规方程到底有那些不同呢?
梯度下降 | 正规方程 |
需要选择学习率 | 无需选择学习率 |
需要多次迭代 | 只需一次运算 |
特征数量n较大时也能适用 | 需要计算 |
适用于各种类型的模型 | 只适用于线性模型 |
其实只要特征变量的数目不大,正规方程是一个很不错的方法,当特征变量少于10000时可以用它来代替梯度下降。
最后在这里附上正规方程的python实现:
import numpy as np
def normalEqn(X, y):
theata = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于X.T.dot(X)
return theata