scikit-learn模塊學習筆記(數據預處理模塊preprocessing)


本篇文章主要簡單介紹sklearn中的數據預處理preprocessing模塊,它可以對數據進行標准化。preprocessing 模塊提供了數據預處理函數和預處理類,預處理類主要是為了方便添加到pipeline 過程中。

以下內容包含了一些個人觀點和理解,如有疏漏或錯誤,歡迎補充和指出。

數據標准化

數據標准化:當單個特征的樣本取值相差甚大或明顯不遵從高斯正態分布時,標准化表現的效果較差。實際操作中,經常忽略特征數據的分布形狀,移除每個特征均值,划分離散特征的標准差,從而等級化,進而實現數據中心化。

公式為:(X-X_mean)/X_std 計算時對每個屬性/每列分別進行.

將數據按其屬性(按列進行)減去其均值,然后除以其方差。最后得到的結果是,對每個屬性/每列來說所有數據都聚集在0附近,方差值為1。

標准化預處理函數:

  • preprocessing.scale(X,axis=0, with_mean=True, with_std=True, copy=True):
    將數據轉化為標准正態分布(均值為0,方差為1)
  • preprocessing.minmax_scale(X,feature_range=(0, 1), axis=0, copy=True):
    將數據在縮放在固定區間,默認縮放到區間 [0, 1]
  • preprocessing.maxabs_scale(X,axis=0, copy=True):
    數據的縮放比例為絕對值最大值,並保留正負號,即在區間 [-1.0, 1.0] 內。唯一可用於稀疏數據 scipy.sparse的標准化
  • preprocessing.robust_scale(X,axis=0, with_centering=True, with_scaling=True,copy=True):
    通過 Interquartile Range (IQR) 標准化數據,即四分之一和四分之三分位點之間

它們對應的標准化預處理類:

  • classpreprocessing.StandardScaler(copy=True, with_mean=True,with_std=True):
    標准正態分布化的類
    屬性:
    • scale_:ndarray,縮放比例
    • mean_:ndarray,均值
    • var_:ndarray,方差
    • n_samples_seen_:int,已處理的樣本個數,調用partial_fit()時會累加,調用fit()會重設
  • classpreprocessing.MinMaxScaler(feature_range=(0, 1),copy=True):
    將數據在縮放在固定區間的類,默認縮放到區間 [0, 1],對於方差非常小的屬性可以增強其穩定性,維持稀疏矩陣中為0的條目
  • 屬性:
    • min_:ndarray,縮放后的最小值偏移量
    • scale_:ndarray,縮放比例
    • data_min_:ndarray,數據最小值
    • data_max_:ndarray,數據最大值
    • data_range_:ndarray,數據最大最小范圍的長度
  • classpreprocessing.MaxAbsScaler(copy=True):
    數據的縮放比例為絕對值最大值,並保留正負號,即在區間 [-1.0, 1.0] 內。可以用於稀疏數據scipy.sparse
    屬性:
    • scale_:ndarray,縮放比例
    • max_abs_:ndarray,絕對值最大值
    • n_samples_seen_:int,已處理的樣本個數
  • classpreprocessing.RobustScaler(with_centering=True,with_scaling=True, copy=True):
    通過 Interquartile Range (IQR) 標准化數據,即四分之一和四分之三分位點之間
    屬性:
    • center_:ndarray,中心點
    • scale_:ndarray,縮放比例
  • classpreprocessing.KernelCenterer
    生成 kernel 矩陣,用於將 svm kernel 的數據標准化(參考資料不全)

以上幾個標准化類的方法:

    • 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):設置參數

 

數據歸一化

  • preprocessing.normalize(X,norm='l2', axis=1, copy=True):
    將數據歸一化到區間 [0, 1],norm 可取值 'l1'、'l2'、'max'。可用於稀疏數據 scipy.sparse
  • classpreprocessing.Normalizer(norm='l2', copy=True):
    數據歸一化的類。可用於稀疏數據 scipy.sparse
    方法:fit(X[,y])、transform(X[, y,copy])、fit_transform(X[,y])、get_params([deep])、set_params(**params)

數據二值化

  • preprocessing.binarize(X,threshold=0.0, copy=True):
    將數據轉化為 0 和 1,其中小於等於 threshold 為 0,可用於稀疏數據 scipy.sparse
  • classpreprocessing.Binarizer(threshold=0.0,copy=True):
    二值化處理的類,可用於稀疏數據 scipy.sparse
    方法:fit(X[,y])、transform(X[, y,copy])、fit_transform(X[,y])、get_params([deep])、set_params(**params),其中fit 函數不會做任何操作

類別數據編碼

數據的某些特征是文本,特征是無序的,比如國籍,但數字是有序的,所以不能直接用數字編碼

  • classpreprocessing.OneHotEncoder(n_values='auto',categorical_features='all', dtype='float', sparse=True,handle_unknown='error'):
    將具有多個類別的特征轉換為多維二元特征,所有二元特征互斥,當某個二元特征為 1 時,表示取某個類別
    參數:
    • n_values:處理的類別個數,可以為‘auto’,int或者 int數組
    • categorical_features:被當作類別來處理的特征,可以為“all”或者下標數組指定或者mask數組指定
    屬性:
    • active_features_:ndarray,實際處理的類別數
    • feature_indices_:ndarray,第 i個原特征在轉換后的特征中的下標在 feature_indices_[i] 和 feature_indices_[i+1]之間
    • n_values_:ndarray,每維的類別數

    方法:fit(X[, y])、transform(X[, y,copy])、fit_transform(X[,y])、get_params([deep])、set_params(**params)

  • classpreprocessing.LabelBinarizer(neg_label=0, pos_label=1,sparse_output=False):
    和 OneHotEncoder 類似,將類別特征轉換為多維二元特征,並將每個特征擴展成用一維表示
    屬性:
    • 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)
  • preprocessing.label_binarize(y,classes, neg_label=0, pos_label=1, sparse_output=False):
    LabelBinarizer 類對應的處理函數
  • classpreprocessing.LabelEncoder
    將類別特征標記為 0 到 n_classes - 1 的數
    方法:fit(X[,y])、transform(X[, y,copy])、fit_transform(X[,y])、inverse_transform(y)、get_params([deep])、set_params(**params)
  • classpreprocessing.MultiLabelBinarizer(classes=None,sparse_output=False):
    和 LabelBinarizer 類似

feature_extraction.DictVectorizer類
patsy包

數據缺失

  • classpreprocessing.Imputer(missing_values='NaN',strategy='mean', axis=0, verbose=0, copy=True):
    參數:
    • missing_values:int 或者“NaN”,對np.nan的值用 "NaN"
    • strategy:"mean"、"median"、"most_frequent"
    屬性:
    • statistics_:ndarray,當axis==0時,取每列填補時用的值
    方法:fit(X[,y])、transform(X[, y,copy])、fit_transform(X[,y])、get_params([deep])、set_params(**params)

生成多項式數據

可以將數據多項式結合生成多維特征,比如 [a,b] 的二次多項式特征為 [1, a, b, a^2, ab, b^2]

  • classpreprocessing.PolynomialFeatures(degree=2,interaction_only=False, include_bias=True):
    參數:
    • degree:int,多項式次數
    • interaction_only:boolean,是否只產生交叉相乘的特征
    • include_bias:boolean,是否包含偏移列,即全為1 的列
    屬性:
    • powers_:ndarray,二維數組。powers_[i,j] 表示第 i 維輸出中包含的第 j 維輸入的次數
    • n_input_features_:int,輸入維數
    • n_output_features_:int,輸出維數
    方法:fit(X[,y])、transform(X[, y,copy])、fit_transform(X[,y])、get_params([deep])、set_params(**params)

增加偽特征

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

自定義數據轉換

可以使用自定義的 python函數來轉換數據

    • classpreprocessing.FunctionTransformer(func=None,validate=True, accept_sparse=False, pass_y=False):
      方法:fit(X[,y])、transform(X[, y,copy])、fit_transform(X[,y])、get_params([deep])、set_params(**params)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM