利用matlab2018a运行SVM时,提示错误使用 plot ;向量长度必须相同。 出错 main (line 68) plot(1:length(test_label),predict_label_2,'b:o');求大佬指点。
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
软件版本: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 commentaires
Réponse acceptée
rxcbvdu
le 21 Mai 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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Statistics and Machine Learning Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!