归⼀化
当数据(x)按照最⼩值中⼼化后,再按极差(最⼤值 - 最⼩值)缩放,数据移动了最⼩值个单位,并且会被收敛到[0,1]之间,⽽这个过程,就叫做数据归⼀化(Normalization,⼜称Min-Max Scaling)。
使用numpy实现归一化
import numpy as np
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
X = np.array(data)
X_nor = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) # 使用numpy实现归一化
X_return = X_nor * (X.max(axis=0) - X.min(axis=0)) + X.min(axis=0) # 逆转归一化
使用pandas实现归一化
import pandas as pd
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
X = pd.DataFrame(data)
x_nor = (X - X.min())/(X.max() - X.min()) # 使用pandas实现归一化
x_return = x_nor * (X.max() - X.min()) + X.min() # 逆转归一化
使用sklearn完成归一化
from sklearn.preprocessing import MinMaxScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
#实现归⼀化
scaler = MinMaxScaler() #实例化
scaler = scaler.fit(data) #fit,在这⾥本质是⽣成min(x)和max(x)
result = scaler.transform(data) #通过接⼝导出结果
result
result_ = scaler.fit_transform(data) #训练和导出结果⼀步达成
scaler.inverse_transform(result) #将归⼀化后的结果逆转
#使⽤MinMaxScaler的参数feature_range实现将数据归⼀化到[0,1]以外的范围中
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = MinMaxScaler(feature_range=(5,10)) #依然实例化
result = scaler.fit_transform(data) #fit_transform⼀步导出结果
result
#当X中的特征数量⾮常多的时候,fit会报错并表示,数据量太⼤了我计算不了
#此时使⽤partial_fit作为训练接⼝
#scaler = scaler.partial_fit(data)
标准化(standardization)
当数据(x)按均值(μ)中⼼化后,再按标准差(σ)缩放,数据就变成满⾜均值为0,⽅差为1的分布,⽽这个过程,就叫做数据标准化(Standardization,⼜称Z-score normalization)。公式一般为:(X-mean)/std
,其中mean是平均值,std是标准差。
从公式我们可以看出,标准化操作(standardization)是将数据按其属性(按列)减去平均值,然后再除以标准差。这个过程从几何上理解就是,先将坐标轴零轴平移到均值这条线上,然后再进行一个缩放,涉及到的就是平移和缩放两个动作。这样处理以后的结果就是,对于每个属性(每列)来说,所有数据都聚集在0附近,标准差为1。计算时对每个属性/每列分别进行。
使用sklearn完成标准化
from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = 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逆转标准化
StandardScaler和MinMaxScaler选哪个?
看情况。⼤多数机器学习算法中,会选择StandardScaler来进⾏特征缩放,因为MinMaxScaler对异常值⾮常敏感。在PCA,聚类,逻辑回归,⽀持向量机,神经⽹络这些算法中,StandardScaler往往是最好的选择。
MinMaxScaler在不涉及距离度量、梯度、协⽅差计算以及数据需要被压缩到特定区间时使⽤⼴泛,⽐如数字图像处理中量化像素强度时,都会使⽤MinMaxScaler将数据压缩于[0,1]区间之中。
建议先试试看StandardScaler,效果不好换MinMaxScaler。