【问题标题】:Out of memory using svmtrain in Matlab在 Matlab 中使用 svmtrain 内存不足
【发布时间】:2013-04-06 07:55:40
【问题描述】:

我有一组数据正在尝试使用 SVM 进行学习。就上下文而言,数据的维度为 35,包含大约 30,000 个数据点。

我之前用这个数据集在 Matlab 中训练过决策树,大约需要 20 秒。对错误率并不完全满意,我决定尝试 SVM。

我第一次尝试svmtrain(X,Y)。大约 5 秒后,我收到以下消息:

???在 453 处使用 ==> svmtrain 时出错 计算核函数时出错: 记不清。键入 HELP MEMORY 作为您的选项。

当我查看此错误时,有人建议我使用 SMO 方法:svmtrain(X, Y, 'method', 'SMO');。大约一分钟后,我得到了这个:

???在 236 处使用 ==> seqminopt>seqminoptImpl 时出错 在主循环通过的最大次数(15000)内没有达到收敛

==> seqminopt 中的错误为 100 [alphas offset] = seqminoptImpl(data, targetLabels, ...

==> svmtrain 中的错误在 437 [alpha 偏差] = seqminopt(training, groupIndex, ...

我尝试使用其他方法(LS 和 QP),但我再次得到第一个行为:然后延迟 5 秒

???在 453 处使用 ==> svmtrain 时出错 计算核函数时出错: 记不清。键入 HELP MEMORY 作为您的选项。

我开始认为我做错了什么,因为决策树使用起来非常轻松,在这里我陷入了看似非常简单的操作。

非常感谢您的帮助。

【问题讨论】:

  • 如果您在较少数量的数据点上进行训练是否会出错,例如1000?

标签: matlab machine-learning out-of-memory svm convergence


【解决方案1】:

您是否阅读了接近尾声的the remarks 关于算法内存使用情况的信息?

尝试将方法设置为SMO 并使用适合您机器上可用内存的kernelcachelimit 值。

在学习过程中,算法将构建一个大小为kernelcachelimit-by-kernelcachelimit 的双矩阵。默认值为 5000

否则,对您的实例进行二次抽样并使用交叉验证等技术来衡量分类器的性能。

以下是相关部分:

内存使用和内存不足错误

当您将“方法”设置为“QP”时,svmtrain 函数在 包含 N 个元素的数据集,它创建一个 (N+1)×(N+1) 矩阵来找到分离的超平面。这个矩阵至少需要 8*(n+1)^2 字节的连续内存。如果这个大小的连续 内存不可用,软件显示“内存不足” 错误信息。

当您将“方法”设置为“SMO”(默认)时,内存消耗为 由 kernelcachelimit 选项控制。 SMO 算法存储 只有内核矩阵的一个子矩阵,受指定大小的限制 通过 kernelcachelimit 选项。但是,如果数据点的数量 超过 kernelcachelimit 选项指定的大小,SMO 算法变慢了,因为它必须重新计算内核矩阵 元素。

在大型数据集上使用 svmtrain 时,内存不足或 优化步骤非常耗时,请尝试以下任一 以下:

  • 使用较少的样本并使用交叉验证来测试分类器的性能。

  • 将“方法”设置为“SMO”,并将 kernelcachelimit 选项设置为系统允许的最大大小。

【讨论】:

  • 我没有看到:这看起来很有希望...我尝试使用t = svmtrain(thisTrainX, thisTrainY, 'method', 'SMO', 'kernelcachelimit', 10000);,根据文档,但我得到了Unknown parameter name: kernelcachelimit.。知道为什么吗?
  • @grasswistle:根据release notes,在 R2011a 中添加了 SMO 方法选项。如果您使用的是旧版本,您可能需要升级.. 还值得一试libsvm,它包括一个 MATLAB 包装器
  • @grasswistle:似乎旧版本使用svmsmoset 来设置KernelCacheLimit 参数。有关详细信息,请参阅本地安装的文档。
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 2015-05-23
  • 2014-05-20
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多