1

我有 NYC 311 投诉数据集。我想构建一个随机森林分类器,它将获取有关投诉的分类输入特征并确定投诉类型。 以下是给定投诉记录的输入特征

X = df[['Location Type', 'Incident Zip', 'Street Name', 
'City', 'Borough', 'Open Data Channel Type']]

所有这些特征都是名义变量(分类),我需要将字符串变量转换为浮点变量,然后再将它们提供给模型。我不愿意使用一种热标签编码,因为某些功能有 1000 多个类别,而且我的笔记本电脑可能无法进行进一步的计算。

我正在考虑使用每个变量的权重(特定类别的计数/总计数)而不是名义字符串变量?这会是一个好策略吗?

4

2 回答 2

1

随机森林是决策树的集合,您可以在其中尝试根据变量的拆分将数据划分为子集。如果它根据频率对每个分类变量进行编码,这不是很合理。这假设具有相似频率的类别在预测响应方面表现相同,并且您的数据中没有任何内容表明这一点。

如果您有 1000 多个类别,则在进行 onehot 编码之前将一些稀有类别或单例分组为 1 个大类别(如“其他”)可能更有意义。

于 2020-12-16T02:05:56.767 回答
0

用它的相对频率替换一个类别不是一个好主意,因为类别频率作为一个连续变量不会反映它们的语义。

One-hot 编码是可行的方法,它只需要一个额外的降维步骤。以下是一些选项:

  1. 对于每个分类变量,计算类别频率,但使用它们丢弃任何低频值,即在热编码之后保留对应于前 N 个值的列。您可能会认为每个仅出现几次的值都会有助于预测,但事实并非如此。从统计上讲,仅出现几次的类别不足以从中概括并用作预测变量。
  2. 您可以尝试将 PCA 应用于每个 one-hot 编码变量。然而理论上 PCA 需要正态分布的变量,因此将其用于二进制变量是值得商榷的。
  3. 尝试使用 char2vec 之类的编码(例如使用https://pypi.org/project/gensim/),而不是一次性编码。优点是它将为您的类别的替代或拼写错误创建相似的向量,例如“颜色”和“颜色”的向量将非常接近,这正是您想要的。
  4. 对其他降维技术做一些额外的研究。
于 2020-12-16T03:39:43.283 回答