Preprocessing是Python scikit learn第六个模块,主要介绍了如何对于数据集的预处理。
以下内容包含了一些个人观点和理解,如有疏漏或错误,欢迎补充和指出。
这篇主要是自主学习Preprocessing的Python代码,并做相应的记录。
按照教程的书写习惯,数据矩阵,每一行代表一个样本,列代表随机变量。
标准化preprocessing.scale方法,直接实现0均值,1标准差。
from sklearn import preprocessing
import numpy as np
X = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled = preprocessing.scale(X)
print(X_scaled)
############
[[ 0. -1.22474487 1.33630621]
[ 1.22474487 0. -0.26726124]
[-1.22474487 1.22474487 -1.06904497]]
可以查看X_scaled的均值和标准差,axis=0表示第一个坐标轴
print(X_scaled.mean(axis = 0))
print(X_scaled.std(axis = 0))
#######################
[ 0. 0. 0.]
[ 1. 1. 1.]
preprocessing.StandardScaler类可以用来计算数据矩阵的均值和标准差,而且这个类用起来更方便
<pre name="code" class="python">from sklearn import preprocessing
import numpy as np
X = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])
scaler = preprocessing.StandardScaler().fit(X)
print(scaler.mean_)
print(scaler.std_)
print(scaler.transform(X))
###################
[ 1. 0. 0.33333333]
[ 0.81649658 0.81649658 1.24721913]
[[ 0. -1.22474487 1.33630621]
[ 1.22474487 0. -0.26726124]
[-1.22474487 1.22474487 -1.06904497]]
scaler接下来可以用来对test数据集进行同样的标准化。
print(scaler.transform(np.array([[-1., 1., 0.]])))
######################
[[-2.44948974 1.22474487 -0.26726124]]
可以设定with_mean=False,with_std=False在StandardScaler的构造函数里得到不对均值或者标准差处理的版本。
scaler = preprocessing.StandardScaler(with_mean = True, with_std = False).fit(X)
print(scaler.mean_)
print(scaler.std_)
print(scaler.transform(X))
scalernew = preprocessing.StandardScaler(with_mean = False, with_std = True).fit(X)
print(scalernew.mean_)
print(scalernew.std_)
print(scalernew.transform(X))
##############################
[ 1. 0. 0.33333333]
None
[[ 0. -1. 1.66666667]
[ 1. 0. -0.33333333]
[-1. 1. -1.33333333]]
None
[ 0.81649658 0.81649658 1.24721913]
[[ 1.22474487 -1.22474487 1.60356745]
[ 2.44948974 0. 0. ]
[ 0. 1.22474487 -0.80178373]]
值得注意的是,如果设置了,with_mean=False,或with_std=False,scaler.mean_ = None scalernew.std_ = None
preprocessing.MinMaxScaler类可以把数据集映射到一个区间上
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax)
#############
[[ 0.5 0. 1. ]
[ 1. 0.5 0.33333333]
[ 0. 1. 0. ]]