MinMaxScaler
class sklearn.preprocessing.MinMaxScaler
(feature_range=(0, 1), copy=True)
一、功能
将每個元素(特征,feature)轉換成給定範圍的值。
該估計器(estimator)分别縮放和轉換每個特征,以使其處于訓練集的給定範圍内,例如
在區間[0,1]。
轉換原理如下:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
其中min,max=feature_range。
實際轉換是按照如下過程進行的:
X_scaled = scale * X + min - X.min(axis=0) * scale
where scale = (max - min) / (X.max(axis=0) - X.min(axis=0))
以上内容來自scikit-learn官方文檔
二、如何利用MinMaxScaler對資料進行放縮
1. 将資料放縮至給定區間
fit
(self, X[, y]):計算給定資料集X的最大/小值用于之後的放縮(這一步沒有進行放縮)
transform
(self, X):将資料集X放縮至給定區間
example:
>>> from sklearn.preprocessing import MinMaxScaler
>>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
>>> scaler = MinMaxScaler()
>>> print(scaler.fit(data))
MinMaxScaler()
>>> print(scaler.data_max_)
[ 1. 18.]
>>> print(scaler.transform(data))
[[0. 0. ]
[0.25 0.25]
[0.5 0.5 ]
[1. 1. ]]
>>> print(scaler.transform([[2, 2]]))
[[1.5 0. ]]
fit_transform
(self, X[, y]):計算并将資料放縮至給定區間,相當于
fit()
+
transform()
2. 恢複給定區間的資料
inverse_transform
(self, X):根據給定範圍(feature_range)恢複資料
三、為什麼要改變計算方式
MinMaxScaler()
有兩個屬性:min_和scale_
-
min_ ndarray of shape (n_features,)
Per feature adjustment for minimum. Equivalent to
min - X.min(axis=0) * self.scale_
-
scale_ ndarray of shape (n_features,)
Per feature relative scaling of the data. Equivalent to
(max - min) / (X.max(axis=0) - X.min(axis=0))
可以看到,通過它們計算X_scaled也就簡化為了下面這個式子:
X_scaled = self.scale_ * X + self.min_
可逆的,将資料恢複至原來的數量級也變得非常容易了。
四、結語
可見,對于一個範圍(feature_range)内的資料,是可以用一個MinMaxScaler進行放縮的。即使他們不是同一個數組。是以對于ML、DL預測任務而言,
- 可以對原始資料利用MinMaxScaler放縮,加快訓練過程;
- 測試時,預測結果可以使用同一個MinMaxScaler對象恢複到實際資料範圍。因為标準化後的資料往往很難看出有什麼實際的意義。
上次修改:2021-01-18