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)

 

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