特征缩放(Feature scaling)
对于一个多变量线性回归模型,如果特征值之间的差异过大,将会导致梯度下降算法执行速度变慢,收敛速度下降。这时我们就可以使用特征缩放使特征处于大致相同的尺度。
以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值域为 0-2000,房间数量的值域则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
(来自吴恩达课程)
这时我们通过特征缩放方法将每个特征量的值域缩放到【-1,1】的范围内即可。结合均值归一化(Mean normalization)方法,我们最终使用公式:,其中表示均值,表示标准差。使用特征缩放后,图像大致变为:
(来自吴恩达课程)
这样梯度下降算法将很快得到收敛。这里我们还需要注意一点,使用了特征缩放意味着你的特征量值会被映射到这个区间上来,那么等我们预测值的时候,也必须进行特征缩放。
学习速率(Learning rate)
如何选择合适的学习速率是梯度下降算法成功与否的关键所在。在我们使用梯度下降算法时,我们应该记录每一次迭代后得到的代价函数的值,迭代完成后作出以迭代次数为x轴,以代价函数值为y轴的函数图像,如果学习速率较为合适的话,它应该是单调递减的,而且随着迭代次数的增加,向0逼近。
而如果此函数图像不减反增,这极有可能是因为学习速率设置过大,这个问题我在单变量线性回归模型博客中有提到,不理解的话可翻看。如果此函数图像减小的十分缓慢,这说明学习速率设置过小,应尝试增大。
通常当我们选择学习速率时,可在0.001,0.003,0.01,0.03,0.1,0.3...中尝试,然后通过查看函数图像确定学习速率。