Различные результаты до и после OneHotEncoder - PullRequest
0 голосов
/ 23 октября 2018

Я закодировал вектор y с помощью OneHotEncoder, запустил свою нейронную сеть и получил вывод.Здесь a представляет мой вектор y, а b обозначает результат прогнозирования

a = np.array([[0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [1., 0., 0., 0.],
       [1., 0., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.]])
b=np.array([[0., 0., 0., 1.],
       [1., 0., 0., 0.],
       [0., 0., 1., 0.],
       [0., 1., 0., 0.],
       [1., 0., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 1., 0.],
       [1., 0., 0., 0.],
       [0., 0., 0., 1.],
       [0., 1., 0., 0.]])
print(np.mean(a!=b))
print(np.mean(np.argmax(a,1)!=np.argmax(b,1)))

, но после восстановления кодировки (используя np.argmax(a,1)) и я получаю вывод:

0.35
0.7

Разве эти значения не должны быть равны?

1 Ответ

0 голосов
/ 23 октября 2018

Ваша проблема связана с тем, что a!=b возвращает массив массивов, проверяя, отличаются ли элементы в каждом индексе.Первый возвращает массив массивов, где первое значение равно [False False True True], что означает, что для первых элементов в a и b первые две записи одинаковы, а последние две отличаются.Попробуйте следующее:

print(a!=b)
>>>[[False False  True  True], [ True False  True False] ...

Второй возвращает один массив, сравнивая индексы, как вы хотели:

print(np.argmax(a,1)!=np.argmax(b,1))
>>>[ True  True False  True  True False  True False  True  True]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...