天天看點

資料歸一化 MinMaxScalerMinMaxScaler

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預測任務而言,

  1. 可以對原始資料利用MinMaxScaler放縮,加快訓練過程;
  2. 測試時,預測結果可以使用同一個MinMaxScaler對象恢複到實際資料範圍。因為标準化後的資料往往很難看出有什麼實際的意義。

上次修改:2021-01-18