要使用 SVM 或神经网络,它需要将分类变量转换(编码)为数值变量,在这种情况下,通常的方法是使用 0-1 二进制值,第 k 个分类值转换为 (0,0,.. .,1,0,...0)(1 在第 k 个位置)。是否有其他方法可以做到这一点,特别是当有大量分类值(例如 10000)时,0-1 表示将在神经网络中引入大量额外维度(输入单元),这似乎不太理想或预期?
我问的是一般策略。
要使用 SVM 或神经网络,它需要将分类变量转换(编码)为数值变量,在这种情况下,通常的方法是使用 0-1 二进制值,第 k 个分类值转换为 (0,0,.. .,1,0,...0)(1 在第 k 个位置)。是否有其他方法可以做到这一点,特别是当有大量分类值(例如 10000)时,0-1 表示将在神经网络中引入大量额外维度(输入单元),这似乎不太理想或预期?
我问的是一般策略。
在 NLP 中,单词通常被编码为 1-of-k,最近出现了单词嵌入的使用。带有参考资料的维基百科页面是一个好的开始。
一般的想法是为每个单词学习向量表示 ,其中语义相似的单词在该空间中很接近。因此,输入的大小为而不是词汇表的大小。
也许你可以把这个想法转移到你的环境中。
您可以在包dummyVars
中的 R中使用caret
。它将根据级别数自动创建不同的列。之后,您可以使用cbind
并将其附加到您的原始数据中。其他选项包括model.matrix
和sparse.model.matrix
。
您可以尝试更紧凑的二进制编码,有时甚至优于 one-hot。例如,您可以在 Keras 中实现分类嵌入。