编码分类变量,如 "State Names"

Encoding Categorical Variables like "State Names"

我有一个带有 'State Names' 的分类列。我不确定我必须执行哪种类型的分类编码才能将它们转换为数字类型。

有 83 个不同的州名称。

标签编码器用于有序分类变量,但 OneHot 会增加列数,因为有 83 个唯一的州名称。

还有什么我可以尝试的吗?

我会使用 scikit 的 OneHotEncoder (https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html) 或编码设置为 'onehot' 的 CategoricalEncoder。它会自动找到每个特征的唯一值并将其处理成一个单一的热向量。它确实增加了该特征的输入维度,但如果您正在进行任何类型的数据科学工作,则这是必要的。如果将特征转换为序数整数(即只有一个整数)而不是二进制值的向量,则算法可能会在两个(可能完全独立的)分类值之间得出不正确的结论,而这两个分类值恰好在分类 space。

除了一个hot之外,还有其他强大的编码方案,它们不会增加列数。您可以尝试以下操作(按照复杂程度递增的顺序):

  • count encoding:根据每个类别在数据中出现的次数对每个类别进行编码,在某些情况下很有用。例如,如果您想对纽约是一个大城市的信息进行编码,数据中 NY 的计数确实包含该信息,因为我们预计 NY 会经常出现。

  • target encoding:根据每个类别在该类别内target/outcome(如果target是连续的)的平均值进行编码;或者如果它是离散的,则通过目标的概率。一个例子是当你想编码 neighborhood 时,这显然对预测房价很重要;当然,您可以用该社区的平均房价替换每个社区名称。这极大地改善了预测(如 my Kaggle notebook 预测房价所示)。

还有其他有用的编码方案,如 Catboost、证据权重等。非常好的事情是所有这些方案都已经在库 categorical encoder here.

中实现