4

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

然后我训练了随机森林分类器,它的内存不足。所以我改用更简单的分类器,比如朴素贝叶斯。NB也导致内存不足。

一般来说,最节省内存的分类器是什么?我怀疑逻辑回归和朴素贝叶斯应该列入名单......

升级版:

在使用随机森林之前,我最终使用了特征减少方法。在我的情况下,包插入符号可以提供帮助,但不能提供初始变量数。

使用的特征缩减:

  • 方差阈值过滤器(去除方差低于阈值的特征);
  • 特征与预测值之间的相关性:去除相关性较低的特征;
  • 特征成对相关性:去除高成对相关性特征。
4

3 回答 3

1

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

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

于 2013-05-29T07:55:30.813 回答
1

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' )
于 2014-03-11T16:59:02.997 回答
1

这是康奈尔计算机科学系的一篇论文,比较了不同分类器的功效。它没有进入速度,但它超越了当今广泛使用的几乎所有分类算法的预测能力。最快的将是那些不是集成学习分类器。任何构建多个模型并对结果进行平均的算法本质上都需要更长的时间。但是,如 pg 的表 2 所示。5、最有效的分类器是集成技术。如果您想尽可能快地构建模型,那么您可能应该只使用单个决策树或逻辑回归。否则,您应该花一些时间了解集成学习技术并弄清楚如何优化该特定算法的速度。使用与此类似的技术并行化我的随机森林,我得到了很好的结果。

编辑以更密切地解决您的内存问题: 内存使用量与您选择哪种算法无关,而与您如何使用该算法有关。假设您对原始模型使用默认的随机森林调用,您将构建 500 个决策树,每个决策树具有约 450 个预测变量和与样本中的数据点一样多的终端节点。这将占用大量内存。我要说明的一点是,您可以调整任何这些分类模型以占用更少的内存并在 R 中更有效地运行。然而,如前所述,非集成技术(逻辑回归、朴素贝叶斯、CHAID/CART /etc 决策树)将默认使用最少的内存。

于 2013-05-29T04:01:17.813 回答