数据在前处理的时候,经常会涉及到数据标准化。将现有的数据通过某种关系,映射到某一空间内。常用的标准化方式是,减去平均值,然后通过标准差映射到均至为0的空间内。系统会记录每个输入参数的平均数和标准差,以便数据可以还原。
很多ML的算法要求训练的输入参数的平均值是0并且有相同阶数的方差例如:RBF核的SVM,L1和L2正则的线性回归
sklearn.preprocessing.StandardScaler能够轻松的实现上述功能。
调用方式为:
首先定义一个对象:
ss = sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)
在这里
copy; with_mean;with_std
默认的值都是True.
copy 如果为false,就会用归一化的值替代原来的值;如果被标准化的数据不是np.array或scipy.sparse CSR matrix, 原来的数据还是被copy而不是被替代
with_mean 在处理sparse CSR或者 CSC matrices 一定要设置False不然会超内存
能够查询的属性:
scale_: 缩放比例,同时也是标准差
mean_: 每个特征的平均值
var_:每个特征的方差
n_sample_seen_:样本数量,可以通过patial_fit 增加
举个例子:
from sklearn.preprocessing import StandardScaler
import numpy as np
x=np.arange(10).reshape(5,2)
y=[1,0,0,0,1]
ss=StandardScaler()
ss.fit(x) # ss对象中的method下文会介绍
print(ss.n_samples_seen_ )
print(ss.mean_)
print(ss.var_)
print(ss.scale_)
x=ss.fit_transform(x)
print(x)
结果为
5
[ 4. 5.]
[ 8. 8.]
[ 2.82842712 2.82842712]
[[-1.41421356 -1.41421356]
[-0.70710678 -0.70710678]
[ 0. 0. ]
[ 0.70710678 0.70710678]
[ 1.41421356 1.41421356]]
能够被调用的Methods:
fit(X,y=None):计算输入数据各特征的平均值,标准差已经之后的缩放系数
X 为array 或者 稀疏矩阵,[样本数量,样本特征数]
y: 传入为了使得和Pipeline兼容
fit_transform(X,y=None,**fit_params): 通过fit_params调整数据X,y得到一个调整后的X
X 为array:训练集
y 为标签
返回一个改变后的X
get_params(deep=True): 返回StandardScaler对象的设置参数,接上文
print(ss.get_params(deep=True))
输出:
{‘with_mean’: True, ‘with_std’: True, ‘copy’: True}
inverse_transform(X,copy=None):顾名思义,就是按照缩放规律反向还原当前数据
默认copy 为None, 是否copy X
这个copy暂时没有试出区别
print(ss.inverse_transform(x,copy=True))
输出:
[[ 0. 1.]
[ 2. 3.]
[ 4. 5.]
[ 6. 7.]
[ 8. 9.]]
partial_fit(X, y=None): 在线计算平均值和标准差。适合X作为连续的数据流输入。
相关文献“Algorithms for computing the sample variance: Analysis and recommendations.” The American Statistician 37.3 (1983): 242-247:
transform(X, y=’deprecated’, copy=None):基于现有的对象规则,标准化新的参数