MinMaxScaler
class
sklearn.preprocessing.MinMaxScaler (feature_range=(0, 1), copy=True)
一、功能
将每个元素(特征,feature)转换成给定范围的值。
该估计器(estimator)分别缩放和转换每个特征,以使其处于训练集的给定范围内,例如
在区间[0,1]。
转换原理如下:
1 2 | 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。
实际转换是按照如下过程进行的:
1 2 | 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. 将数据放缩至给定区间
?
?
example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> 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. ]] |
?
2. 恢复给定区间的数据
?
三、为什么要改变计算方式
-
**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也就简化为了下面这个式子:
1 | X_scaled = self.scale_ * X + self.min_ |
可逆的,将数据恢复至原来的数量级也变得非常容易了。
四、结语
可见,对于一个范围(feature_range)内的数据,是可以用一个MinMaxScaler进行放缩的。即使他们不是同一个数组。所以对于ML、DL预测任务而言,
- 可以对原始数据利用MinMaxScaler放缩,加快训练过程;
- 测试时,预测结果可以使用同一个MinMaxScaler对象恢复到实际数据范围。因为标准化后的数据往往很难看出有什么实际的意义。