特征缩放主要是为了将独立变量集或数据特征向量的取值限定在一定的范围内,通常发生在数据预处理阶段。在机器学习算法中,特征矩阵各个维度的取值通常是不一样的,此时如果采用欧几里得距离来衡量两个特征的距离,那么最终的距离将严重取决于取值范围跨度大的特征维度,比如说在代表人属性的特征向量有两个维度,分别是年龄和身高,其中年龄的取值范围可以是[1, 100],身高的取值范围是[0.4, 2.5](单位:米),那么两个特征向量的距离将严重取决于年龄这个特征,身高基本上对两者的距离没有太大的影响。
从以上示例中可以看出,年龄、身高等有量纲量对学习算法的性能有着重要的影响,因此对输入特征矩阵进行特征缩放,将其转化为无量纲量是很多学习算法必要的操作,主要具有以下几个特点:
- 缩放后的特征矩阵,各个维度都具有相同的重要性。
- 可以加快梯度下降的收敛速度。
- 可以加快支持向量机的速度,但是会影响最终的结果。
由于翻译的原因,在国内通常使用归一化(Normalization)和标准化(Standardization)这两个术语来表示特征缩放这个操作,为了避免中文术语上的混乱,将采用维基百科上的英文术语,包括以下四种方法:
- Rescaling (min-max normalization)
- Mean normalization
- Standardization (Z-score Normalization)
- Scaling to unit length
Rescaling (min-max normalization)
即通常所说的归一化。该方法也称为最小-最大值缩放,是一种最简单的缩放方法,主要功能是将特征值缩放到区间[0, 1],其计算公式如下所示:
x
′
=
x
−
min
(
x
)
max
(
x
)
−
min
(
x
)
x^{\prime}=\frac{x-\min (x)}{\max (x)-\min (x)}
x′=max(x)−min(x)x−min(x)其中,
x
x
x表示原始值,
min
(
x
)
\min (x)
min(x)表示该特征维度的最小值,
max
(
x
)
\max (x)
max(x)表示该特征维度的最大值,
x
′
x^{\prime}
x′表示缩放后的值。该方法具有更加泛化的形式,即将特征值缩放到区间[a, b]之间,其计算公式如下所示:
x
′
=
a
+
x
−
min
(
x
)
max
(
x
)
−
min
(
x
)
(
b
−
a
)
x^{\prime}=a+\frac{x-\min (x)}{\max (x)-\min (x)}(b-a)
x′=a+max(x)−min(x)x−min(x)(b−a)其中,
b
b
b表示缩放后的最大值,
a
a
a表示缩放后的最小值。
Mean normalization
其计算公式如下所示:
x
′
=
x
−
average
(
x
)
max
(
x
)
−
min
(
x
)
x^{\prime}=\frac{x-\text { average }(x)}{\max (x)-\min (x)}
x′=max(x)−min(x)x− average (x)其中,
average
(
x
)
\text { average }(x)
average (x)表示特征维度
x
x
x的均值。
Standardization (Z-score Normalization)
即通常所说的标准化。该方法的主要功能是将数据按比例缩放,使之落入一个小的特定区间,可以使得输入数据的每个特征维度都具有均值0、方差1的性质,被广泛地应用于各种机器学习算法(如支持向量机、逻辑回归和人工神经网络)中,其计算公式如下所示:
x
′
=
x
−
x
ˉ
σ
x^{\prime}=\frac{x-\bar{x}}{\sigma}
x′=σx−xˉ其中,
x
ˉ
=
average
(
x
)
\bar{x}=\text { average }(x)
xˉ= average (x)表示特征维度
x
x
x的均值,
σ
\sigma
σ表示特征向量
x
x
x的标准差。
Scaling to unit length
该方法主要将各个特征值除以当前特征维度的欧几里得长度,被广泛地应用于机器学习领域,其计算公式如下所示:
x
′
=
x
∥
x
∥
x^{\prime}=\frac{x}{\|x\|}
x′=∥x∥x其中,
∥
x
∥
\|x\|
∥x∥表示当前维度的欧几里得长度。在某些情况下(如Histogram features),可以使用
L
1
L1
L1范数来代替
∥
x
∥
\|x\|
∥x∥,特别是在后续步骤中采用Scalar Metric作为距离度量方式。