利用matlab2018a运行SVM时,提示错误使用 plot ;向量长度必须相同。 出错 main (line 68) plot(1:length(test_label),predict_label_2,'b:o');求大佬指点。
3 views (last 30 days)
Show older comments
软件版本: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)
0 Comments
Accepted Answer
rxcbvdu
on 21 May 2023
将[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 Comments
More Answers (0)
See Also
Categories
Find more on Statistics and Machine Learning Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!