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


19

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

我在问一般策略。


您是在问一般策略还是某些特定问题?
丹尼斯·塔拉索夫

Answers:


11

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

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

也许您可以将这个想法转移到您的设置中。


10

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

另一种常用的方法是按类别平均答案:请参见kaggle的注释图片。


1

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


0

您可以尝试更紧凑的二进制编码,有时甚至胜过一键编码。例如,您可以在Keras中实现分类嵌入。


0

ķ-1个

程国,Felix Berkhahn的“分类变量的实体嵌入”

我们将函数逼近问题中的分类变量映射到欧几里得空间中,这是分类变量的实体嵌入。在标准的监督训练过程中,神经网络学习了映射。与一次性编码相比,实体嵌入不仅减少了内存使用并加快了神经网络的速度,而且更重要的是,通过在嵌入空间中映射彼此接近的相似值,它揭示了分类变量的内在属性。我们在最近的Kaggle竞赛中成功应用了该软件,并以相对简单的功能将其排名第三。我们在本文中进一步证明,当数据稀疏且统计信息未知时,实体嵌入可以帮助神经网络更好地泛化。因此,它对于具有许多高基数特征的数据集特别有用,而其他方法往往会过度拟合。我们还证明,从训练有素的神经网络获得的嵌入在用作输入功能时,可大大提高所有经过测试的机器学习方法的性能。当实体嵌入为分类变量定义距离度量时,它可用于可视化分类数据和数据聚类。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.