【发布时间】:2018-05-23 17:43:53
【问题描述】:
考虑以下 python3 示例,我们使用 scikit-learn 中的 MinMaxScaler 对一系列数字进行归一化,然后将它们反归一化为原始值。
from pandas import Series
from sklearn.preprocessing import MinMaxScaler
data = [10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0]
series = Series(data)
values = series.values
values = values.reshape((len(values), 1))
scaler = MinMaxScaler(feature_range=(0,1))
scaler = scaler.fit(values)
normalized = scaler.transform(values)
inversed = scaler.inverse_transform(normalized)
人们会认为inversed 等于values。唉:
>>> inversed == values
array([[ True],
[ True],
[False],
[ True],
[ True],
[False],
[ True],
[ True],
[ True],
[ True]])
>>> print(values)
[[ 10.]
[ 20.]
[ 30.]
[ 40.]
[ 50.]
[ 60.]
[ 70.]
[ 80.]
[ 90.]
[100.]]
>>> print(inversed)
[[ 10.]
[ 20.]
[ 30.]
[ 40.]
[ 50.]
[ 60.]
[ 70.]
[ 80.]
[ 90.]
[100.]]
这里发生了什么?为什么inversed[2]和inversed[5]不等于values[2]和values[5]?
【问题讨论】:
-
您将两个浮点数与等号进行比较。由于我假设的舍入差异,这可能会产生意想不到的结果。你能提供浮点值的位模式吗?您可能还想查看floating point guide。如果这已经回答了您的问题,我会将我的评论变成答案
-
我认为@Quickbeam2k1 是对的:您应该尝试计算值和倒数之间的差异
-
如果输入数据是
int,可以观察到类似的行为
标签: python scikit-learn