matlab怎么优化支持向量机的分类

发布时间:2022-01-14 10:23:10 作者:iii
来源:亿速云 阅读:230

这篇文章主要介绍“matlab怎么优化支持向量机的分类”,在日常操作中,相信很多人在matlab怎么优化支持向量机的分类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”matlab怎么优化支持向量机的分类”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

通过交叉验证方法利用训练集找到分类的最佳参数,不但能够高淮确率的预测训练集而且要合理的预测测试集,使得测试集的分类准确率也维持在一个较高水平,即使得得到的SVM分类器的学习能力和推广能力保持一个平衡.避免过学习和欠学习状況发生。

交叉验证方法就是让c和g在一定的范围内取值,对于取定得c和g把训练集作为原始数裾集利用K - CV方法得到在此组c和g下训练集验证分类准确率,最终取使得训练集验证分类准确率最高的那组c和g做为最佳的参数,但有一个问题就是可能会有多组的c和g对应于最高的验证分类准确率,这种情况怎么处理?这里采用的手段是选取能够适到最高验证分类准确率巾参数r最小的那组c和g做为最佳的参数,如果对应最小的c有多组g,就选取搜索到的第一组c和g做为最佳的参数。这样做的理由是:过高的c会导致过学习状态发生,即训练集分类准确率很高而测试集分类准确率很低(分类器的泛化能力降低),所以在能够达到最高验证分类准确率中的所有的成对的c和g中认为较小的惩罚参数c是更佳的选择对象。


%% 清空环境变量

clear

clc


%% 导入数据

load BreastTissue_data.mat

% 随机产生训练集和测试集

n = randperm(size(matrix,1));

% 训练集——80个样本

train_matrix = matrix(n(1:80),:);

train_label = label(n(1:80),:);

% 测试集——26个样本

test_matrix = matrix(n(81:end),:);

test_label = label(n(81:end),:);


%% 数据归一化

[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);


%% 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

matlab怎么优化支持向量机的分类  

plot(1:length(test_label),test_label,'r-*')

hold on

plot(1:length(test_label),predict_label_2,'b:o')

grid on

legend('真实类别','预测类别')

xlabel('测试集样本编号')

ylabel('测试集样本类别')

string = {'测试集SVM预测结果对比(RBF核函数)';

          ['accuracy = ' num2str(accuracy_2(1)) '%']};

title(string)

到此,关于“matlab怎么优化支持向量机的分类”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Python 支持向量机分类器的实现
  2. spark mllib分类之如何支持向量机

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

matlab

上一篇:matlab怎么实现支持向量机的回归拟合

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》