我使用 OneHotEncoder 对 y 向量进行编码,运行我的神经网络并获得输出。
这里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
这些值不应该相等吗?
最佳答案
您的问题来自于 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]
关于python - OneHotEncoder 之前和之后的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52952067/