【機器學習個人筆記】scikit-learn的四種特徵縮放方式

【機器學習個人筆記】scikit-learn的四種特徵縮放方式

在運用一些機器學習算法的時候不可避免地要對數據進行特徵縮放(feature scaling),比如:在隨機梯度下降(stochastic gradient descent)算法中,特徵縮放有時能提高算法的收斂速度。

特徵縮放還可以使機器學習算法工作的更好。比如在K近鄰算法中,分類器主要是計算兩點之間的歐幾里得距離,如果一個特徵比其它的特徵有更大的範圍值,那麼距離將會被這個特徵值所主導。因此每個特徵應該被歸一化,比如將取值範圍處理爲0到1之間。

先來看看原始數據集

原始數據集
接下來我將介紹我在學習過程中遇到的三種特徵縮放的方法:

1.preprocessing.StandardScaler(X)

copy : boolean, optional, 默認爲True
如果爲False,請嘗試避免複製並改爲進行縮放。 這並不能保證始終在原地工作; 例如 如果數據不是NumPy數組或scipy.sparse CSR矩陣,則仍可能返回副本。
with_mean : boolean, 默認爲True
如果爲True,則在縮放之前將數據居中。 當在稀疏矩陣上嘗試時,這不起作用(並且會引發異常),因爲它們的居中需要構建一個密集矩陣,在常見的情況下,該矩陣可能太大而不適合存儲器。
with_std : boolean, 默認爲True
如果爲True,則將數據縮放爲單位方差(或等效地,單位標準差)。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)

標準特徵縮放

2. preprocessing.minmax_scale(X, feature_range(0,1))

能夠設置最大最小值

X : array-like, shape (n_samples, n_features)
feature_range : tuple (min, max)設置縮放後的值範圍,默認爲最小0,最大1。
axis : int (默認爲0) 用於計算平均值和標準偏差。 如果爲0,則獨立標準化每個特徵,否則(如果1)標準化每個樣本。
copy : boolean, optional, 默認爲True。設置爲False以執行就地行規範化並避免複製(如果輸入已經是numpy數組或scipy.sparse CSC矩陣且軸是1)。

from sklearn import preprocessing
X = preprocessing.minmax_scale(X, feature_range=(0,2))

minmax_feature_scale
可以看到縮放後的數據的取值範圍在0-1之間

3. RobustScaler(quantile_range=(25,75))

可以選擇位數範圍進行計算,通常選用1、3 四分位點,經常用於處理有異常值的數據。

from sklearn.preprocessing import RobustScaler
X = [[1, -2, 2],
     [-2, 1, 3],
     [100, 1, -2]]
scaler = RobustScaler(quantile_range = (25,75))
X = scaler.fit_transform(X)

結果爲:
array
([[ 0. , -2. , 0. ],
[-0.05882353, 0. , 0.4 ],
[ 1.94117647, 0. , -1.6 ]])

4. MaxAbsScaler()

通常用於處理稀疏矩陣。

from sklearn.preprocessing import MaxAbsScaler
X = [[1,1,0,0],
     [0,2,0,1],
     [0,0,2,0]]
scaler = MaxAbsScaler()
X = scaler.fit_transform(X)

其結果爲:
array
([[1. , 0.5, 0. , 0. ],
[0. , 1. , 0. , 1. ],
[0. , 0. , 1. , 0. ]])
保留了其稀疏性,而如果用標準的特徵縮放會破壞矩陣的稀疏性,結果如下:
array
([[ 1.41421356, 0. , -0.70710678, -0.70710678],
[-0.70710678, 1.22474487, -0.70710678, 1.41421356],
[-0.70710678, -1.22474487, 1.41421356, -0.70710678]])

本節代碼

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