什么方法可以创建基于所有分类特征的多分类模型(1 个具有 5,000 个级别)?

数据挖掘 预测建模 xgboost 分类数据 编码
2022-03-08 19:32:30

我有一个正在尝试为其创建预测模型的数据集。5 个特征和结果都是分类数据。其中一项功能包含 5,000 个独特的关卡。而其他4个都在100级以下。我的数据集中的输出变量包含 400 个唯一级别。

我如何处理这种建模场景?

我的方法是:

  1. 通过查找表将 5,000 级特征转换为序号列表。
  2. 使用 One Hot Encoding 转换剩余的 4 个功能。
  3. 通过查找表将输出变量转换为序号列表。
  4. 使用 xgboost 算法。

我不认为我可以将 5,000 级功能装箱,因为它们是用户 ID。所以对我来说,没有办法把它们装箱。

2个回答

就个人而言,我认为在此类用户 ID 上构建预测器既不高效也不实用。你能以不同的方式改变你的问题吗?

当我们进行任何分析时,我们会删除这些 id,因为它们没有用,它们只是大量人群中的事件,我们尝试将它们分组到描述其特征的类别中。例如,视力好的用户即使下雨也会打篮球。

所以试着这样想。

我不认为我可以将 5,000 级功能装箱,因为它们是用户 ID。

除非每个用户有很多训练示例,否则将user_id其用作特征很可能会导致过度拟合。正如您所建议的,这应该很容易使用可以处理高基数的分类特征的树模型来验证。

我过去看到的一种方法是只标记M最频繁使用的用户并标记其他所有人other,因此您只有M+1该类别的可能标签。

另一种是N基于一些有用的相似性度量将用户分组。您可能必须应用一些领域知识才能得出一个好的相似度指标。

如果您希望顶级M用户出现在未来示例中的很大一部分中,那么这可能很有用,否则最好根据其他特征对用户进行聚类。在后一种情况下,您在预测时计算用户的集群成员资格,并将该集群标签用作输入特征。

您应该将所有模型与根本不使用user_id的模型进行比较,以衡量其有用性。

通过查找表将 5,000 级特征转换为序号列表。

如果我理解正确,您想将此功能转换为单个数字,例如整数 from 1to5000以减少内存使用量。这不会影响您从树模型中获得的结果,但大多数其他模型现在会将标签解释为具有自然顺序以及相对于代表它们的数字大小的重要性。

将高基数分类特征编码为单个数字(或低维向量)有一些可能的技巧。

  1. 将每个编码user_id为它在训练集中出现的次数
  2. 将每个编码user_id为训练集中目标值的平均值。请参阅此处的“基于目标的编码” 如果目标是分类的,您可以为每个目标类别使用频率向量,例如`[0.4, 0.1, 0.3, 0.2]。

如前所述,只有当每个用户倾向于在训练集中多次出现时,这些和其他方法才会有用。

另请参阅分类编码库以获取更多想法。