为什么需要对数值型的特征做归一化?
假设有这样一组数据
身高(米) | 体重(斤) |
---|---|
1.6 | 130 |
1.7 | 125 |
1.8 | 145 |
1.9 | 135 |
公式:健康 = 3*身高 + 2*体重,那么,体重相对于身高而言,在健康中的比重占的多的多,显然这样是并不合理的,此时我们需要通过归一化方法,把两个特征处在同一个数量级上。
问题一:归一化的方法有哪些?
一. 最大最小值归一化(线性函数的归一化):
公式: Xnormal = ( X − X m i n X m a x − X m i n ) \left(\frac{X - X~min~}{X~max~-X~min~}\right) (X max −X min X−X min ),
例如当X=130时, Xnormal =
(
130
−
125
145
−
125
)
\left(\frac{130 - 125}{145~-125}\right)
(145 −125130−125) = 0.25,这样就把数据归到[0, 1]之间。
缺陷:对异常值敏感。
假如体重中出现了500斤的数据,显然Xnormal =
(
130
−
125
500
−
125
)
\left(\frac{130 - 125}{500 - 125}\right)
(500−125130−125) = 0.013,与真实的值0.25相差过大,影响最终结果。
二. 零均值归一化方法:
公式: Xnormal = ( X − μ σ ) \left(\frac{X - \mu}{\sigma}\right) (σX−μ)
μ \mu μ 是均值, σ \sigma σ 是标准差,计算同上。
问题二:为什么要归一化?
归一化加快模型训练,减少迭代次数(以等高线展示)。
左图是未归一化的时候,由于两个特征不在同一个数量级上,等高线的平面图呈椭圆状,边上的点切线的垂直方向是代价函数的收敛方向,程序经过多次迭代,最终才到达中心点的最小值。
右图是归一化的时候,边上的点切线的垂直方向是代价函数的收敛方向,每次收敛的方向几乎直接指向圆心,程序经过多次迭代,最终才到达中心点的最小值。
由此可以得出,右图比左图收敛的更快,迭代次数更少。
问题三:哪些模型需要归一化?
线性回归, 逻辑回归,SVM, 神经网络
问题四:哪些模型不需要归一化?
树形结构不需要,eg:决策树,往往看的是增量