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