1. 程式人生 > >preprocessing資料預處理模組使用指南

preprocessing資料預處理模組使用指南

preprocessing 是sklearn庫的一個數據預處理模組,它提供了一些實用的資料預處理函式和預處理類。下邊就對這些功能進行一些簡單介紹,輔以一些例項,便於大家理解。

安裝: pip install scikit-learn

模組匯入並簡記為sp:

import sklearn.preprocessing as sp

一、 標準化資料

這裡指的標準化主要包括兩部分,均值移除+方差規模化 

  其目的是:使每個特徵的基準位置和分散範圍加以統一,在數量級上儘可能接近,對模型的預測結果做出均等的貢獻。這對後續模型的建立至關重要。

1. 標準化函式

        1. 標準化:               sp.scale(原始樣本矩陣X, with_mean=True, with_std=True, copy=True)                 均值移除樣本矩陣(轉為標準正態分佈-均值為0,標準差為1,預設按列axis=0)         2. 範圍縮放:             sp.minmax_scale(X,feature_range=(0, 1), axis=0, copy=True)                 將資料在縮放在固定區間,預設縮放到區間 [0, 1]         3. 針對稀疏矩陣:             sp.maxabs_scale(X,axis=0, copy=True)                     資料的縮放比例為絕對值最大值,並保留正負號,即在區間 [-1.0, 1.0] 內。             *唯一可用於稀疏資料 scipy.sparse的標準化*         4. 針對異常值:              sp.robust_scale(X,axis=0, with_centering=True, with_scaling=True,copy=True)             通過 Interquartile Range (IQR) 標準化資料,即四分之一和四分之三分位點之間

    2. 以上方法對應的類 

靈活的使用這些類,可以簡化資料處理過程,比如我們在訓練集上對資料做了轉換,只需要基於訓練集構建出這個轉換器,再在測試資料上使用它即可完成轉換,不必轉換兩次。             使用方法:                 1)構建轉換器scaler = xxScaler().fit()                 2)直接將訓練集的轉換方法應用於測試集                     scaler.transform(test_x)

            1. sp.StandardScaler(copy=True, with_mean=True, with_std=True):                 標準正態分佈化的類                 屬性:                 scale_:ndarray,縮放比例                 mean_:ndarray,均值                 var_:ndarray,方差                 n_samples_seen_:int,已處理的樣本個數,呼叫partial_fit()時會累加,呼叫fit()會重設

            2 .sp.MinMaxScaler(feature_range=(0, 1),copy=True):                 將資料在縮放在固定區間的類,預設縮放到區間 [0, 1],對於方差非常小的屬性可以增強其穩定性,維持稀疏矩陣中為0的條目                 屬性:                 min_:ndarray,縮放後的最小值偏移量                 scale_:ndarray,縮放比例                 data_min_:ndarray,資料最小值                 data_max_:ndarray,資料最大值                 data_range_:ndarray,資料最大最小範圍的長度

            3. classpreprocessing.MaxAbsScaler(copy=True):                 資料的縮放比例為絕對值最大值,並保留正負號,即在區間 [-1.0, 1.0] 內。                 **專門用於稀疏資料scipy.sparse**                 屬性:                 scale_:ndarray,縮放比例                 max_abs_:ndarray,絕對值最大值                 n_samples_seen_:int,已處理的樣本個數

            4. classpreprocessing.RobustScaler(with_centering=True,with_scaling=True, copy=True):                 通過 Interquartile Range (IQR) 標準化資料,即四分之一和四分之三分位點之間                 屬性:                 center_:ndarray,中心點                 scale_:ndarray,縮放

6.類方法:

            fit(X[,y]):            根據資料 X 的值,設定標準化縮放的比例             transform(X[,y, copy]):用之前設定的比例標準化 X             fit_transform(X[, y]):    根據 X設定標準化縮放比例並標準化             partial_fit(X[,y]):    累加性的計算縮放比例             inverse_transform(X[,copy]):將標準化後的資料轉換成原資料比例             get_params([deep]):    獲取引數             set_params(**params):    設定引數

二、歸一化(正則化)

        正則化是將樣本在向量空間模型上的一個轉換,有L1正則化和L2正則化。

            L1正則化:    向量中各元素絕對值之和             L2正則化:    向量中各元素的平方之和

1. 正則化函式

            sp.normalize(原始樣本矩陣X,norm="l1")    ->    歸一化樣本矩陣  

2. 對應的類

            sp.Normalizer(norm='l2', copy=True):             資料歸一化的類。可用於稀疏資料 

3. 類方法:

            fit(X[,y])             transform(X[, y,copy])             fit_transform(X[,y])             get_params([deep])             set_params(**params)         *normalize和Normalizer都既可以用在密集陣列也可以用在稀疏矩陣中*

三、二值化

        有時根據業務需求,需要設定一個閾值,使得樣本矩陣中大於閾值的元素置換為1;小於或等於閾值置換為0。         這樣,整個樣本矩陣就被處理為只由0和1組成的樣本空間。但是其缺點也一目瞭然,即: 會損失部分資料細節。

1. 二值化函式

        1. sp.binarize(X,threshold=0.0, copy=True):             將資料轉化為 0 和 1,其中小於等於 threshold 為 0,可用於稀疏資料 

2. 對應的類

            sp.Binarizer(threshold=0.0,copy=True):             二值化處理的類,可用於稀疏資料

3. 類方法

            fit(X[,y])             transform(X[, y,copy])             fit_transform(X[,y])             get_params([deep])             set_params(**params)             其中fit 函式不會做任何操作

四、獨熱編碼 one hot encoder

        將有n種特徵值的一個特徵變成n個二元的特徵,所有二元特徵互斥,當某個二元特徵為 1 時,表示取對應的這個類別

        ohe = sp.OneHotEncoder(n_values='auto',                                 categorical_features='all',                                 dtype='float',                                  sparse=True,                                 handle_unknown='error')             引數:             n_values:每個特徵的類別個數,可以為‘auto’,int或者 int陣列             categorical_features:被當作類別來處理的特徵,可以為“all”或者下標陣列指定或者mask陣列指定             sparse: False代表不壓縮;預設True代表壓縮,只展示1的位置(位置元組:值,eg:(0,5) 1)                      方法:             fit(X[, y])             transform(X[, y,copy])             fit_transform(X[,y])             get_params([deep])             set_params(**params)

可以發現這些資料處理器的方法中,都有fit,transform和fit_transform方法,這裡做一下簡單說明以便區分:

1)fit():表示用原始資料去定義轉換器;

2)transform():表示將構建號的轉換器應用到新的資料裡,即使用相同的轉換規則去處理資料  ;

3)fit_transform():則表示定義並使用的過程,及時前面已經定義(fit)過轉換器,此時用了fit_ransform()就表示重新定義轉換器了,另外這裡需要特別注意一下。如果新的資料樣本有了不同於原始資料的新值,則不能使用原轉換器了,此時就需要重新fit_transform一下。

             五、標籤編碼

        將類別特徵轉換為多維二元特徵,並將每個特徵擴充套件成用一維表示:0,1,2,3,...,每個值代表一個標籤。這裡大家可以自動腦補,將標籤編碼和獨熱編碼進行一下簡單對比,以理解兩者的異同。往往在實際應用過程中,輸入樣本特徵的處理通常採用獨熱編碼,而像分類問題的輸出一般採用標籤編碼。         lbe = sp.LabelEncoder(neg_label=0, pos_label=1,sparse_output=False)         屬性:             classes:        ndarry,所有類別的值             y_type_:        str             multilabel_:    bool             sparse_input_:    bool             indicator_matrix_:str         方法:             fit(X[, y])             transform(X[, y,copy])             fit_transform(X[,y])             inverse_transform(y)             get_params([deep])             set_params(**params)

六、填補缺失資料

        實際資料中往往存在Nan或null值的情況,一味的丟棄可能造成資料樣本的浪費,一定程度上也會影響到模型的構建,所以填補缺失值是一個很好的處理手段,實際應用中,可以使用均值,中位數,眾數等對缺失值進行填補。         imp = Imputer(missing_values='NaN', strategy='mean', axis=0,verbose=0,copy=True)         strategy:填補策略             "mean"        -    均值             "median"    -    中位數             "most_frequent"-眾數          對於稀疏矩陣:             imp = Imputer(missing_values=0, strategy='mean', verbose=0)             代表將0作為缺失值處理,為其補上均值

七、建立多項式特徵

        可以將資料多項式結合生成多維特徵,比如 [a,b] 的二次多項式特徵為5個 [1, a, b, a^2, ab, b^2]         比如:             [[0 1]              [2 3]              [4 5]]             -->    [[ 1.  0.  1.  0.  0.  1.]                      [ 1.  2.  3.  4.  6.  9.]                      [ 1.  4.  5. 16. 20. 25.]]         sp.PolynomialFeatures(degree=2,interaction_only=False, include_bias=True):         引數:             degree:int,多項式次數             interaction_only:boolean,是否只產生交叉相乘的特徵             include_bias:boolean,是否包含偏移列,即全為1 的列         方法:             fit(X[, y])             transform(X[, y,copy])             fit_transform(X[,y])             get_params([deep])             set_params(**params)

八、增加偽特徵

        sp.add_dummy_feature(X,value=1.0):         在 X 的第一列插入值為 value 的列

九、自定義特徵轉換函式

        將原始的特徵放進自定義的函式中做轉換,其輸出值就是根據自定函式的轉換規則轉換後的新特徵         transformer = sp.FunctionTransformer(func=None,validate=True, accept_sparse=False, pass_y=False):         func是自定義函式

以上就是sklearnp.reprocessing模組的基本應用,可以幫助大家在資料預處理上更加得心應手,如有不足或疏漏之處還請指正。