Python MinMaxScaler的奇怪输出
在学习ML的过程中,我被sklearn提供的Python MinMaxScaler的奇怪输出,python,scikit-learn,data-science,normalizing,Python,Scikit Learn,Data Science,Normalizing,在学习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.
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. ]]
[[0.1, 0.2]
[0.3, 0.4]
[0.4, 0.5]]
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
给出输出:
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. ]]
[[0.1, 0.2]
[0.3, 0.4]
[0.4, 0.5]]
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
第一个数组[1,2]
被转换成[0,0]
,在我看来这意味着:
- 数字之间的比率消失了
- 无值具有任何重要性(不再),因为它们都被设置为最小值(0)
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. ]]
[[0.1, 0.2]
[0.3, 0.4]
[0.4, 0.5]]
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
这将保存比率并将数字置于0到1的范围内
我对
MinMaxScaler
有什么错误或误解?因为考虑到时间序列上的训练,将价格或温度等重要数字转换为上面所述的零碎数据是没有意义的?MinMaxScaler根据给定的范围,使用下面的公式根据时间序列查找并转换特征。所以你的问题是关于使用的公式
公式:
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. ]]
[[0.1, 0.2]
[0.3, 0.4]
[0.4, 0.5]]
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。由于这些值将基于序列中的所有值找到,因此它对异常值更为稳健