sklearn MinMaxScaler: Inverse не соответствует оригиналу - PullRequest
0 голосов
/ 23 мая 2018

Рассмотрим следующий пример на python3, где мы используем MinMaxScaler из scikit-learn для нормализации диапазона чисел, а затем отменим их нормализацию до их исходных значений.

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 голосов
/ 23 мая 2018

Вы сравниваете два числа с равными.Это может привести к неожиданным результатам из-за разницы округления, я бы предположил.Не могли бы вы предоставить битовые комбинации значений с плавающей запятой?Вы также можете проверить направляющую с плавающей запятой .

Как и предполагал @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]])

иВы видите, что соответствующие значения не могут быть одинаковыми

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...