【问题标题】:Different results before and after OneHotEncoderOneHotEncoder 前后结果不同
【发布时间】:2018-10-24 00:03:48
【问题描述】:

我使用 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

这些值不应该相等吗?

【问题讨论】:

  • 在处理分类变量时使用一种热编码。你为什么首先对整数进行编码?
  • 出于架构目的,我需要将例如 1 转换为 [0,1,0,0],将 3 转换为 [0,0,0,1] 等等。

标签: python numpy


【解决方案1】:

您的问题来自a!=b 返回一个数组数组,检查每个索引处的元素是否不同。第一个返回一个数组数组,其中第一个值为[False False True True],这意味着对于ab 中的第一项,前两项相同,后两项不同。请尝试以下操作:

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]

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多