2014-01-06 162 views
1

我尝试在具有以下尺寸的数据集训练一个LS-SVM分类:LS-SVM的训练:内存

训练数据集:TS = 48000x12(双)
群组:G = 48000x1(双)

Matlab的训练码:

class = svmtrain(TS,G,'method','LS',... 
       'kernel_function','rbf','boxconstraint',C,'rbf_sigma',sigma); 

然后,我得到这个错误信息:

全光照的错误g svmtrain(行516)
评估内核函数'rbf_kernel'时出错。使用repmat
缺货的存储器
错误:

所致。为您的选项键入HELP MEMORY。

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

+0

多少类,你在你的训练集? – lejlot

+0

@lejlot:'svmtrain' Matlab函数仅适用于二进制分类,所以我只有两个类。 – Sofiane

+0

您可能能够在Scala中使用Breeze进行SVM。我不喜欢不可扩展的解决方案,而Matlab总是无法扩展。我建议你进入http://spark.incubator.apache.org/docs/latest/mllib-guide.html – samthebest

回答

1

看来,实现需要计算整个格拉姆矩阵,它是N×N(其中N - 样本数)的大小,在你的情况下它是2,304,000,000,现在每个都用32位浮点数表示,这意味着它需要至少4个字节,这个字节需要9,216,000,000个字节,这大概是针对Gram(内核)矩阵的数据的9GB

有两种选择:

+0

感谢您的回复。但是你怎么计算出数字N? (知道我有48000个训练样本和12个特征) – Sofiane

+0

N = 48000,所以N * N = 2,304,000,000 – lejlot

+0

答案的第二个选项很有用,但它不能解决问题,因为当我尝试集成开发的C函数(在'mex'编译之后),Matlab遇到内部问题并需要关闭。另外,我更喜欢使用Matlab函数的解决方案(特别是用于训练和测试的Matlab SVM函数)。感谢有用的建议。 – Sofiane