基于SVM的MAYTLAB实现

该博客介绍了如何使用MATLAB实现支持向量机(SVM)进行分类。实验包括理解SVM原理,选择核函数和参数,以及对'bedroom,forest'数据进行二分类。博主提供了归一化数据的代码,并展示了SVM分类3D数据点的可视化结果。" 133826334,9803657,Selenium控件操作技巧:元素移动,"['Selenium', '自动化测试', 'Web测试']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 实验目的

  1. 进一步掌握支持向量机的原理及应用;
  2. 基于MATLAB实现SVM

2 实验内容

(1)掌握支持向量机(SVM)的原理,核函数类型选择以及核参数选择原则等,并用malab的SVM函数求解各类分类问题实例。

(2)熟悉基于libsvm二分类的一般流程与方法,并对"bedroom,forest"两组数据进行分类(二分类),最后对试验分类的准确率进行分析。

3实验原理

SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示,  

即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。

 

 

4实验步骤

实现代码:

function normal = normalization(x,kind)

% by Li Yang BNU MATH Email:farutoliyang@gmail.com QQ:516667408

% last modified 2009.2.24

%

 

if nargin < 2

    kind = 2;%kind = 1 or 2 表示第一类或第二类规范化

end

 

[m,n]  = size(x);

normal = zeros(m,n);

%% normalize the data x to [0,1]

if kind == 1 

    for i = 1:m

        ma = max( x(i,:) );

        mi = min( x(i,:) );

        normal(i,:) = ( x(i,:)-mi )./( ma-mi );

    end

end

%% normalize the data x to [-1,1]

if kind == 2

    for i = 1:m

        mea = mean( x(i,:) );

        va = var( x(i,:) );

        normal(i,:) = ( x(i,:)-mea )/va;

    end

end

 

clear;

clc;

load SVM

 

train_train = [train(1:4,:);train(5:11,:);train(12:19,:);train(20:30,:)];%手动划4分类

train_target = [target(1:4);target(5:11);target(12:19);target(20:30)];

 

 

test_simulation = [simulation(1:6,:);simulation(7:11,:);simulation(12:24,:);simulation(25:30,:)];

test_labels = [labels(1:6);labels(7:11);labels(12:24);labels(25:30)];

 

% train_train = normalization(train_train',2);

% test_simulation = normalization(test_simulation',2);

% train_train = train_train';

% test_simulation = test_simulation';

 

 

%           bestcv = 0; 

%           for log2c = -10:10,

%           for log2g = -10:10,

%             cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ',num2str(2^log2g)];%将训练集分为5类

%             cv = svmtrain(train_target, train_train, cmd);

%             if (cv >= bestcv),

%               bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;

%             end

%           end

%         end

%         fprintf('(best c=%g, g=%g, rate=%g)\n',bestc, bestg, bestcv);

%         cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg)];

%         model = svmtrain(train_target, train_train, cmd);

 

model = svmtrain(train_target, train_train, '-c 2 -g 0.2 -t 1');%核函数

 

[predict_label, accuracy] = svmpredict(test_labels, test_simulation, model);

predict_label

 

hold off

f=predict_label';

index1=find(f==1);

index2=find(f==2);

index3=find(f==3);

index4=find(f==4);

plot3(simulation(:,1),simulation(:,2),simulation(:,3),'o');

line(simulation(index1,1),simulation(index1,2),simulation(index1,3),'linestyle','none','marker','*','color','g');

line(simulation(index2,1),simulation(index2,2),simulation(index2,3),'linestyle','none','marker','<','color','r');

line(simulation(index3,1),simulation(index3,2),simulation(index3,3),'linestyle','none','marker','+','color','b');

line(simulation(index4,1),simulation(index4,2),simulation(index4,3),'linestyle','none','marker','>','color','y');

box;grid on;hold on;

xlabel('A');

ylabel('B');

zlabel('C');

title('支持向量机分析图');

实验结果:

 

uploading.4e448015.gif转存失败重新上传取消

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值