[python]sklearn中归一化与标准化

归一化

当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到 [0,1]之间,而这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling)。

在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数, feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from sklearn import preprocessing
import numpy as np

data = np.array([[1, 200], [3, 100], [5, 150]])
# 实现归一化
from sklearn import preprocessing
import numpy as np

data = np.array([[1, 200], [3, 100], [5, 150]])
# 实现归一化
scaler = preprocessing.MinMaxScaler() # 实例化
scaler = scaler.fit(data) # fit,在这里本质是生成min(x)和max(x)
result = scaler.transform(data) # 通过接口导出结果
result
print("result1:\n", result)
result_ = scaler.fit_transform(data) # 训练和导出结果一步达成
scaler.inverse_transform(result) # 将归一化后的结果逆转
# 使用MinMaxScaler的参数feature_range实现将数据归一化到[0,1]以外的范围中
data = [[1, 200], [3, 100], [5, 150]]
scaler = preprocessing.MinMaxScaler(feature_range=[5, 10]) # 结果范围从5到10
result = scaler.fit_transform(data) #fit_transform一步导出结果

print("result2:\n", result)

out:

1
2
3
4
5
6
7
8
result1:
[[0. 1. ]
[0.5 0. ]
[1. 0.5]]
result2:
[[ 5. 10. ]
[ 7.5 5. ]
[10. 7.5]]

标准化

当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分 布),而这个过程,就叫做数据标准化(Standardization),一般情况下无监督学习是用标准化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
from sklearn import preprocessing

data = np.array([[1, 200], [3, 100], [5, 150]])
scaler = preprocessing.StandardScaler() # 实例化
scaler.fit(data) # fit,本质是生成均值和方差
scaler.mean_ # 查看均值的属性mean_
scaler.var_ # 查看方差的属性var_
x_std = scaler.transform(data) # 通过接口导出结果
x_std.mean() # 导出的结果是一个数组,用mean()查看均值
x_std.std() # 用std()查看方差
scaler.fit_transform(data) # 使用fit_transform(data)一步达成结果
scaler.inverse_transform(x_std) # 使用inverse_transform逆转标准化
print(x_std)

out:
1
2
3
[[-1.22474487  1.22474487]
[ 0. -1.22474487]
[ 1.22474487 0. ]]