利用matlab20​18a运行SVM时,​提示错误使用 plot ;向量长度必须相同。 出错 main (line 68) plot(1:len​gth(test_l​abel),pred​ict_label_​2,'b:o');求​大佬指点。

3 次查看(过去 30 天)
软件版本:2018a和2014b
存在的问题:运行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)

采纳的回答

rxcbvdu
rxcbvdu 2023-5-21
将[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)
即可出图

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Statistics and Machine Learning Toolbox 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!