对具有高基数的名义类别进行编码
Encoding nominal categories with high cardinality
我正在预测数据集中存在的不同股票代码的单价。大约有 3000 种不同的股票代码已经用 1 - 3000 进行标签编码。
我有一个问题。字段 Stockcode 或 country 是分类特征,它们被编码为序列数值,就像简单的标签编码一样。但是,它们是名义特征,而不是有序特征。我们是否应该通过平均编码或频率编码等技术对这些特征进行编码,这有什么帮助吗?否则,这个标签编码标签将被机器解释为某种有序关系,不是吗?
对于基于树的模型,分类特征(标称)标签编码就足够了吗?
有些模型可以毫无问题地处理分类特征,例如决策树、随机森林等。
如果您使用其他模型,例如神经网络或 SVM,这将是一个问题。这些模型使用输入特征的欧氏表示
例如,在下图中,您有输入点的欧几里得表示法,它具有压力和年龄这两个特征。
如果你有像国家这样的分类特征,你可以有这样的数字编码:
{"England": 0, "France": 1, "Spain": 2, "Italy": 3}
您正在对您的分类值强制执行某种顺序。例如,在此编码中,法国位于英国和西班牙之间,这意味着西班牙在某种程度上比英国和法国“大”,而英国比法国和西班牙“小”。这在您的欧几里德 space.
中当然没有意义
这个问题的一个解决方案是进行单热编码,这意味着您正在为分类特征中的每个标签创建一个二元特征。
对于我们的示例,您可以进行以下编码:
Country_England Country_France Country_Spain Country_Italy
0 0 0 1
0 1 0 0
1 0 0 0
0 0 1 0
0 1 0 0
这会以某种方式使您的模型以更重要的方式处理您的分类特征。
不幸的是,这种方法有很多缺点。它使您的功能爆炸。
如果您的分类特征有 100 个唯一值,这意味着还有 100 个特征。
这会导致很多问题,增加模型的复杂性和不知名的 curse of dimensionality
在我看来,如果你有很多分类特征,最好的方法是使用能够处理此类输入的模型,如随机森林、决策树等。
或者如果你想在你的模型中使用这些特征,考虑使用一个热编码+特征选择,以降低space复杂度并提高性能
我正在预测数据集中存在的不同股票代码的单价。大约有 3000 种不同的股票代码已经用 1 - 3000 进行标签编码。
我有一个问题。字段 Stockcode 或 country 是分类特征,它们被编码为序列数值,就像简单的标签编码一样。但是,它们是名义特征,而不是有序特征。我们是否应该通过平均编码或频率编码等技术对这些特征进行编码,这有什么帮助吗?否则,这个标签编码标签将被机器解释为某种有序关系,不是吗?
对于基于树的模型,分类特征(标称)标签编码就足够了吗?
有些模型可以毫无问题地处理分类特征,例如决策树、随机森林等。
如果您使用其他模型,例如神经网络或 SVM,这将是一个问题。这些模型使用输入特征的欧氏表示
例如,在下图中,您有输入点的欧几里得表示法,它具有压力和年龄这两个特征。
如果你有像国家这样的分类特征,你可以有这样的数字编码:
{"England": 0, "France": 1, "Spain": 2, "Italy": 3}
您正在对您的分类值强制执行某种顺序。例如,在此编码中,法国位于英国和西班牙之间,这意味着西班牙在某种程度上比英国和法国“大”,而英国比法国和西班牙“小”。这在您的欧几里德 space.
中当然没有意义这个问题的一个解决方案是进行单热编码,这意味着您正在为分类特征中的每个标签创建一个二元特征。
对于我们的示例,您可以进行以下编码:
Country_England Country_France Country_Spain Country_Italy
0 0 0 1
0 1 0 0
1 0 0 0
0 0 1 0
0 1 0 0
这会以某种方式使您的模型以更重要的方式处理您的分类特征。
不幸的是,这种方法有很多缺点。它使您的功能爆炸。 如果您的分类特征有 100 个唯一值,这意味着还有 100 个特征。 这会导致很多问题,增加模型的复杂性和不知名的 curse of dimensionality
在我看来,如果你有很多分类特征,最好的方法是使用能够处理此类输入的模型,如随机森林、决策树等。
或者如果你想在你的模型中使用这些特征,考虑使用一个热编码+特征选择,以降低space复杂度并提高性能