Python: scikit-learn教程與實例(一)——數據預處理(數據標準化之線性變換)

scikit-learn數據預處理——數據標準化之線性變換

sklearn.preprocessing包提供了幾個常用的函數和類,用於常見的數據預處理操作。
在講標準化之前需要強調的一點是scikit-learn對於數據集的要求是[n_sample*n_feature],即每一行代表一個樣本,每一列代表一個特徵。

1.標準正態分佈

scikit-learn有提供的直接將數據處理成標準正態分佈(均值爲0,標準差爲1)的函數:preprocessing.scale

import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1.,  2.],
                   [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X_train)
print(X_scaled)
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]

preprocessing.scale函數中參數axis表示計算平均值和標準差的軸。 如果爲axis=0(默認爲0),則對每個特徵執行標準化,如果爲axis=1,則按照樣本執行標準化(逐行)。

import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1.,  2.],
                   [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X_train,axis=1)
print(X_scaled)
[[ 0.26726124 -1.33630621  1.06904497]
 [ 1.41421356 -0.70710678 -0.70710678]
 [ 0.          1.22474487 -1.22474487]]

2.線性縮放

標準化方法是將數據縮放到給定的最小值和最大值之間,通常在0到1之間,或者將每個特徵的最大絕對值縮放到單位大小。 這可以分別使用MinMaxScaler或MaxAbsScaler來實現。

import numpy as np
from sklearn import preprocessing
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)
print(X_train_minmax)

結果:

[[0.5        0.         1.        ]
 [1.         0.5        0.33333333]
 [0.         1.         0.        ]]

特徵變換的範圍由參數feature指定,默認爲(0,1),注意: MinMaxScaler沒有axis這個參數,默認就是逐列進行標準化。

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,2))   

MaxAbsScaler將每個特徵的最大絕對值縮放到一定範圍,默認爲[-1,1]。函數中參數axis表示計算平均值和標準差的軸。 如果爲axis=0(默認爲0),則對每個特徵執行標準化,如果爲axis=1,則按照樣本執行標準化(逐行)。

X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])

max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
print(X_train_maxabs)
[[ 0.5 -1.   1. ]
 [ 1.   0.   0. ]
 [ 0.   1.  -0.5]]

3.稀疏數據的線性變換

稀疏數據是指,數據框中絕大多數數值缺失或者爲零的數據。對稀疏數據進行線性變換時,推薦使用MaxAbsScaler和maxabs_scale。另外,Scaler和StandardScaler可以接受scipy.sparse矩陣作爲輸入,但是需要設置參數(with_mean = False)。對稀疏數據可以使用tranform方法,但是不能使用RobustScaler方法。

4.含異常值的數據的線性變換

如果數據中包含許多異常值,可以使用robust_scale和RobustScaler方法。

本文的內容來自scikit-learn官方文檔:https://scikit-learn.org/stable/modules/preprocessing.html

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