weixin_51339400 2022-08-29 15:45 采纳率: 0%
浏览 46
已结题

SVM运行时,提示错误使用 plot

问题:利用matlab2018a运行SVM时,提示错误使用 plot ;向量长度必须相同。 出错 main (line 68) plot(1:length(test_label),predict_label_2,'b:o');

相关代码:
软件版本:2018a
存在的问题:运行SVM主程序时,提示错误使用 plot;向量长度必须相同。
出错 main (line 68)
plot(1:length(test_label),predict_label_2,'b:o')
代码如下:

%% 支持向量机的分类——基于乳腺组织电阻抗特性的乳腺癌诊断
%% 清空环境变量
clear all
clc

%% 导入数据
load data1

%% 数据归一化
[Train_matrix,PS] = mapminmax(train_matrix');
Train_matrix = Train_matrix';
Test_matrix = mapminmax('apply',test_matrix',PS);
Test_matrix = Test_matrix';

%% SVM创建/训练(RBF核函数)

% 寻找最佳c/g参数——交叉验证方法
[c,g] = meshgrid(-10:0.2:10,-10:0.2:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;
bestc = 1;
bestg = 0.1;
bestacc = 0;
for i = 1:m
    for j = 1:n
        cmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j))];
        cg(i,j) = svmtrain(train_label,Train_matrix,cmd);  %%   
        if cg(i,j) > bestacc
            bestacc = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end        
        if abs( cg(i,j)-bestacc )<=eps && bestc > 2^c(i,j)
            bestacc = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end               
    end
end
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
% 创建/训练SVM模型
model = svmtrain(train_label,Train_matrix,cmd);%%
%model = fitcsvm(train_label,Train_matrix,cmd);
%% SVM仿真测试
[predict_label_1,accuracy_1] = svmpredict(train_label,Train_matrix,model)
[predict_label_2,accuracy_2] = svmpredict(test_label,Test_matrix,model)
result_1 = [train_label predict_label_1]
result_2 = [test_label predict_label_2]
%% 绘图
figure
plot(1:length(test_label),test_label,'r-*')
hold on
plot(1:length(test_label),predict_label_2,'b:o')
%plot(1:length(predict_label_2),predict_label_2,'b:o')%
grid on
legend('真实类别','预测类别')
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集SVM预测结果对比(RBF核函数)';
    ['accuracy = ' num2str(accuracy_2(1)) '%']};
title(string)

解决方案:

将[predict_label_1,accuracy_1] = libsvmpredict(train_label,Train_matrix,model)
[predict_label_2,accuracy_2] = libsvmpredict(test_label,Test_matrix,model)
改为
[predict_label_1,accuracy_1,~] = libsvmpredict(train_label,Train_matrix,model)
[predict_label_2,accuracy_2,~] = libsvmpredict(test_label,Test_matrix,model)

即可出图

结果图:

  • 写回答

1条回答 默认 最新

  • weixin_51339400 2022-08-29 15:46
    关注
    评论

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 创建了问题 8月29日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog