特征值缩放
下面用房价的例子来说明一下梯度下降算法。
假设训练集中有四个训练样本:
假设预测函数为:
代价函数为:
梯度下降算法为:
重复直到收敛 {
}
设置初始值: ; 学习率
初始的梯度值为
进行第一步梯度下降:
算得代价函数值为。
比较两次的代价函数值,发现梯度下降后反而上升了,这里的原因是什么。
原因说明
在上面的例子中,
的范围是从 852 到 2104,
的范围是从2 到 5,两个特征值的范围差距很大,这样会导致在梯度下降时,需要花费更多的时间,才能收敛到最小值,在这期间梯度值还会来回波动。
这就要求每项特征值都要在大致相同的范围内。这样梯度下降会很快到达最低点,完成收敛。
理想情况下,我们可以让每个特征值都修改到
或者
一般情况下有两种办法可以达到目的,是特征缩放(feature scaling)和均值归一化(mean normalization)
特征缩放(feature scaling)
特征缩放就是将特征值除以该特征值的范围(最大值减去最小值)
应用到上面的例子,可以得到修改后的特征值矩阵:
均值归一化(mean normalization)
均值归一化用特征值减去这些特征值的平均数,然后用减去的值除以该特征值的范围
即为平均数
应用到上面的例子,可以得到修改后的特征值矩阵:
这样就得到了范围相近的特征值。注意,这两种方法得到的结果不同。
下面将归一化后的特征值代入到开始的例子中去,经过一次梯度下降后,可以的到:
计算过程和上方类似,这里不在列出,可以看到梯度值下降了,梯度下降算法是有效的。
当然这边我们的数据集只有4个样本,这只是举例所用,从中我们可以看出特征值缩放的作用,可以帮助我们更好的实现梯度下降算法。
转载自:
https://codeeper.com/2020/01/03/tech/machine_learning/feature_scaling.html