一、标准化(Standardization)
实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。(做概率论的题经常用这招啊)
但是,当单个特征的样本取值相差甚大或明显不遵从高斯正态分布时,标准化表现的效果较差。
公式为:(X-X_mean)/X_std 计算时对每个属性/每列分别进行.
将数据按其属性(按列进行)减去其均值,然后除以其方差。最后得到的结果是,对每个属性/每列来说所有数据都聚集在
from sklearn import preprocessing
import numpy as np
X = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_mean = X.mean(axis=0) #calculate mean
X_std = X.std(axis=0) #calculate variance
X1 = (X-X_mean)/X_std #standardize X
X_scale = preprocessing.scale(X) #use function preprocessing.scale to standardize X
二. 正则化( Normalizer)
归一化是缩放单个样本以具有单位范数的过程,这里的”范数”,可以使用L1或L2范数。如果你计划使用二次形式(如点积或任何其他核函数)来量化任何样本间的相似度,则此过程将非常有用。
数据归一化使用的是sklearn.preprocessing里实现的三种方案
MaxAbsScaler 将数据规约到[-1,1] 也称小数定标规范化
MinMaxScaler 将数据规约到[0,1] 也称最小最大规范化
StandardScaler 标准差归一化,也称零-均值规范化
MaxAbsScaler 的计算公式如下:
data/10**np.ceil(np.log10(data.abs().max())) 即所有数据除以最大值及其10的阶方
由于源码中将输出的负值取了绝对值,因此最后的结果值都是正数
MinMaxScaler 的计算公式如下:
( data -data.min()) / (data.max()-data.min()) 即所有数据减去最小值除以极差
StandardScaler 的计算公式如下:
(data -data.mean())/data.std() 所有数据减去均值除以方差
import sklearn.datasets as ds
iris = ds.load_iris()
x = iris.data[:, :2] # we only take the first two features.
y = iris.target
from sklearn import preprocessing
# MaxAbsScaler
max_abs_scaler = preprocessing.MaxAbsScaler()
max_abs_x = max_abs_scaler.fit_transform(x)
max_abs_x
# MinMaxScaler
min_max_scaler = preprocessing.MinMaxScaler()
min_max_x = min_max_scaler.fit_transform(x)
min_max_x
# StandardScaler
standard_scaler = preprocessing.StandardScaler()
standard_x = standard_scaler.fit_transform(x)
standard_x