preprocessing 模塊提供了數據預處理函數和預處理類,預處理類主要是為了方便添加到 pipeline 過程中。
數據標准化
標准化預處理函數:
- 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) 標准化數據,即四分之一和四分之三分位點之間
它們對應的標准化預處理類:
- class preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True):
標准正態分布化的類
屬性:- scale_:ndarray,縮放比例
- mean_:ndarray,均值
- var_:ndarray,方差
- n_samples_seen_:int,已處理的樣本個數,調用
partial_fit()
時會累加,調用fit()
會重設
- class preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True):
將數據在縮放在固定區間的類,默認縮放到區間 [0, 1]
屬性:- min_:ndarray,縮放后的最小值偏移量
- scale_:ndarray,縮放比例
- data_min_:ndarray,數據最小值
- data_max_:ndarray,數據最大值
- data_range_:ndarray,數據最大最小范圍的長度
- class preprocessing.MaxAbsScaler(copy=True):
數據的縮放比例為絕對值最大值,並保留正負號,即在區間 [-1.0, 1.0] 內。可以用於稀疏數據 scipy.sparse
屬性:- scale_:ndarray,縮放比例
- max_abs_:ndarray,絕對值最大值
- n_samples_seen_:int,已處理的樣本個數
- class preprocessing.RobustScaler(with_centering=True, with_scaling=True, copy=True):
通過 Interquartile Range (IQR) 標准化數據,即四分之一和四分之三分位點之間
屬性:- center_:ndarray,中心點
- scale_:ndarray,縮放比例
- class preprocessing.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 - class preprocessing.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 - class preprocessing.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 函數不會做任何操作
類別數據編碼
數據的某些特征是文本,特征是無序的,比如國籍,但數字是有序的,所以不能直接用數字編碼
-
class preprocessing.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)
-
class preprocessing.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 類對應的處理函數 -
class preprocessing.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) -
class preprocessing.MultiLabelBinarizer(classes=None, sparse_output=False):
和 LabelBinarizer 類似
feature_extraction.DictVectorizer類
patsy包
數據缺失
-
class preprocessing.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]
-
class preprocessing.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 函數來轉換數據
- class preprocessing.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)
參考資料
User Guide:http://scikit-learn.org/stable/modules/preprocessing.html
API:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing