我正在对数据集中存在的不同股票代码的单位价格进行预测。数据集中大约有3000个不同的股票代码,这些代码已经用1到3000的标签编码进行了编码。
我在这里有一个问题。股票代码或国家等字段是分类特征,它们被编码为连续的数值,就像简单的标签编码一样。然而,它们是标称特征,不是序数特征。我们是否应该使用均值编码或频率编码等技术来编码这些特征,这样会有所帮助吗?否则,这些标签编码的标签会被机器解释为某种有序关系,对吗?
对于基于树的模型来说,对于标称的分类特征,仅使用标签编码就足够了吗?
回答:
有些模型可以无障碍地处理分类特征,例如决策树、随机森林等。
如果你使用其他模型,例如神经网络或支持向量机,这将是一个问题。这些模型使用你的输入特征的欧几里得表示进行工作
例如,在下图中,你可以看到具有两个特征(压力和年龄)的输入点的欧几里得表示。
如果你有一个像国家这样的分类特征,你可以有这样的数值编码:
{"England": 0, "France": 1, "Spain": 2, "Italy": 3}
你强行在你的分类值上施加某种“顺序”。例如,在这种编码中,法国位于英国和西班牙之间,这意味着西班牙在某种程度上“比”英国和法国“大”,而英国“比”法国和西班牙“小”。这当然在你的欧几里得空间中没有意义。
解决这个问题的办法之一是进行独热编码,这意味着你为分类特征中的每个标签创建一个二进制特征。
对于我们的例子,你可以进行这样的编码:
Country_England Country_France Country_Spain Country_Italy0 0 0 10 1 0 01 0 0 00 0 1 00 1 0 0
这将使你的模型以更显著的方式处理你的分类特征。
不幸的是,这种方法有很多缺点。它会使你的特征数量激增。如果你的分类特征有100个唯一值,这意味着要增加100个特征。这将导致很多问题,包括模型复杂度的增加和臭名昭著的维度灾难
在我看来,如果你有很多分类特征,最好的方法是使用能够处理这种输入的模型,如随机森林、决策树等。
或者,如果你想在你的模型中使用这些特征,考虑使用独热编码+特征选择,以减少空间复杂度并提升性能
如果你想在Python中使用独热编码,有很多库。但我建议你使用这个,来自scikit-learn。