1

在学习 ML 的过程中,我对MinMaxScalersklearn 提供的内容感到困惑。目标是将数值数据标准化为[0, 1].

示例代码:

from sklearn.preprocessing import MinMaxScaler

data = [[1, 2], [3, 4], [4, 5]]
scaler = MinMaxScaler(feature_range=(0, 1))
scaledData = scaler.fit_transform(data)

给出输出:

[[0.         0.        ]
 [0.66666667 0.66666667]
 [1.         1.        ]]

第一个数组[1, 2]变成[0, 0]了我眼中的意思:

  • 数字之间的比例消失了
  • 没有值(不再)具有任何重要性,因为它们都设置为最小值(0)。

我所期望的示例:

[[0.1, 0.2]
 [0.3, 0.4]
 [0.4, 0.5]]

这将保存比率并将数字放入0 到 1的范围内。

我在MinMaxScaler这里做错了什么或误解了什么?因为考虑诸如时间序列训练之类的事情,将价格或温度等重要数字转换为上述破碎的东西是没有意义的?

4

1 回答 1

1

MinMaxScaler 根据文档使用以下公式根据给定范围查找和转换特征。所以你的问题是关于使用的公式。

公式:

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min

让我们尝试看看当您在数据上使用它时会发生什么。为此,您需要使用 numpy。

from sklearn.preprocessing import MinMaxScaler
import numpy as np

scaler = MinMaxScaler()

data = [[1, 2], [3, 4], [4, 5]]

# min to max range is given from the feature range you specify
min = 0
max = 1

X_std = (data - np.min(data, axis=0)) / (np.max(data, axis=0) - np.min(data, axis=0))

X_scaled = X_std * (max - min) + min

这将按预期返回:

array([[0.        , 0.        ],
       [0.66666667, 0.66666667],
       [1.        , 1.        ]])

至于您对使用 MinMaxScaler 的疑问,如果您的异常值与大多数值有很大不同,但仍然是有效数据,您可以使用 StandardScaler。

StandardScaler 的使用方式与 MinMaxScaler 相同,但它会缩放您的值,使它们的平均值等于 0,标准差等于 1。由于这些值将根据系列中的所有值找到,因此它对异常值。

于 2020-10-25T15:36:28.127 回答