【问题标题】:Classificaion with fitcsvm in matlab produces an error在 matlab 中使用 fitcsvm 进行分类会产生错误
【发布时间】:2017-11-05 12:15:34
【问题描述】:

我试过下面的代码

clear all;close all;
data =  [27 9   2
11.6723281  28.93422177 2
25  9   2
23  8   2
5.896096039 23.97745722 1
21  6   2
21.16823369 5.292058423 2
4.242640687 13.43502884 1
22  6   2];
Attributes = data(:,1:2);
Classes = data(:,3);
train = [1 3 4 5 6 7];
testInds = [2 8 9];
test1 = data(testInds,1:2);
YTest =data(testInds,3);
%%# Train
svmStruct = svmtrain(Attributes(train,:),Classes(train),'ShowPlot',true);

 SVMModel = fitcsvm(Attributes(train,:),Classes(train))
 classOrder = SVMModel.ClassNames
sv = SVMModel.SupportVectors;
figure
gscatter(data(:,1),data(:,2),Classes)
hold on
plot(sv(:,1), sv(:,2),'ko','MarkerSize',10)
legend('good','bad','Support Vector')
hold off
[label,score] = predict(SVMModel,test1);
% [predict_label, accuracy, prob_estimates] = predict(SVMModel,test1)
table(YTest(1:2),label(1:2),score(1:10,2),'VariableNames',...
    {'TrueLabel','PredictedLabel','Score'})

我尝试了上面的代码。前两列是我的数据,最后一列是组 ID。 SVMModel 是分类。我收到错误

索引超出矩阵维度。

无标题错误(第 34 行) 表(YTest(1:2),标签(1:2),分数(1:10,2),'VariableNames',... 我试图测试一个实例。但是这两个语句都会产生错误

[label,score] = predict(SVMModel,test);
 label           = svmclassify(SVMModel, test);

【问题讨论】:

    标签: matlab classification svm


    【解决方案1】:

    您只需翻转预测变量和标签 - 它是 fitcsvm(predictors,labels),或者在您的情况下是 fitcsvm(Attributes(train,:),Classes(train))

    编辑:

    plot(sv(:,1), sv(:,2),'ko','MarkerSize',10) % you obviously do not want to plot the same data twice in the same plot...
    

    对于预测:[predict_label, accuracy, prob_estimates] = svmpredict(Classes(test), Attributes(test,:), SVMModel); 看起来不错。

    【讨论】:

    • 我的错误,而不是model,它必须是SVMModel,纠正了它。 train = [1 3 4 5 6 7] 非常好。你到底想画什么?当前绘制了训练向量,如果我正确解释代码,则用作模型向量支持的元素在它们周围有一个圆圈。如果您想知道向量如何划分数据,这对我来说非常好。
    • svmpredict 是LIBSVM 的一部分。我以为你有。如果没有,您可以安装它(一些教程只需谷歌“LIBSVM matlab”)或使用内置函数predict。 ([label,score,cost] = predict(SVMModel,Attributes(test,:));
    • 如果你想估计预测器的性能,交叉验证是最常用的方法,你可以用crossval来做到这一点
    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2021-09-06
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多