1. 定义
1.1 MinMax归一化
特征缩放到(0,1)或(-1,1)之间
公式:
(
X
i
−
m
i
n
(
X
i
)
)
/
(
m
a
x
(
X
i
)
−
m
i
n
(
X
i
)
)
(X_i - min(X_i)) / (max(X_i)-min(X_i))
(Xi−min(Xi))/(max(Xi)−min(Xi))
1.2 Z-score标准化
缩放到均值为0,方差为1的状态(分布)
公式:
(
X
i
−
X
ˉ
)
/
σ
(
X
i
)
(X_i -\bar{X}) / \sigma{(X_i)}
(Xi−Xˉ)/σ(Xi)
2. 区别
2.1 相同点
都是对数据的一种线性变换
2.2 不同点
MinMax归一化:改变了原数据的分布,使得各个特征维度对目标函数的影响一致,即使扁平分布的数据变成类圆。
Z-score标准化:不改变原数据的分布,是不同度量之间的特征具有可比性,即不改变数据的几何距离。
注:MinMax归一化,极易受极端值的影响。
3. 应用场景
3.1 需要使用标准化或归一化的模型
LR, Kmeans,KNN,SVM等模型(理由待补充)
注:神经网络归一化,可以提高迭代速度,避免爆炸,
但是由于改变了原数据的分布,可能影响准确率。
3.2 不需要的模型
树模型:决策树(理由待补充)
4. python实现
4.1 MinMax归一化
from sklearn.preprocessing import MinMaxScaler
dict1 = {'长度':[15,17,2,10,9],'高度':[5,3,1,1,4]}
dict2 = {'长度':[5,8],'高度':[3,2]}
df = pd.DataFrame(dict1)
new_df = pd.DataFrame(dict2)
print(df)
print(new_df)
>>df
长度 高度
0 15 5
1 17 3
2 2 1
3 10 1
4 9 4
>>new_df
长度 高度
0 5 3
1 8 2
scaler = MinMaxScaler()
#从df中计算用于以后缩放的参数:min,max (按特征列)
scaler.fit(df)
#以参照的缩放比例,对原数据进行缩放
scaler.transform(df)
>>df_normal
0 0.86666667, 1.
1 1. , 0.5
2 0. , 0.
3 0.53333333, 0.
4 0.46666667, 0.75
#以参照的缩放比例,对新数据进行缩放
scaler.transform(new_df)
>>new_df_normal
0 0.2 , 0.5
1 0.4 , 0.25
#以参照的缩放比例,还原缩放后的新数据
new_df_noraml = scaler.transform(new_df)
scaler.inverse_transform(new_df_noraml)
>>new_df
0 5., 3.
1 8., 2.