导读
无论是在机器学习还是深度学习领域,特征归一化都是我们经常用到的一项技术。刚入行的小白在看各种课程、视频的时候肯定也经常遇到它。
说到底,什么是特征归一化呢?它有什么作用呢?怎么进行特征归一化?什么时候需要进行特征归一化而什么时候不需要呢?
下面我们就根据上面的夺命连环问说一说特征归一化的“底细”。
什么是特征归一化
特征归一化=特征+归一化。特征,搞机器学习的都熟悉,首先我们获取的是一批原始数据,然后我们挖掘这些数据之间的规律和模式,找到最能表征这批数据本身的属性,并且这些属性能有利于我们后续的回归和分类任务,这些属性我们就把它们叫做特征。具体的特征提取和处理的方法有专门的一个分支——特征工程,对于搞机器学习的同学还是很有帮助的,有兴趣的可以看一下(特征归一化就是其中一个知识点)。归一化,是物理系统中一种去量纲处理的方法,它可以使系统数值中的绝对值变成某种相对的关系,用以缩小量值,简化计算。根据字面意思,特征归一化即是将特征进行去量纲化,将特征值由绝对值变为某种相对的关系,说白了就是对数据的一种线性或非线性变换。常见的有最大值-最小值归一化…。
特征归一化的作用
在机器学习中,我们希望我们提取的特征之间是弱相关的,因为如果特征之间相关性强会增加冗余信息,给系统增加计算量的同时并不会带来多少精度的提升。除此之外,特征之间所占的权重应该是相差无几的,至少不能相差太多,而在现实情况中,特征之间的数值相差是很大的,以简单的回归模型——房价预测为例,特征中有房子年龄、房间数量、面积等,我们知道,房间数量一般都是个位数(单位:间数),而面积一般为三位数(单位:平方)。如果我们带量纲进行优化模型的话,就将特征放在了重要性不同的位置,优化方向会更偏向数值较大的属性方向,详情看下图,从图中可以看到特征归一化可以让我们更快更准确地找到最优解。为了去量纲化,保证优化朝着正确的方向进行,我们就需要用到特征归一化,上节说到特征归一化是用来去量纲化的一种方法。
怎么进行特征归一化
特征归一化有很多种方法:Min-Max Scaling、Zero-Score Normalization、非线性归一化。
Min-Max Scaling
Min-Max Scaling的变换公式如下:
X
t
=
1
/
(
X
m
a
x
−
X
m
i
n
)
∗
(
X
−
X
m
i
n
)
X_t=1/(X_{max}-X_{min})*(X-X_{min})
Xt=1/(Xmax−Xmin)∗(X−Xmin)
其中,
X
m
a
x
,
X
m
i
n
X_{max},X_{min}
Xmax,Xmin分别是特征中的最大值和最小值。经过上述公式变换后,特征被映射到[0,1]之间的相对值,同时还减小了数值。如果想映射为[-1,1]之间,可以改为以下公式:
X
t
=
1
/
(
X
m
a
x
−
X
m
i
n
)
∗
(
X
−
X
m
e
a
n
)
X_t=1/(X_{max}-X_{min})*(X-X_{mean})
Xt=1/(Xmax−Xmin)∗(X−Xmean)
其中,
X
m
e
a
n
X_{mean}
Xmean是特征中均值。
Zero-Score Normalization
Zero-Score Normalization是对数据进行去均值,方差归一。变换公式如下:
X
t
=
1
/
σ
∗
(
X
−
μ
)
X_t=1/σ*(X-μ)
Xt=1/σ∗(X−μ)
假设原始特征的均值为μ、标准差为σ,它会将原始数据映射到均值为0、标准差为1的高斯分布上。
非线性归一化
以上几种方法都是线性归一化,除此之外我们还可以借助对数函数、反正切函数等进行非线性归一化的操作。例如:
X
t
=
l
o
g
(
X
)
/
l
o
g
(
X
m
a
x
)
X_t=log(X)/log(X_{max})
Xt=log(X)/log(Xmax)
什么时候需要特征归一化
虽然经过上述讲解,特征归一化听起来很厉害,但是也不是在什么情况下都需要它。通常在模型优化器使用梯度下降法则的时候,特征归一化是很有必要的,比如,逻辑回归、支持向量机、神经网络等(一般KNN也需要,因为需要计算各特征之间的距离,去量纲化可以很好地降低计算复杂度和均衡算法对各特征地关注程度)。相反,树模型就不需要进行特征归一化,因为在树的每个叶子节点,都是对特征选取阈值,然后将样本一分为二,所以做特征归一化的意义不大,对阈值分割无影响。