我有一个包含大约 2,000 个二进制变量/200,000 行的数据集,我试图预测一个二进制因变量。我在这个阶段的主要目标不是获得预测的准确性,而是确定哪些变量是重要的预测变量。我想将最终模型中的变量数量减少到 100 个左右。
有没有一种相对快速的方法来获取最重要的变量?randomForest 似乎需要很长时间。
我不必使用所有 200,000 个观察值,因此可以选择抽样。
我有一个包含大约 2,000 个二进制变量/200,000 行的数据集,我试图预测一个二进制因变量。我在这个阶段的主要目标不是获得预测的准确性,而是确定哪些变量是重要的预测变量。我想将最终模型中的变量数量减少到 100 个左右。
有没有一种相对快速的方法来获取最重要的变量?randomForest 似乎需要很长时间。
我不必使用所有 200,000 个观察值,因此可以选择抽样。
这听起来像是一个适合 lasso 和做收缩和变量选择的朋友的问题。统计学习要素描述了用于回归的套索和弹性网络,以及与这个问题更相关的逻辑回归。
这本书的作者已经将套索和弹性网络作为一个名为glmnet的 R 包提供了一个有效的实现。我以前使用这个包进行二进制数据分析,数据矩阵大约有 250,000 行,虽然列少了一些,但实际上运行所有列对所有其他列的回归。如果数据矩阵也是稀疏的,那么实现也可以利用这一点,我相信该方法实际上可以适用于 OP 的完整数据集。以下是对 lasso 的一些评论:
对于 Python,在scikit-learn中有一个实现方法,例如套索和弹性网络。
您可以从一个简单的单变量过滤器开始,并使用交叉验证来决定要保留哪些变量。R 包中的sbf函数caret非常有用。从第 19 页开始,您可以在此处阅读更多相关信息。
您可以对每个变量进行逻辑回归/卡方关联检验,并仅保留 p 值小于某个值(例如 0.2)的那些。