1、线性回归(linear regression):
b、多元线性回归 multivariate linear regression:
形式如下:
令
则
因此:有
参数有:
那么,cost function
(代价函数)为:
备注:
n: number of features (特征的总数)
m: number of training examples (训练集数据的例数)
要使得代价函数的计算结果最小,依然可以用之前提及的
梯度下降算法求解参数:
Gradient descent:
repeat{
}(simultaneously update for every j = 0, ... , n)
也就是
repeat{
}
微分项展开如下:
...
此时,梯度下降算法会稍微复杂一点,不过使用
特征缩放的方法——(确保不同特征的取值都处在一个相近的范围),可以使得梯度下降法更快收敛:
由于量冈的影响,特征可能朝着某一边倾斜,例如图1,此时梯度下降明显会比图2收敛慢,而去除量冈,使得特征值都范围都在一个相近的范围,例如[-1,1],[0,1]等等,当然该范围不应过小或者过大。因此,可以使用均值归一化来实现特征缩放:
(x - average)/(max - min)
接下来,看看
学习速率
,如何确定算法是否正常工作以及如何选择学习速率,用J值和迭代步数作图:
如果梯度下降算法正常工作,那么代价函数J(
θ)的值会随着迭代步数的增大而变小(如图3所示),而当曲线慢慢趋于平缓的直线,则说明收敛!(因此可以用于
判断算法是否正常工作以及迭代是否收敛)
如果如图4所示,则说明梯度下降算法没有正常工作,此时
应该选择较小的学习速率。(没有正常工作如果不是代码问题,那么就可能是选择的学习速率太大,跨步太大而无法向中间的较小的J值靠拢,参考图1和图2理解)
此外,还有可能出现图5的情况,也是没有正常工作:
图5也是说明学习速率过大以至于总是会越过最小值,该情况也应该选择较小的学习速率。
图6说明了学习速率过小的话,收敛也会很慢,此时应该选择较大的学习速率。
除了使用梯度下降算法,还可以使用
正规方程方法解决问题(
一次性求解θ 的最优值):
m examples:(
),(
),... ,(
);
n features
那么
故
则有:
用octave软件实现:
使用梯度下降算法和正规方程方法的优缺比较:
假设有
m
个训练和
n
个特征
|
梯度下降
|
正规方程
|
需要选择学习速率
|
不需选择学习速率
| |
归一化(很重要)
|
不需归一化
| |
需要迭代
|
不用迭代
| |
当
n
很大时,算法依然可以很好地工作
|
需要计算
X的转置乘以X
后的逆,当
n
很大时(例如n=10000),计算很慢
|