在进行逻辑回归时,通常的做法是使用一个热矢量作为期望的结果。所以,no of classes = no of nodes in output layer
。我们不使用词汇表中的单词索引(或一般的类号),因为这可能错误地表示两个类的接近程度。但为什么我们不能使用二进制数而不是单热数?
即如果有4个类,我们可以将每个类表示为00,01,10,11,从而在输出层中生成log(no of classes)
个节点。
答案 0 :(得分:11)
如果用二进制编码就可以了。但您可能需要添加另一个图层(或过滤器),具体取决于您的任务和模型。因为您的编码现在涉及由于二进制表示而导致的无效共享功能。
例如,输入('apple' = [0, 0]
'orange' = [0, 1]
'table' = [1, 0]
'chair' = [1, 1]
)的二进制编码:
orange
这意味着chair
和x2
共享相同的功能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]。