我有一个包含大约 5000 个特征的数据集。对于该数据,我首先使用卡方检验进行特征选择;之后,我得到了大约 1500 个变量,这些变量与响应变量有显着关系。
现在我需要对此进行逻辑回归。我正在为 R 使用 glmulti 包(glmulti 包为 vlm 提供有效的子集选择),但它一次只能使用 30 个特征,否则它的性能会下降,因为我的数据集中的行数约为 20000。
有没有其他方法或技术可以解决上述问题?如果我采用上述方法,将花费太多时间来拟合模型。
我有一个包含大约 5000 个特征的数据集。对于该数据,我首先使用卡方检验进行特征选择;之后,我得到了大约 1500 个变量,这些变量与响应变量有显着关系。
现在我需要对此进行逻辑回归。我正在为 R 使用 glmulti 包(glmulti 包为 vlm 提供有效的子集选择),但它一次只能使用 30 个特征,否则它的性能会下降,因为我的数据集中的行数约为 20000。
有没有其他方法或技术可以解决上述问题?如果我采用上述方法,将花费太多时间来拟合模型。
进行特征筛选,然后将幸存的特征输入到不了解之前进行了多少数据折磨的方法中是不合适的。最好使用可以处理所有潜在特征的方法(例如,弹性网络)。其他人关于使用数据缩减的建议也是很好的想法。
第一种方法是使用 PCA 来降低数据集的维数。尝试保留约 97% 的总方差,这可能会有所帮助。
另一种选择是使用诸如随机梯度下降之类的东西,这可能是一种更快的算法并且能够适应 R 的内存。
编辑: R 的一个问题是你只能使用你的 RAM,所以如果你只有 8 GB 的内存,那么这就是你的限制。我遇到了很多问题,后来开始使用 python 的 scikit-learn,它似乎可以更好地处理更大的数据集。
可以在这里找到一个非常好的图表,它可以根据您的数据集大小给出一些开始的位置:http: //3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -图表.jpg
我假设您不仅限于 R,因为这是一个大数据问题,您可能不应该这样做。您可以尝试MLlib,这是 Apache Spark 的可扩展机器学习库。
反过来, Apache Spark是一种用于内存中大规模数据处理的快速通用引擎。它们在 Hadoop 框架上运行,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。
请注意,“数千台机器”是可选的(!),您也可以在本地工作/家庭桌面上进行设置。
回到 MLlib,它带有以下开箱即用的算法:
如果您经常使用大数据,您可能需要采用 Hadoop 解决方案。