编码高基数的标称类别

我正在对数据集中存在的不同股票代码的单位价格进行预测。数据集中大约有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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注