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模組的基本應用,可以幫助大家在資料預處理上更加得心應手,如有不足或疏漏之處還請指正。