【发布时间】:2015-06-13 01:44:04
【问题描述】:
我正在尝试使用 Matlab 中的 SVM 库执行多标签分类。有一种解决方案可以使用名为 svmtrain() here 的“旧”SVM 函数。基于此,我使用 fitcsvm() 创建了自己的函数。 但是,当我尝试存储经过 SVM 训练的模型时,出现以下错误:
使用 classreg.learning.internal/DisallowVectorOps/subsasgn 时出错(第 28 行)
您不能使用 () 索引分配给 double 类的对象。
multiClassSVM 中的错误>(parfor body)(第 16 行)
SVMModel(i) = SVMModelHolder;
multiClassSVM 中的错误(第 8 行)
parfor i=1:9
如何在一个变量中存储多个 ClassificationSVM 模型?
如果有帮助,给出代码:
parfor i=1:9
label = (labels==i);
label = i * label;
disp(size(label));
disp(size(trainSet));
SVMModelHolder = fitcsvm(trainSet, label);
disp(class(SVMModelHolder))
SVMModel(i) = SVMModelHolder;
end;
如果有任何帮助,或者以完全不同的方式解决问题的任何建议,我将不胜感激。
【问题讨论】:
-
我怀疑您需要为此使用元胞数组。尝试
SVMModel{i} = SVMModelHolder,即使用大括号代替常规括号 -
谢谢,成功了!但我不明白为什么我需要在这里使用单元格数组。我怎么知道区别,我可以阅读有关此的任何特定文档吗?再次感谢@Dan
-
在该函数的文档中,它会告诉您它输出的内容。旧函数输出一堆不同的数值数组,新函数输出一个对象。您不能将这样的对象存储在数值数组中,因此您需要使用元胞数组
-
这很有道理...我想随着我进一步使用Matlab,我会不断学习更多。 @Dan 你是最有帮助的 :)
-
没问题 - 我将把这个作为答案发布,以便您接受它
标签: matlab machine-learning svm multilabel-classification matrix-storage