我尝试在具有以下大小的数据集上训练 LS-SVM 分类器:
训练数据集:TS = 48000x12(双)
组:G = 48000x1(双)
Matlab训练代码是:
class = svmtrain(TS,G,'method','LS',...
'kernel_function','rbf','boxconstraint',C,'rbf_sigma',sigma);
然后,我收到此错误消息:
使用 svmtrain 时出错(第 516 行)
计算内核函数“rbf_kernel”时出错。
原因:
使用repmat时出错
内存不足。输入 HELP MEMORY 作为您的选项。
请注意,物理内存的大小为 4Gb,当我减少数据集训练大小时它会起作用。那么是否有任何数据大小相同且不添加物理内存的解决方案。
最佳答案
看来,实现需要计算整个 Gram 矩阵,其大小为 N x N(其中 N - 样本数),在您的情况下它是 2,304,000,000
,现在每个都是由 32 位 float 表示,这意味着它至少需要 4 个字节,即所需的 9,216,000,000
字节,对于 Gram(内核)矩阵而言,这大约是 9GB
的数据。
有两个选项:
- 找到 RBF 内核不计算内核(Gram)矩阵,而是每次使用一些可调用函数来计算内核值的实现
- 您可以尝试使用某种 LS-SVM 近似,例如最小二乘支持向量机的快速稀疏近似:http://homes.cs.washington.edu/~lfb/software/FSALS-SVM.htm
关于machine-learning - LS-SVM训练: Out of memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949390/