天天看点

机器学习(一)- feature scaling

feature scaling

feature scaling(特征缩放) 的思想就是将所选特征的value都缩放到一个大致相似的范围。这样做的目的是为了加快收敛,减少采用梯度下降算法迭代的次数。那么为什么feature scaling能做到这点呢。

下面我们将利用stanford的Andrew Ng教授的PPT来说明。

机器学习(一)- feature scaling

首先,“将所选特征的value都缩放到一个大致相似的范围”这句话在代价函数 $J(\theta) $ 的contour map的呈现就是contour大致是个圆形(当然这是针对我们只有两个feature的时候,多feature可以推广)。

接下来我们要证明contour map越圆,收敛就越快。如果这一点说明了,那么feature scaling也就能达到加快收敛的目的。

上图中左边的例子,feature x 1 x_1 x1​ 的范围0-2000,feature x 2 x_2 x2​ 的范围1-5,范围相差很大,导致contour map呈现出一个比较夸张的椭圆形,我们知道我们是要运用梯度下降去求解 θ 1 \theta_1 θ1​ 和 θ 2 \theta_2 θ2​ 使得 J ( θ ) J(\theta) J(θ) 达到最小值(梯度下降沿着负梯度对参数 θ \theta θ 进行调整)。可以想象,如果contour map特别椭,除非我们的起始点刚好很靠近椭圆的轴(几率很小,起始点一般都是随机取的),才有可能使我们的负梯度方向是基本指向最小值的方向的,否则的话,我们的负梯度方向就会向左边例子里一样完全不是指向椭圆圆心并且会趋向于与短轴平行,这就非常可怕会造成图中左边例子这样的zig-zag在长轴上反复横跳,缓慢的向最小值逼近。

那么接下来我要说什么,我感觉你应该已经猜到了,对。让我们反观右边例子,如果contour很圆,那么无论我们从哪里开始,我们的负梯度方向都是基本指向圆心(最小值)的,这样的话,每一步我们都最大的靠近了最小值(在learning rate定了情况下),当然我们的迭代次数就少了,也就加快收敛了。

Andrew Ng还指出一般我们选择将feature的value落在 [ − 1 , 1 ] [-1, 1] [−1,1], 但是我们不需要严苛的要求一定满足 [ − 1 , 1 ] [-1, 1] [−1,1],其实左边界在 [ − 3 , − 1 3 ] [-3, -\frac{1}{3} ] [−3,−31​],右边界在 [ 1 3 , 3 ] [\frac{1}{3}, 3 ] [31​,3] 就可以了,也就是不能太大也不能太小。那么如何一步到位呢。就需要用到mean normalization(均值归一化)。这个就很简单了:

x : = x − μ s x := \frac{x-\mu}{s} x:=sx−μ​

μ \mu μ 就是training set的该feature的value的均值, $s $ 可以是value的range(最大值-最小值),也可以是value的标准差。

继续阅读