如何从非常大的数据集中快速选择重要变量?


9

我有一个约有2,000个二进制变量/ 200,000行的数据集,我正在尝试预测一个二进制因变量。在此阶段,我的主要目标不是提高预测的准确性,而是确定其中哪些变量是重要的预测因子。我想将最终模型中的变量数减少到100个左右。

是否有相对快速的方法来获取最重要的变量?randomForest似乎要花费很长时间。

我不必全部使用200,000个观察值,因此采样是表上的一个选项。


通过“重要”而不是“准确”的预测变量,您是说要找到最能解释结果并帮助您建立理论的候选变量吗?如果是这样,则100个解释变量是一个非常大的数字-很大。理论建设和真正的解释(而不是单纯的预测),可能会要求您减少X的数量为10或15
rolando2

2
@ rolando2在某些应用程序中100根本不大。例如,关于高速宽带可及性的文献指出了大约150个变量(在数百个被分析的变量中),并且所有这些变量都是合理的:它们与工程的难易程度(地形,岩石类型,气候等)有关,与经济学有关。 (SES等),人口统计,当地交通基础设施的几何结构,政治(税收和商业环境)等。我相信许多经济模型同样可以包含数百个理论上重要的变量。
Whuber

@whuber-我正在考虑您的观点...您是否同意,需要一个不寻常的敬业,才华横溢且经验丰富的分析师来理清这么多变量所起的因果作用(而不仅仅是预测作用)?
rolando2 2011年

@rolando好的。2000变量是很多工作!
ub

Answers:


6

您可以从一个简单的Univariate过滤器开始,然后使用交叉验证来确定要保留哪些变量。R包中的sbf函数caret确实很有用。从第19页开始,您可以在此处了解更多信息。


谢谢。我刚刚读了这篇论文,这似乎是一种可靠的方法。但是,我在64位4MB内存系统上遇到了一些内存问题。
DevX

1
@DevX:如果您有太多数据,可以尝试取样并根据该样本选择变量吗?
Zach

13

对于套索和收缩和选择变量的朋友来说,这听起来像是一个合适的问题。统计学习的元素描述了套索和弹性网用于回归,而与此问题更相关的是逻辑回归。

该书的作者已经实现了套索和弹性网的有效实现,可以作为名为glmnet的R包使用。之前,我曾使用此程序包对二进制数据进行分析,其数据矩阵大约为250,000行,尽管列数有所减少,但实际上是针对所有其他列运行所有列的回归。如果数据矩阵也很稀疏,则实现也可以利用它,我相信该方法实际上可以用于OP的完整数据集。以下是关于套索的一些评论:

  • 套索通过使用不平滑的惩罚函数( 1-norm),通常会导致某些参数正好等于0的参数估计。估计参数确定了多少非零参数以及收缩了多少非零参数。glmnet中实现的效率在很大程度上取决于以下事实:对于较大的损失,只有很少的参数不同于0。
  • 调整参数的选择通常是通过交叉验证来完成的,但是即使没有交叉验证步骤,该方法也可能能够给出由惩罚参数索引的选定变量的良好序列。
  • 不利的一面是,对于变量选择,套索在变量选择中可能不稳定,尤其是在变量之间存在一定关联的情况下。发明了更一般的弹性净罚分以改善这种不稳定性,但是它不能完全解决问题。自适应套索是另一种改进套索变量选择的想法。
  • 稳定性选择是Meinshausen和Bühlmann建议的一种通用方法,可以通过套索之类的方法实现所选变量的更大稳定性。它需要对数据集的子样本进行多次拟合,因此对计算的要求更高。
  • 套索的一种合理思考方式是一种生成一维“良好”模型集的方法,该模型范围从单变量模型到由惩罚参数参数化的更复杂的模型(不一定包括所有变量)。相比之下,单变量过滤器仅产生良好的单变量模型的选择或排序。

对于Python,在scikit-learn中实现了套索和弹性网之类的方法的实现。


另外,如果像GWAS中那样,潜在预测变量的数量激增,您可以像本文中那样进行预选:通过套索惩罚逻辑回归进行全基因组关联分析
Nick Sabbe 2011年

@NickSabbe,感谢您的参考。这是非常有用的。在GWAS的情况下,可能还有在具有大量相关预测变量的其他情况下,我听说西尔维亚·理查森(Sylvia Richardson)根据与稳定性选择的一些比较建议贝叶斯模型选择。不过,MCMC的计算确实要求很高。
NRH

我认为值得强调的是自适应套索,因为它易于实现(glmnet在R中几乎只有两个调用而不是一个to )。另一种选择是阈值套索,这也很容易实现。请参阅springer.com/gp/book/9783642201912的 2.9节。
本杰明·克里斯托弗森

2

您可以对每个变量进行逻辑回归/卡方检验,仅保留p值小于某个值(例如2)的变量。


4
为了了解此建议如何执行,请考虑以下情况:有100个(例如)重要的预测变量(与因变量高度相关),而其余的预测变量与因变量以及彼此之间完全不相关。保留p值小于0.2的那些变量可确保最终得到大约100 + 0.2 *(2000-100)= 480个变量,其中380个变量毫无价值。对于小型数据集,此方法有时被用作快速的初始屏幕,但实际上在这里不能认真考虑。
Whuber

好点@whuber。您必须将Alpha值设置得低得多,以保持100左右,但是您可能会错过一些变量,这些变量可能只会影响其他变量的调整。但是,从2000年到480年运行随机森林等操作可能更容易管理。
格伦(Glen)

没错,这种筛选有好处-如果运作正常。480是一个减少量,但是还有其他问题,因为所有2000个原始变量之间可能具有高度相关性。如相关问题的某些答案所示,这可能导致100个正确变量中的任何一个或全部不被保留。
Whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.