您的位置:首页 > 编程语言 > MATLAB

SVM熟练到精通5:MATLAB实例

2016-12-26 11:57 696 查看

1.源代码

clc;
clear all;
close all;
load fisheriris;
%matlab自带分类数据集fisheriris,来源于http://archive.ics.uci.edu/ml/ 中的risi数据,
%其数据类别分为3类,setosa,versicolor,virginica.每类植物有50个样本,共150个。
%每个样本有4个属性,分别为花萼长,花萼宽,花瓣长,花瓣宽。

%其中meas是150*4的矩阵代表着有150个样本每个样本有4个属性描述
%species代表着这150个样本的分类.

data = [meas(:,1),meas(:,2)];  %构建测试数据
%在这里只取meas的第一列和第二列,即只选取前两个特征

groups = ismember(species,'setosa'); %构建测试结果
%由于species分类中是有三个分类:setosa,versicolor,virginica
%为了使问题简单,我们将其变为二分类问题:Setosa and non-Setosa.

[train,test] = crossvalind('holdOut',groups,0.5);
%生成交叉验证指标  [Train, Test] = crossvalind('HoldOut', N, P)
%返回一个逻辑值的标记向量,从N个观察样本中随机选取(或近似于)P*N个样本作为测试集。
%故P应为0-1,缺省值为0.5。

cp = classperf(groups);
%评估分类器性能

svmStruct = svmtrain(data(train,:),groups(train),'showplot',true);
%训练支持向量机分类器
%使用svmtrain进行训练,得到训练后的结构svmStruct,在预测时使用

classes = svmclassify(svmStruct,data(test,:),'showplot',true);
%对于未知的测试集进行分类预测  SVMStruct = svmtrain(Training,Group,Name,Value)
%Training:训练数据矩阵,每一行对应一个观察,每一列对应一个特征或变量;
%         svmtrain对NAN在训练或空字符串为缺失值,忽略了相应的行组。
%Group:分组变量
%Name:有很多特性,画图、核函数选择、阶数、优化算法等
%SVMStruct:训练后的SVM信息 支持向量、核函数等

classperf(cp,classes,test);
cp.CorrectRate;
%分类器效果测评,就是看测试集分类的准确率的高低


2.分类结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: