Machine learning LS-SVM训练:内存不足

Machine learning LS-SVM训练:内存不足,machine-learning,classification,svm,matlab,Machine Learning,Classification,Svm,Matlab,我尝试在具有以下大小的数据集上训练LS-SVM分类器: 培训数据集:TS=48000x12(双倍) 分组:G=48000x1(双) Matlab培训代码为: class = svmtrain(TS,G,'method','LS',... 'kernel_function','rbf','boxconstraint',C,'rbf_sigma',sigma); 然后,我得到了这个错误消息: 使用svmtrain时出错(第516行) 计算核函数“rbf_核”时出错

我尝试在具有以下大小的数据集上训练LS-SVM分类器:

培训数据集:TS=48000x12(双倍)
分组:G=48000x1(双)

Matlab培训代码为:

class = svmtrain(TS,G,'method','LS',...
                 'kernel_function','rbf','boxconstraint',C,'rbf_sigma',sigma);
然后,我得到了这个错误消息:

使用svmtrain时出错(第516行)
计算核函数“rbf_核”时出错。

原因:
使用repmat时出错
内存不足。为您的选项键入帮助记忆。


请注意,物理内存的大小是4Gb,当我减小数据集训练大小时,它就会工作。因此,如果有任何解决方案具有相同的数据大小,当然不需要添加物理内存。

看来,实现需要计算整个Gram矩阵,它的大小是nxn(其中N-样本数),在您的情况下,它是
2304000000
,现在每个都由32位浮点表示,这意味着它至少需要4个字节,即所需的
9216000000
字节,这大约是一个Gram(内核)矩阵的
9GB

有两种选择:

  • 查找RBF核的实现,该实现不计算核(Gram)矩阵,而是每次使用一些可调用函数来计算核值
  • 您可以尝试使用某种LS-SVM近似,如最小二乘支持向量机的快速稀疏近似:

您的训练集中有多少个类?@lejlot:
svmtrain
Matlab函数仅适用于二进制分类,因此我只有两个类。您可以在Scala中将Breeze用于SVM。我不喜欢任何不可缩放的解决方案,Matlab总是无法扩展。我建议您进入一个不确定是否可能的领域,但可能使用较小的数据类型,例如,我会尝试
Single
int8
。当然,还要确保你的记忆中没有不必要的东西。另外,请确认您正在运行64位matlab。看看为什么。@DennisJaheruddin:谢谢你的评论。是的,我正在运行一个64位的Matlab,即使我尝试使用
数据类型(包含
一个),问题也是一样的。感谢您的回复。但是你是怎么计算N的?(知道我有48000个样本用于培训和12个功能)N=48000,因此N*N=2304000000您的答案的第二个选项是有用的,但它不能解决问题,因为当我尝试集成开发的C函数(在
mex
编译之后)时,Matlab遇到内部问题,需要关闭。此外,我更喜欢使用Matlab函数的解决方案(尤其是用于训练和测试的Matlab SVM函数)。谢谢你的建议。