具有数百万条记录、数千个类别的分类 - 保持内存使用效率?

数据挖掘 机器学习 统计数据 算法 随机森林
2022-03-09 05:30:31

我有大约 20 个分类变量来预测另一个分类变量。其中一个变量可以有多达 12000 个级别(O/P 将是 12000 个级别之一),另一个变量可以有大约 8000 个级别。休息将有少于 100 个级别。我首先想到的是随机森林,但是 Python 的随机森林实现不支持分类变量。如果我对所有这些变量进行一次热编码,那么我最终会得到数百万条记录的数千个变量,这将使我陷入内存问题。

我有哪些选择?

1个回答

我假设您正在使用随机森林的 sklearn 实现。如果您不一定要使用 sklearn,您可以尝试另一种实现,例如来自 h2o的支持枚举分类变量的实现。

或者,您可以首先确定所有 12000 个级别是否相关:对于 12000 个级别中的每一个,您可以计算诸如信息增益之类的东西,这将告诉您该级别是否提供了与预测类别相关的任何信息。然后,您可以使用信息增益的阈值来丢弃所有不提供信息的级别,从而减少级别的数量,并可能允许您使用 one-hot 编码。

基本上,如果是一组示例的熵(类标签的),给定数据集,您可以丢弃属性 ,其以下值低于某个阈值(取决于有多少你想保持的水平):HDva

H(D)|Dv||D|H(Dv)

其中Dv={xD|value(x,a)=v}