【问题标题】:Storing an array/matrix of ClassificationSVM with fitcsvm() function in Matlab gives me an error, how can I resolve it?在 Matlab 中使用 fitcsvm() 函数存储 ClassificationSVM 的数组/矩阵会给我一个错误,我该如何解决?
【发布时间】: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


【解决方案1】:

fitcsvm输出无法存储在数字阵列中的对象,因此您必须使用单元格数组(即CURLY BRACE),如下所示:

SVMModel{i} = SVMModelHolder

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多