大数据的逻辑回归


9

我有大约5000个功能的数据集。对于这些数据,我首先使用卡方检验进行特征选择。之后,我得到了大约1500个变量,这些变量与响应变量之间显示出显着的关系。

现在,我需要对此进行逻辑回归。我正在为R使用glmulti软件包(glmulti软件包为vlm提供了有效的子集选择),但一次只能使用30个功能,否则其性能会下降,因为数据集中的行数约为20000。

是否有其他方法或技术可以解决上述问题?如果我采用上述方法,将需要太多时间来拟合模型。


8
如果您可以将数据集放入一台机器的内存中,那么我就不会将其称为“大数据”问题,尤其是如果您在问题的标题中这样做的话
logc 2014年

我使用sklearnLogisticRegression,它在关于我的笔记本电脑一分钟解决了4000层的功能,2行的问题。
Thomas Ahle

Answers:


13

不适合进行特征筛选,然后将尚存的特征馈入一种无法理解之前曾进行过多少数据折磨的方法。最好使用可以处理所有潜在特征(例如,弹性网)的方法。其他人关于使用数据约简的建议也是不错的主意。


有证据吗?O / w似乎和特征筛选一样具有启发性。
Zubin 2015年

2
罚最大似然估计考虑了上下文,例如,在套索中,如果您考虑了1000个非选择变量,则变量的回归系数估计将比如果考虑100个非选择变量时小。否则,将以有偏见的方式选择变量,并且在第二步中重新拟合变量会失去上下文。
Frank Harrell

您能解释一下这里所说的偏见吗?我想知道,因为在琐碎的意义上套索总是有偏差的,所以您必须参考其他偏差。此外,还有一些具有合理属性的两阶段方法,例如pdfs.semanticscholar.org/d90a/…–
jmb

2
套索向零故意偏差系数,以防止过度拟合。未经修饰的参数会导致预测值过高。在未经惩罚的模型中拟合“选定”变量将消除所需的套索偏差,从而大大超出预测值。
弗兰克·哈雷尔

10

第一种方法是使用PCA来减少数据集的维数。尝试保留〜97%的总方差,这可能会有所帮助。

另一种选择是使用随机梯度下降之类的方法,这可能是一种更快的算法,并且能够适合R的内存。

编辑: R的一个问题是您只能使用RAM,因此,如果您只有8 GB的内存,那就是您的限制。我遇到了很多问题,此后开始使用python的scikit-learn,它似乎可以更好地处理更大的数据集。

可以在此处找到一个非常不错的图表,该图表根据您的数据集大小给出了一些开始的地方的想法:http: //3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

在此处输入图片说明


8
以这种方式使用PCA时,一个大问题是响应变量和自变量之间的所有关系都可能位于您忽略的总方差的3%中。似乎也没有任何通用的方法来确定要使用多少个主要成分,因为最小的成分可能与响应本身成比例,从而构成要包含的变量的最佳选择。
ub

1
我认为确实的确,如果您能够将数据集加载到主存储器中(考虑到您的解释,我认为是这种情况),那么在尝试降维技术之前,应该采取随机梯度下降法。使用python上的Scikit-learn(或R,但我不是该语言的用户),就可以正常工作。
Bertrand R

我认为这是一个有用的答案,但我认为OP正在询问逻辑回归,而不是功能约简。也许您可以在一个版本中解决问题的那一部分?
logc 2014年

我不确定PCA对回归问题有多有用。问题是这样的:PCA保留输入矩阵的最大奇异值,但是矩阵的伪逆将奇异值反转,因此您真的想保持最小的原始值。仅草绘数据可能会更好:arxiv.org/abs/1411.4357
Thomas Ahle,

4

正如@Frank Harrell已经提到的那样,使用弹性网或LASSO对所有5000个特征(p)执行惩罚回归将是特征选择的良好开端(一个人不能简单地删除3500个变量,因为它们对于变量没有“统计意义”)。感兴趣的因变量)。可以使用R软件包来执行这两种方法中的任何一种glmnet

为了考虑到潜在的潜在预测变量之间共享的关系(p = 5000),我建议使用该程序包运行随机森林randomForest和/或使用该程序包进行梯度增强gbm以评估潜在预测变量的相对重要性。关于二进制结果。有了这些信息,您将更加准备建立更简约的逻辑回归模型。


3
不,进行数据挖掘以确定从模型中删除哪些参数是不正确的。像弹性网一样,随机森林的价值在于它包含了适当数量的收缩。从以未掩盖为的方式找到的变量子集重新开始将导致偏差。Y
Frank Harrell 2014年

1

我认为您不仅限于R,因为这可能是您不应该遇到的大数据问题。您可以尝试MLlib,它是Apache Spark的可扩展机器学习库。

反过来,Apache Spark是用于内存中大规模数据处理的快速通用引擎。它们在Hadoop框架上运行,该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。

请注意,“数千台计算机”是可选的(!),您也可以在本地工作/家庭桌面上进行设置。

回到MLlib,它具有以下开箱即用的算法:

  • K-均值与K-均值的聚类|| 初始化。
  • L1和L2正则化线性回归。
  • L1和L2正则化logistic回归。
  • 交替最小二乘协作过滤,具有显式评级或隐式反馈。
  • 朴素贝叶斯多项式分类。
  • 随机梯度下降。

如果您经常使用大数据,则可能需要采用Hadoop解决方案。


0

您可以尝试Vowpal Wabbit:Vowpal Wabbit 。它适用于非常大的数据集和大量特征。

根据该网站:

这是一个从Yahoo!开始的项目。在Microsoft Research进行研究并继续,以设计一种快速,可扩展,有用的学习算法。大众汽车是机器学习速度的精髓,能够轻松地从特征数据集中学习。通过并行学习,当进行线性学习时,它可以超过任何单个机器网络接口的吞吐量,这是学习算法中的第一个。

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.