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