1、数据标准化
sklearn.perprocessing.scale
sklearn.preprocessing.StandScaler
2、数据缩放
2.1 MinMaxScaler MaxAbsScaler
2.2稀疏数据 缩放
2.3带有异常值得数据缩放
2.4缩放和百花
3、非线性转换
4、 规范化
5、二值化
6、分类数据连续化
7、估算缺失值
1、数据标准化
sklearn.preprocessing .scale
函数scale提供了一种在单个类似数组的数据集上执行标准化操作的快捷方法
归一化,又称标准化,指特征数据减去均值,再除以标准差
意义:通过中心化和归一化处理,得到均值为0,标准差为1的服从正太分布的数据。
z-zero 归一化后的数据均值为0,标准差为1
from sklearn import preprocessing
import numpy as np
X_train=np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled=preprocessing.scale(X_train)
print(X_scaled)
##垂直方向上做标准化
#均值
print(X_scaled.mean(axis=0))
#方差
print(X_scaled.std(axis=0))
X_train.mean(axis=0)
sklearn.preprocessing.StandardScaler
我们经常需要保存训练阶段使用的标准差和平均值。StandardScaler 实现了Transformer API 来计算训练集上的平均值和标准差,一遍稍后可以再测试集上重新应用相同的转换
scaler=preprocessing.StandardScaler().fit(X_train)
scaler
scaler.mean_
scaler.scale_
scaler.transform(X_train)
X_test = [[-1., 1., 0.]]
scaler.transform(X_test)
2、数据缩放
最小最大规范化 对原始数据进行线性变换
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
min_max_scaler=preprocessing.MinMaxScaler()
X_train_minmax=min_max_scaler.fit_transform(X_train)
X_train_minmax
2.1 MinMax的转换类似于:
X_std=(X-X.min)/(X.max-X.min)
2.2 稀疏数据的缩放
将稀疏数据中心化会破坏数据的稀疏结构,然而,将稀疏数据缩放是有意义的,特别是特征向量在不同的尺度上
MAxAbScalar和maxabs_scale 专门用于缩放稀疏数据,并且是推荐的方法。
from sklearn.preprocessing import MaxAbsScaler
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., 0.]]
transformer=MaxAbsScaler().fit(X)
transformer
transformer.transform(X)
2.3 异常值的缩放
如果数据集包括很多异常值,则使用robust_scale
和RobustScaler
2.4缩放和白化
由于下游模型可以进一步对特征的线性独立性作出一些假设,所以只做标准化是不够的。所以才有白化(whitening)的技术要求。它就是将特征向量之间的相关性消除。
要解决此问题,您可以使用sklearn.decomposition.PCA
或sklearn.decomposition.RandomizedPCA
设置 whiten = True
来进一步删除跨特征的线性相关性
3、 非线性转化
与缩放器不同,QuantileTransformer将每个特性放入相同的范围或分u,然后通过执行等级转换,可以消除不寻常的分布,并且比缩放方法更少受异常值的影响。但是,会扭曲特征内和特征之间的相关性和距离、
QuantileTransformer
和quantile_transform
提供基于分位数函数的非参数变换,以便将数据映射到0到1之间的均匀分布。他的方法将功能转换为均匀或正态分布。因此,对于一个给定的特征,这种转换倾向于分散高频值。它也减少了(边际)异常值的影响:因此这是一个强大的预处理方案。
该转换是独立应用于每个功能的。特征的累积密度函数用于投影原始值。低于或高于拟合范围的新/未见数据的特征值将被映射到输出分布的边界。请注意,这种转换是非线性的。它可能会扭曲在相同规模下测量的变量之间的线性相关性,但会使得在不同规模下测量的变量更加直接可比
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris=load_iris()
X,y=iris.data,iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
qt=preprocessing.QuantileTransformer(random_state=0)
X_train_trans=qt.fit_transform(X_train)
X_test_trans=qt.fit_transform(X_test)
4、规范化
规范化是将不同变化范围的值映射到相同的固定范围,常见的是[0,1],此时也称为归一化
X = np.random.rand(3,3)
X_normalized = preprocessing.normalize(X, norm='l2')
X_normalized
normalizer = preprocessing.Normalizer()
normalizer.transform(X)
5、二值化
bibarizer=preprocessing.Binarizer(threshold=0.5)
bibarizer.transform(X_train)
6、分类数据连续化
# 这是三列分类数据
# 在我们的数据集中有两种性别,三种可能的大陆和四种网页浏览器。
X = [[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]]
enc = preprocessing.OneHotEncoder()
enc.fit(X)
enc.transform([[0, 1, 3]]).toarray()
设置分类特征数
enc = preprocessing.OneHotEncoder(n_values=[3, 3, 4])
enc.fit(X)
enc.transform([[0, 1, 3]]).toarray()
7、估算缺失值
import numpy as np
from sklearn.preprocessing import Imputer
X=[[1,2],[6,np.nan],[7,6]]
##使用均值代替缺失值
imp=Imputer(missing_values='NaN',strategy='mean',axis=0)
imp.fit(X)
imp.transform(X)