使用 SVM 或神经网络时如何将分类变量重新编码为数值变量

机器算法验证 机器学习 神经网络 分类数据 支持向量机 分类编码
2022-02-16 03:06:41

要使用 SVM 或神经网络,它需要将分类变量转换(编码)为数值变量,在这种情况下,通常的方法是使用 0-1 二进制值,第 k 个分类值转换为 (0,0,.. .,1,0,...0)(1 在第 k 个位置)。是否有其他方法可以做到这一点,特别是当有大量分类值(例如 10000)时,0-1 表示将在神经网络中引入大量额外维度(输入单元),这似乎不太理想或预期?

我问的是一般策略。

4个回答

在 NLP 中,单词通常被编码为 1-of-k,最近出现了单词嵌入的使用。带有参考资料的维基百科页面是一个好的开始。

一般的想法是为每个单词学习向量表示 ,其中语义相似的单词在该空间中很接近。因此,输入的大小为而不是词汇表的大小。xiRnin

也许你可以把这个想法转移到你的环境中。

“标准”方法是:单热编码(您在问题中提到)。如果可能的类别太多,但您需要 0-1 编码,则可以使用散列技巧

另一种常用的方法是对类别的答案进行平均:参见kaggle评论中的图片。

您可以在包dummyVars中的 R中使用caret它将根据级别数自动创建不同的列。之后,您可以使用cbind并将其附加到您的原始数据中。其他选项包括model.matrixsparse.model.matrix

您可以尝试更紧凑的二进制编码,有时甚至优于 one-hot。例如,您可以在 Keras 中实现分类嵌入。