考虑下面的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]
?
答案 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]])
并且您看到相应的值不能相同