特征缩放
如果你有一个机器学习的问题,这个问题有多个特征,如果你能保证不同特征的取值范围在一个相近的范围内,这样你的梯度下降法就能更快的收敛。
具体地说,还是拿房价预测的例子,假设有两个特征x1是房屋的面积大小,它的取值范围在0-2000之间,x2是卧室的数量,取值范围在1-5之间,如果画出它的代价函数,应该是像这样:
这种数据范围差别很大的情况,画出的图像是一种非常歪斜并且椭圆的形状,其实2000:5的比例会更加的瘦长的椭圆形等值线,如果在这种代价函数上做梯度下降,你的梯度会花费很长的时间,并且会如上图所画来回波动,最终才能到达全局最小值。
在这种情况下,有一种有效的方法就是进行特征缩放,将房屋面积除以2000,数量除以5,那么它的代价函数就会是下面这种比较圆的等值线图,这样就会比较快的达到收敛,找到全局最小值。
就是因为这些特征的缩放使得他们的值比较接近,在这个例子中,x1、x2的取值范围都在0-1之间,梯度下降收敛的更快。
特征缩放的取值
通常来说,让特征的取值在-1<=xi<=1,我们之前定义的x0=1符合这个要求,对于不同的特征可能取值也不同,需要去除以不同的数字,而且1和-1这两个数值也不是死的,只要不是偏离这个范围太大的就可以,比如:0<=x1<=3,,2<=x2<=0.5都是可以的,但是如果是-100<=x3<=100范围偏离太大不可取,-0.001<=x4<=0.001,取值范围又太小也是不可取的,所以,总的来说不用特别在意你的特征取值范围是不是在这个范围里面,但是只要他们足够接近的话,梯度下降就会正常的工作。
特征缩放-均值归一化:
特征的均值归一化就是将特征xi用代替,让特征值具有为0的平均值(这句话不太理解),当然不用应用到x0,它的值一直都是1
eg:
,
解释:
假设房子的大小是2000平方,并且假设平均的大小是1000,就可以用size-1000再除以2000,这里的2000是最大值-最小值,同理x2也是一样。算出的新的特征大概在范围内,取值很接近。
一般的可以用它来算:
xi为特征值,该特征的均值,是该特征的范围(max-min)或者标准差(这个类似于非正态分布转化为正态分布的公式)
通过特征缩放可以让你的梯度下降所迭代的次数更少,收敛的更快一点。
注:,的取值都没有那么精确,只要将特征转换为比较接近的范围都是可以的。