Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的高效记忆分类器适用于极宽且不太长的训练集_R_Classification_Regression_Correlation_Random Forest - Fatal编程技术网

R中的高效记忆分类器适用于极宽且不太长的训练集

R中的高效记忆分类器适用于极宽且不太长的训练集,r,classification,regression,correlation,random-forest,R,Classification,Regression,Correlation,Random Forest,训练数据集非常广泛(大约200K个特征),并且非常短(数百个)。显然,数据集占用了大量内存,但是R读取数据时没有问题 然后我训练了随机森林分类器,它的内存用完了。因此,我将切换到更简单的分类器,如朴素贝叶斯。NB也导致内存不足 一般来说,什么是内存效率最高的分类器?我怀疑逻辑回归和朴素贝叶斯应该列在清单上 UPD: 在使用随机林之前,我使用了特征缩减方法。在我的例子中,包可以提供帮助,但不能提供初始数量的变量 使用的功能简化: 方差阈值过滤器(移除方差低于阈值的特征) 特征值和预测值之间的相关

训练数据集非常广泛(大约200K个特征),并且非常短(数百个)。显然,数据集占用了大量内存,但是R读取数据时没有问题

然后我训练了随机森林分类器,它的内存用完了。因此,我将切换到更简单的分类器,如朴素贝叶斯。NB也导致内存不足

一般来说,什么是内存效率最高的分类器?我怀疑逻辑回归和朴素贝叶斯应该列在清单上

UPD:

在使用随机林之前,我使用了特征缩减方法。在我的例子中,包可以提供帮助,但不能提供初始数量的变量

使用的功能简化:

  • 方差阈值过滤器(移除方差低于阈值的特征)
  • 特征值和预测值之间的相关性:删除相关性低的特征
  • 特征成对相关性:删除高成对相关性特征
来自康奈尔大学计算机科学系,比较不同分类器的功效。它没有进入速度,但它超过了当今广泛使用的几乎所有分类算法的预测能力。最快的将是不是集成学习分类器的算法。任何构建多个模型并对结果进行平均的算法都必然需要更长的时间。然而,如第5页表2所示,最有效的分类器是集成技术。如果您想尽快建立模型,那么您可能只需要使用单个决策树或逻辑回归。否则,您应该花一些时间了解集成学习技术,并找出如何优化特定算法的速度。我使用类似于的技术并行我的随机森林,得到了很好的结果


编辑以更紧密地解决您的内存问题:内存使用与其说是关于您选择哪种算法,不如说是关于您如何使用该算法。假设您对原始模型使用默认的随机林调用,那么您将构建500个决策树,每个决策树都有大约450个预测变量,并且终端节点的数量与样本中的数据点数量相同。这将占用大量内存。我想指出的一点是,您可以调整这些分类模型中的任何一个,以占用更少的内存并在R中更高效地运行。然而,正如前面提到的,非集成技术(逻辑回归、朴素贝叶斯、CHAID/CART/等决策树)默认情况下将使用最少的内存。

内存效率最高的算法是基于(不在内存中加载整个数据集,而是一次学习一个实例)的算法,也称为散列技巧(可以使用散列将任意大的特征向量变为预定义/固定大小)。逻辑回归和线性支持向量机都有在线学习和基于特征哈希的实现(分别归结为逻辑损失或铰链损失的优化)


我不知道在R中有什么实现(可能有,只是不太了解R库的英文),但是一个非常扎实且广泛使用这些技术的学习者是。它们也在中实现。

glmnet包可以处理稀疏矩阵,并且比集合内存效率更高,但仍然提供变量选择(通过套索/弹性网)。代码可能如下所示:

library(glmnet)
df <- read.csv() #data
X <- sparse.model.matrix( ~ . - y, df) #Matrix with all variables in df except the y variable.
y <- df$y
model <- cv.glmnet(X, y, nfolds = 10, family='binomial' )
库(glmnet)

df为了让随机林在R中高效运行,您付出了多大的努力?并非所有的默认设置都适用于像您这样的数据。为了补充joran所说的内容,我建议您在
randomForest(x,y,…)
公式中使用以下选项:
ntree
mtry
nodesize
maxnodes
。所有这些都会对随机森林的构建速度产生影响。根据您对数据集的简要描述判断,我想说你可能想尝试减少
mtry
和增加
nodesize
maxnodesize
。我确实很感激随机林的帮助,但我仍然希望看到其他分类器建议。我从来没有问过分类器的总体效率和速度,只是问过R中的内存效率。我确实有关于集合分类器的好主意。谢谢你的指点。我的答案措辞很糟糕,但根据我的经验,速度问题归结为模型构建中的内存问题。在不更改任何默认选项的情况下,在200多个预测变量上构建随机林时,基本上构建了500个模型(可以看到,这是树的默认数量)。这些模型都存储在内存中,然后求平均值以获得最终输出。如果您不小心使用参数,这些技术中的任何一种都可能占用大量内存…请使用“200k+预测变量”