我不认为我可以将 5,000 级功能装箱,因为它们是用户 ID。
除非每个用户有很多训练示例,否则将user_id其用作特征很可能会导致过度拟合。正如您所建议的,这应该很容易使用可以处理高基数的分类特征的树模型来验证。
我过去看到的一种方法是只标记M最频繁使用的用户并标记其他所有人other,因此您只有M+1该类别的可能标签。
另一种是N基于一些有用的相似性度量将用户分组。您可能必须应用一些领域知识才能得出一个好的相似度指标。
如果您希望顶级M用户出现在未来示例中的很大一部分中,那么这可能很有用,否则最好根据其他特征对用户进行聚类。在后一种情况下,您在预测时计算用户的集群成员资格,并将该集群标签用作输入特征。
您应该将所有模型与根本不使用user_id的模型进行比较,以衡量其有用性。
通过查找表将 5,000 级特征转换为序号列表。
如果我理解正确,您想将此功能转换为单个数字,例如整数 from 1to5000以减少内存使用量。这不会影响您从树模型中获得的结果,但大多数其他模型现在会将标签解释为具有自然顺序以及相对于代表它们的数字大小的重要性。
将高基数分类特征编码为单个数字(或低维向量)有一些可能的技巧。
- 将每个编码
user_id为它在训练集中出现的次数
- 将每个编码
user_id为训练集中目标值的平均值。请参阅此处的“基于目标的编码” 。如果目标是分类的,您可以为每个目标类别使用频率向量,例如`[0.4, 0.1, 0.3, 0.2]。
如前所述,只有当每个用户倾向于在训练集中多次出现时,这些和其他方法才会有用。
另请参阅分类编码库以获取更多想法。