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;
%分类器效果测评,就是看测试集分类的准确率的高低