非线性内核
(首先使用线性内核发现判错率比较高 )
%原始数据cancerdata.txt可在网上下载,数据中的B替换成1,M替换成-1,X替换成2,删除了分割符*,替换后的数据命名成cancerdata2.txt
clc,cleara=load('cancerdata2.txt');
a(:,1)=[]; %删除第一列病例号
gind=find(a(:,1)==1); %读出良性肿瘤的序号
bind=find(a(:,1)==-1); %读出恶性肿瘤的序号
training0=a([1:500],[2:end]); %提出已知样本点的数据
training=training0';
[train,ps]=mapstd(training); %已分类数据标准化
group(gind)=1; group(bind)=-1; %已知样本点的类别标号
group=group'; %转换成列向量
xa0=a([501:569],[2:end]); %提出待分类数据
xa=xa0'; xa=mapstd('apply',xa,ps); %待分类数据标准化
s=svmtrain(training',group, 'Method','SMO', ' Kernel_Function','quadratic') %使用序列最小化方法训练支持向量机的分类器,如果使用二次规划的方法训练支持向量机则无法求解
sv_index=s.SupportVectorIn