MinMaxScaler 的奇怪输出
Weird output of MinMaxScaler
在学习 ML 知识的过程中,我对 sklearn 提供的 MinMaxScaler
感到困惑。目标是将数值数据标准化为 [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]
,在我看来这意味着:
- 数字之间的比例消失了
- None 值(不再)有任何重要性,因为它们都设置为最小值 (0)。
我所期望的示例:
[[0.1, 0.2]
[0.3, 0.4]
[0.4, 0.5]]
这会保存比率并将数字放入0到1的范围内。
我在这里对 MinMaxScaler
做错了什么或误解了什么?因为考虑像时间序列训练这样的事情,将价格或温度等重要数字转换成上面这样的破东西是没有意义的?
MinMaxScaler 根据 documentation 使用以下公式根据给定范围查找和翻译特征。所以你的问题是关于使用的公式。
公式:
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
这 returns 符合预期:
array([[0. , 0. ],
[0.66666667, 0.66666667],
[1. , 1. ]])
至于您对使用 MinMaxScaler 的疑虑,如果您的离群值与大多数值有很大不同,但仍然是有效数据,则可以使用 StandardScaler。
StandardScaler 的使用方式与 MinMaxScaler 相同,但它会缩放您的值,使它们的均值等于 0,标准差等于 1。由于将根据系列中的所有值找到这些值,因此它对异常值更加稳健。
在学习 ML 知识的过程中,我对 sklearn 提供的 MinMaxScaler
感到困惑。目标是将数值数据标准化为 [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]
,在我看来这意味着:
- 数字之间的比例消失了
- None 值(不再)有任何重要性,因为它们都设置为最小值 (0)。
我所期望的示例:
[[0.1, 0.2]
[0.3, 0.4]
[0.4, 0.5]]
这会保存比率并将数字放入0到1的范围内。
我在这里对 MinMaxScaler
做错了什么或误解了什么?因为考虑像时间序列训练这样的事情,将价格或温度等重要数字转换成上面这样的破东西是没有意义的?
MinMaxScaler 根据 documentation 使用以下公式根据给定范围查找和翻译特征。所以你的问题是关于使用的公式。
公式:
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
这 returns 符合预期:
array([[0. , 0. ],
[0.66666667, 0.66666667],
[1. , 1. ]])
至于您对使用 MinMaxScaler 的疑虑,如果您的离群值与大多数值有很大不同,但仍然是有效数据,则可以使用 StandardScaler。
StandardScaler 的使用方式与 MinMaxScaler 相同,但它会缩放您的值,使它们的均值等于 0,标准差等于 1。由于将根据系列中的所有值找到这些值,因此它对异常值更加稳健。