0

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

有 83 个唯一的州名。

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

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

4

2 回答 2

2

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

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

  • 目标编码:通过该类别中目标/结果的平均值(如果目标是连续的)对每个类别进行编码;或者如果它是离散的,则通过目标的概率。一个例子是当你想对邻域进行编码时,这对于预测房价显然很重要;当然,您可以将每个社区名称替换为该社区的平均房价。这极大地改进了预测(如我的 Kaggle预测房价笔记本所示)。

还有其他有用的编码方案,如 Catboost、证据权重等。一个非常好的事情是所有这些方案都已在categorical encoder 此处的库中实现。

于 2020-06-30T06:34:57.667 回答
2

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

于 2020-01-13T12:39:02.990 回答