SVM的简单使用

使用SVM数据进行了分类实现,4个标签,每个标签下有120组特征向量,在测试中 要显示每种类别的属于概率。
先是我主要的matlab代码。
warning('off');
clc;
clear;
M=xlsread('Data.xls');
A1=M(:,1:6);  %%记录事件1,2,3,4
A2=M(:,8:13);
A3=M(:,15:20);
A4=M(:,22:27);

A1_label=ones(120,1);
A2_label=ones(120,1);
A3_label=ones(120,1);
A4_label=ones(120,1);

A2_label(:,:)=2;
A3_label(:,:)=3;
A4_label(:,:)=4;
%%%%总网络的训练
A=[A1;A2;A3;A4];
A_label=[A1_label;A2_label;A3_label;A4_label];
model=svmtrain(A_label,A,'-b 1');

%%%%%%%测试随机选取A1,A2,A3,A4的10个向量进行测试
count=20;
test=[A1(1:10,:);A2(1:10,:);A3(1:10,:);A4(1:10,:)];
label1=zeros(1,10);
label2=zeros(1,10);
label3=zeros(1,10);
label4=zeros(1,10);

label1(:,:)=1;
label2(:,:)=2;
label3(:,:)=3;
label4(:,:)=4;
test_label=[label1';label2';label3';label4'];
[predicted_label, accuracy, probility] = svmpredict(test_label, test, model, '-b 1');


%%%最初训练出来的只有75%的识别率,重复训练SVM提高识别率
%%%因为标签较集中容易形成拟合,将训练集进行打乱再次训练
train_count=15200;   %%这里可以根据你的识别率,设置相应的训练集数
[m,n]=size(A);
train_data=[];
train_label=[];
for i=1:train_count
    [x,y]=size(train_data);
    [x1,y1]=size(train_label);
    num=randint(1,1,[1 m]);
    train_data(x+1,:)=A(num,:);
    train_label(x1+1,:)=A_label(num);
end

%%训练
new_model=svmtrain(train_label,train_data,'-b 1');
[predicted, accuracy, probility1] = svmpredict(test_label, test,new_model,'-b 1');


其中warning('off')是取消警告,
-b 1:是显示属于每类的概率,其中概率最大的即分配给该类。
model=svmtrain(train_label,train_data,'-b 1');
先标签,再数据集,其中标签一定是一行一类,data中的数据的每一行表示一个类,对应label中的该行,所以label一定是一个列向量。
【label,accury,probility】=svmpredict(label,data,model,'-b 1');
输出的是预测的标签,正确率,以及属于每类的概率,(实际上加个-b 1就可以了,不需要其他什么额外的研究,但是要注意的是,这里的概率是根据model模型中的label顺序来的,如果你的训练集是乱的,就需要根据生成的Model模型中的标签顺序来看概率值,比如model模型中的标签顺序是,1,3,2,4,那么就是按照这个顺序来生成的概率值)

我在训练SVM的时候由于内置的函数正确率不是很高,只有75,后来随机生成了1000的矩阵,来进行重复训练,效果不是很好,只提高了2.5到5左右的百分点,当然不是很稳定,后期会试着研究下怎样用SVM训练已有的模型~不定期更新~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值