标准化&归一化
Standardization: z-score标准化(-1 ~ 1)
将数据均值转化为0,标准差转化为1。处理后的数据符合标准正态分布。
Normalization: min-max归一化(0 ~ 1)
利用最大最小值,将数据进行线性转化,范围落在(0 ~ 1)。
为何要标准化/归一化
1 可以提升模型的收敛速度 采用梯度下降法求解时,归一化后优化形状变为圆形,梯度方向直指圆心,迭代速度变快,大大减少寻找最优解的时间;
2 提升模型的精度 设计距离计算时,数量级小的特征对结果的影响远远小于数量级大的特征,对精度造成损失,归一化可以使各个特征对结果做出的贡献相同。
适用场合
基于树算法不需要标准化(决策树、RF、XGboost等)
1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,标准化Z-score 表现更好。
2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用min-max或其它归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0~255]的范围。
归一化min-max后,其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。
标准化z-score方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离时,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。参考:https://blog.csdn.net/sjyttkl/article/details/80181018
sklearn实现
# min-max归一化
from sklearn.preprocessing import MinMaxScaler
std=MinMaxScaler()
X_std=std.fit_transform(X_train)
# z-score标准化
from sklearn.preprocessing import StandardScaler
std=StandardScaler()
X_std=std.fit_transform(X_train)
为了让测试集和训练集有相同的标准化或归一化变换,一般先fit (train) ,再transform ( train) 、transform ( test)。
内容略有单薄,其实是来蹭勋章的 o(*////▽////*)q 第二颗勋章get ! 10.24原来是程序员节日!又涨知识了。