我想对你说
在跟我一起学习【机器学习】的老铁们,你们真的很不错,以前我也是很不想学习的,更别说什么自己去找书来学习,今天早上我看到有这么多的老铁在跟我一下努力我感到很欣慰,有你们一起学习我将更有动力去好好学习。那我觉得一切都是值得的。
我们一定能够并肩作战到最后一刻的。也会有飞跃的提升的。
昨天有点忙,晚上没有去看你们给我的留意,今早还没有清醒就看到手机上有这么多的留意,我为了不辜负大家对我的期望,起床整理资料准备跟大家一起学习。
多元梯度下降法
如何使用梯度下降方法来处理多元线性回归?
首先,多变量的假设函数是这样的:
其次,我们把
看作是一个n+1维的向量
那么代价函数就是这个样子的:
对代价函数进行梯度下降,就是这样子的:
重点就是要明白偏导数项的含义,也就是
的含义。
以下是我们只有1个特征时的梯度下降算法,有两个更新规则,分别对应参数θ_0和θ_1
那么如果是有多个特征呢,就是下面这种形式:
实际上,
就等于
如果你能证明它,这就是最终的多元线性回归的梯度下降算法。
如果你有一个机器学习问题有关于多个特征,而且你能保证这些特征都能在同一个相近的范围(即取值范围相近),这样梯度下降法就能很快的收敛。
举例:假如你要计算一个有2个特征的问题,其中X1代表房子的面积,X2代表卧室的数量,它们的取值如下
由于X1和X2的取值相差过大,梯度下降算法求取最优的过程中会反复收敛,但速度太慢,如下图:
如果你把X1和X2这样表示:
X1和X2的值就会在一个相近的范围之内,梯度下降法就能快速收敛,达到最优,如下图:
这就是梯度下降算法的特征缩放方法,能让2个或2个以上取值差距比较大的特征缩放,从而得到一个取值较小的范围,以提高梯度下降的收敛速度。
在进行特征缩放时,我们经常会将2个特征的取值尽量约束到-1到+1之间,区间不能太大也不能太小不然会影响计算。
除开把特征值X1和X2除以最大值来约束取值范围,有时候也可以进行“均值归一化”的工作来约束取值范围:
均值归一化:将X减去X的平均值再除以X的取值范围
这样你就能得到新的X1和X2的值,这两个特征的取值范围确实变小了。
特征缩放其实不需要太明确,它的目的就是为了让梯度下降运行的更快一点。
这是正常的梯度下降法更新规则:
那么怎么确保更新过程是正确的呢?又要如何选择更好的学习率α呢?
在梯度下降算法进行时,画出J(θ)的值
这里的X指的是:梯度下降算法的迭代次数
左边红点的垂直高度代表的是梯度下降算法更新了100步之后得到的θ算出的J(θ)的值;
右边红点的垂直高度代表的是梯度下降算法更新了200步之后得到的θ算出的J(θ)的值。
整个这条曲线显示的是梯度下降每次迭代更新后,代价函数的值。
如果梯度下降算法正常工作的话,那么每次更新后J(θ)的值都应该是下降的,这也是我们验证梯度下降算法是否在正常工作的方法。
可以看到在迭代300-400次的区间内,J(θ)的值并没有下降多少,说明梯度下降算法已经差不多收敛了,差不多快达到最优了。所以这张曲线图也可以帮助你判断梯度下降算法是否已经收敛。
如果J(θ)的值在上升,且你的曲线图是这个样子的:
那么说明你可能要将学习率α的值调整小一点
如果你碰到这种情况的曲线,解决办法也是需要减小α的值
数学家已经证明,只要你的代码没问题,只要你取得α值足够小,那么每次迭代的J(θ)的值都应该是下降的,但是注意也不要太小,不然梯度下降算法可能要迭代无数次才能达到最优。
如果你要选择更好的学习率α,下面有几个选择:
α=0.001 α=0.003 α=0.01 α=0.03 α=0.1 α=0.3 α=1
以每次大概3倍的速度逐步增大学习率α的值,直到找到一个你觉得不错的α的值
如果你在我整理的笔记中有什么不懂的那你就发到微信群里我们一起来解答,我们齐聚在一起就是一种缘分,相信大家也会很认真的去回答你的问题的。如果你身边或真还有其他的老铁想来加入到我们的学习阵营中我们欢迎你的加入!!!
关注我私信我们一位努力前进,早入步入机器学习!!!