文章目录
- 一、公式
- 二、代码
- 三、区别
- 四、结论
一、公式
-
归一化
X ′ = x − m i n m a x − m i n X' = { x-min \above{1pt} max-min} X′=max−minx−min
X ′ ′ = X ′ ∗ ( m a − m i ) + m i X'' = X' * (ma-mi) + mi X′′=X′∗(ma−mi)+mi -
标准化
X ′ = x − m e a n s t d X' = { x-mean \above{1pt} std} X′=stdx−mean
ps:
- max:特征最大值
- min:特征最小值
- ma:特征归一化后的最大值
- mi:特征归一化后的最小值
- mean:特征均值
- std:特征标准差
二、代码
- 归一化
from sklearn.preprocessing import MinMaxScaler
import pandas as pdif __name__ == '__main__':# 初始化数据columns = ['点赞', '投币', '收藏']data = [[1, 5, 12],[13, 2, 5],[9, 9, 6],[2, 5, 0]]data = pd.DataFrame(data=data, columns=columns)print(data)# 点赞 投币 收藏# 0 1 5 12# 1 13 2 5# 2 9 9 6# 3 2 5 0# 定义缩放范围min_scaler, max_scaler = 0, 1# 初始化缩放器scaler = MinMaxScaler(feature_range=(min_scaler, max_scaler))# 执行归一化data_minmax = scaler.fit_transform(data[columns])print(data_minmax)# [[0. 0.42857143 1. ]# [1. 0. 0.41666667]# [0.66666667 1. 0.5 ]# [0.08333333 0.42857143 0. ]]
- 标准化
from sklearn.preprocessing import StandardScaler
import pandas as pdif __name__ == '__main__':# 初始化数据columns = ['点赞', '投币', '收藏']data = [[1, 5, 12],[13, 2, 5],[9, 9, 6],[2, 5, 0]]data = pd.DataFrame(data=data, columns=columns)print(data)# 点赞 投币 收藏# 0 1 5 12# 1 13 2 5# 2 9 9 6# 3 2 5 0# 定义缩放范围min_scaler, max_scaler = 0, 1# 初始化缩放器scaler = StandardScaler()# 执行标准化【均值为0标准差为1】data_minmax = scaler.fit_transform(data[columns])print(data_minmax)# [[-1.05662467 -0.10050378 1.46552595]# [ 1.35851743 -1.30654916 -0.17586311]# [ 0.55347007 1.50755672 0.05862104]# [-0.85536283 -0.10050378 -1.34828388]]
三、区别
归一化与标准化都是对数据的特征进行缩放,二者的区别是:
- 标准化受异常样本的影响小
样本中如果出现异常值的话,该值可能会非常大或非常小,归一化的分母是最大值与最小值的差,这很可能会导致正常样本的值都挤在一个跟小的范围内,从而影响预测结果,而标准化的分母是样本标准差,受异常点的影响较小。 - 符合统计学假设
自然界中的数值特征多是符合正态分布的,标准化基于这个隐含假设,将这个正态分布调整为均值为0,方差为1的标准正态分布。
四、结论
在需要进行特征缩放的数据集上 尽量采用标准化 而不是归一化去解决问题(另外还有一点需要特别注意,要把训练集和测试集分开后再分别标准化,否则会将测试集的信息引入到训练集中从而影响训练结果)