二进制数而不是一个热矢量

时间:2016-10-23 20:19:59

标签: machine-learning nlp computer-vision neural-network

在进行逻辑回归时,通常的做法是使用一个热矢量作为期望的结果。所以,no of classes = no of nodes in output layer。我们不使用词汇表中的单词索引(或一般的类号),因为这可能错误地表示两个类的接近程度。但为什么我们不能使用二进制数而不是单热数?

即如果有4个类,我们可以将每个类表示为00,01,10,11,从而在输出层中生成log(no of classes)个节点。

2 个答案:

答案 0 :(得分:11)

如果用二进制编码就可以了。但您可能需要添加另一个图层(或过滤器),具体取决于您的任务和模型。因为您的编码现在涉及由于二进制表示而导致的无效共享功能。

例如,输入('apple' = [0, 0] 'orange' = [0, 1] 'table' = [1, 0] 'chair' = [1, 1] )的二进制编码:

orange

这意味着chairx2共享相同的功能y。现在预测两个类'fruit' = 0 'furniture' = 1

W = [w1, w2]

标记数据样本的线性优化模型(b和偏见(argmin W) Loss = y - (w1 * x1 + w2 * x2 + b) ):

w2

每当您将chair的{​​{1}}权重更新为furniture时,您在为此课程选择orange方面取得了积极进展。在这种特殊情况下,如果添加另一个层U = [u1, u2],您可以解决它:

(argmin U,W) Loss = y - (u1 * (w1 * x1 + w2 * x2 + b) +
                         u2 * (w1 * x1 + w2 * x2 + b) +
                         b2)

好的,为什么不通过使用单热编码来避免这种错过表示。 :)

答案 1 :(得分:0)

https://github.com/scikit-learn-contrib/categorical-encoding

category_encoders支持二进制编码(实际上是base-anything编码)。在我们的例子中,我们最终得到二进制字符串中每个地方的特征,因此它不是一个值为'011'或'010'的特征,它的3分别为[0,1,1]和[0,1,0]。