吴恩达-机器学习笔记(第二周)
2019-03-10 本文已影响0人
楠子小先生
四、多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征
对房价模型增加更多的特征,构成一个含多个变量的模型,模型中的特征为()。

增添更多特征后的新注释:

对hypothesis , 引入
,得到
,可简化为:
。
此时parameters和任何一个samples都是是一个维的向量,特征矩阵X的维度是
。
4.2 多变量梯度下降
多变量线性回归,代价函数:
其中:,
多变量线性回归的批量梯度下降算法为:

求导数后:

代码示例:
计算代价函数
其中:
Python 代码:
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
4.3 梯度下降法实践1-特征缩放
多维特征问题,要保证特征尺度相近,使梯度下降算法更快收敛。
将所有特征的尺度都尽量缩放到-1到1之间。

最简单的方法是令:

学习率a过小,收敛所需的迭代次数非常高;
学习率a过大,可能会越过局部最小值导致无法收敛。
Attention:当达到局部最小值时,也有可能由于a过大,跨过这块区域而到达全局最小值。
通常可以考虑:α=0.01,0.03,0.1,0.3,1,3,10
4.5 特征和多项式回归
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据(二次方、三次方模型)

另外,我们可以令:

求解参数:

注:对于不可逆矩阵( 特征之间不独立e.g同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,or特征数量 > 训练集数量),正规方程方法不可用。
梯度下降与正规方程的比较:

若特征数目n不大(小于一万),线性模型(而非逻辑回归等模型),通常可以用Normal Equation替代梯度下降法更快的计算参数θ。
代码表示
在 Octave 中,正规方程写作:
pinv(X'*X)*X'*y
在python中,正规方程写作:
import numpy as np
def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于X.T.dot(X)
return theta
4.7 正规方程及不可逆性(选修)
待学...