一、标准化与归一化的概念
标准化:通过特征的平均值和标准差,将特征缩放成一个标准的正态分布,缩放后均值为0,方差为1。但数值并非一定是正态的。特别适用于数据的最大值和最小值未知,或存在孤立点。
归一化:利用特征的最大值和最小值,将特征缩放到[0,1]区间
二、标准化
标准化表达式:样本值减去均值除以标准差
x
′
=
x
−
mean
(
x
)
σ
x^{\prime}=\frac{x-\operatorname{mean}(x)}{\sigma}
x′=σx−mean(x)
标准化是为了方便数据的下一步处理,标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。
三、归一化
归一化表达式:样本值减去均值除以最大值与最小值之差
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)
不同特征往往具有不同的量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据归一化处理,以解决数据指标之间的可比性。原始数据经过数据归一化处理后,各指标处于[0,1]之间。
四、应用场景
(1)对处理后的数据范围有严格要求,使用归一化
(2)数据存在异常值和较多噪音,此时归一化受异常值影响,用标准化
(3)在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,标准化表现更好
(4)在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。
(5)概率模型(树形模型)不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。
(6)当采用普通的线性回归的时候,是无需标准化的。因为标准化前后,不会影响线性回归预测值。
(7)在不涉及距离度量、协方差计算、数据不符合正太分布的时候,使用归一化合适
五、python实现
5.1 归一化
from sklearn.preprocessing import MinMaxScaler
# 创建MinMaxScaler()对象
preprocess = MinMaxScaler()
data = [[10, 10, 15, 10],
[5, 1, 21, 5],
[1, 2, 15, 12]]
data = preprocess.fit_transform(data)
print(data)
5.2 标准化
from sklearn.preprocessing import StandardScaler
# 创建StandardScaler()对象
preprocess = StandardScaler()
data = [[10, 10, 15, 10],
[5, 1, 21, 5],
[1, 2, 15, 12]]
data = preprocess.fit_transform(data)
print(data)