sklearn MinMaxScaler:Inverse不等于原始版本

时间:2018-05-23 09:10:32

标签: python scikit-learn

考虑下面的python3示例,其中我们使用scikit-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]

1 个答案:

答案 0 :(得分:0)

您正在比较两个等于的浮点数。由于我将假设的舍入差异,这可能会产生意外的结果。你能提供浮点值的位模式吗?您也可以查看floating point guide

正如@CoMartel建议的那样,你可以观察到值和倒置之间的差异(到目前为止,我还没有在numpy中找到浮点数的代表), 你获得了

values - inversed
array([[ 0.00000000e+00],
       [ 0.00000000e+00],
       [-3.55271368e-15],
       [ 0.00000000e+00],
       [ 0.00000000e+00],
       [-7.10542736e-15],
       [ 0.00000000e+00],
       [ 0.00000000e+00],
       [ 0.00000000e+00],
       [ 0.00000000e+00]])

并且您看到相应的值不能相同