sklearn 数据预处理

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_scaleRobustScaler

2.4缩放和白化

由于下游模型可以进一步对特征的线性独立性作出一些假设,所以只做标准化是不够的。所以才有白化(whitening)的技术要求。它就是将特征向量之间的相关性消除。

要解决此问题,您可以使用sklearn.decomposition.PCAsklearn.decomposition.RandomizedPCA设置 whiten = True来进一步删除跨特征的线性相关性

3、 非线性转化

 与缩放器不同,QuantileTransformer将每个特性放入相同的范围或分u,然后通过执行等级转换,可以消除不寻常的分布,并且比缩放方法更少受异常值的影响。但是,会扭曲特征内和特征之间的相关性和距离、

QuantileTransformerquantile_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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章