在一个分类变量中处理(太多)类 的最佳方法
Best way to treat (too) many classes in one categorical variable
我正在研究 ML 预测模型,我有一个带有分类变量的数据集(比如说产品 ID),我有 2k 种不同的产品。
如果我像一个热编码器那样用虚拟变量转换这个变量,数据集的大小可能是示例数量的 2k 倍(数百万个示例),但它太多了,无法处理。
- 这个是怎么处理的?
- 我应该只在没有转换的情况下使用变量吗?
谢谢。
分类特征的高基数是一个众所周知的问题,“最佳”方法通常取决于预测任务,需要反复试验。如果您甚至可以找到明显优于其他策略的策略,则视情况而定。
针对您的第一个问题,category_encoders
库提供了一系列不同的编码策略:
A set of scikit-learn-style transformers for encoding categorical variables into numeric
他们遵循 scikit-learn
API 的变压器,并提供了一个简单的例子。同样,哪一个将提供最佳结果取决于您的数据集和预测任务。我建议将它们合并到管道中并测试(部分或全部)它们。
关于您的第二个问题,您将继续使用编码后的特征进行预测和分析。
我正在研究 ML 预测模型,我有一个带有分类变量的数据集(比如说产品 ID),我有 2k 种不同的产品。
如果我像一个热编码器那样用虚拟变量转换这个变量,数据集的大小可能是示例数量的 2k 倍(数百万个示例),但它太多了,无法处理。
- 这个是怎么处理的?
- 我应该只在没有转换的情况下使用变量吗?
谢谢。
分类特征的高基数是一个众所周知的问题,“最佳”方法通常取决于预测任务,需要反复试验。如果您甚至可以找到明显优于其他策略的策略,则视情况而定。
针对您的第一个问题,category_encoders
库提供了一系列不同的编码策略:
A set of scikit-learn-style transformers for encoding categorical variables into numeric
他们遵循 scikit-learn
API 的变压器,并提供了一个简单的例子。同样,哪一个将提供最佳结果取决于您的数据集和预测任务。我建议将它们合并到管道中并测试(部分或全部)它们。
关于您的第二个问题,您将继续使用编码后的特征进行预测和分析。