《数学建模算法与应用第二版》——chapter9. 支持向量机
程序员文章站
2022-07-14 21:05:25
...
1. 支持向量分类机的基本原理
1.1 线性可分支持向量分类机
1.2 线性支持向量分类机
1.3 可分支持向量分类机
1.4 C-支持向量分类机
2. 支持向量机的matlab命令与应用实例
Matlab中支持向量机的命令有,训练支持向量机分类器的函数svmtrain,使用支持向量机分类的函数svmclssify,指定支持向量机函数使用的序列最小化参数函数svmsmoset。下面通过一个例子说明有关函数的使用。
3. 乳腺癌的诊断
3.1 问题提出
乳腺肿瘤通过穿刺采样进行分析可以确定其为良性或恶性。医学研究发现乳腺肿瘤病灶组织的细胞核显微图像的10个量化特征∶细胞核直径、质地、周长、面积、光滑度、紧密度、凹陷度、凹陷点数、对称度、断裂度与该肿瘤的性质有密切的关系。现试图根据已获得的实验数据建立起一种诊断乳腺肿瘤是良性还是恶性的方法。数据来自确诊的500个病例,每个病例的一组数据包括采样组织中各细胞核的这10个特征量的平均值、标准差和最坏值共30个数据,并将这种方法用于另外69名已做穿刺采样分析的患者。
这个问题实际上属于模式识别问题。什么是模式呢?广义地说,在自然界中可以观察的事物,如果能够区别它们是否相同或是否相似,都可以称之为模式。人们为了掌握客观事物,按事物相似的程度组成类别。模式识别的作用和目的就在于面对某一具体事物时将其正确地归入某一类别。
模式识别的方法很多,除了支持向量机外还有数理统计方法、聚类分析等方法。
3.2 支持向量机的分类模型
3.3 模型的求解
%原始数据cancerdata.txt可在网上下载,数据中的B替换成1,M替换成-1,X替换成2,
%删除了分割符*,替换后的数据命名成cancerdata2.txt
clc,clear
a=load('cancerdata2.txt');
a(:,1)=[]; %删除第一列病例号
gind=find(a(:,1)==1); %读出良性肿瘤的序号
bind=find(a(:,1)==-1); %读出恶性肿瘤的序号
training=a([1:500],[2:end]); %提出已知样本点的数据
training=training';
[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(train',group, 'Method','SMO', 'Kernel_Function','quadratic') %使用序列最小化方法训练支
%持向量机的分类器,如果使用二次规划的方法训练支持向量机则无法求解
sv_index=s.SupportVectorIndices' %返回支持向量的标号
beta=s.Alpha' %返回分类函数的权系数
b=s.Bias %返回分类函数的常数项
mean_and_std_trans=s.ScaleData %第1行返回的是已知样本点均值向量的相反数,第2行返回的是
%标准差向量的倒数
check=svmclassify(s,train'); %验证已知样本点
err_rate=1-sum(group==check)/length(group) %计算错判率
solution=svmclassify(s,xa'); %进行待判样本点分类
solution=solution'
sg=find(solution==1) %求待判样本点中的良性编号
sb=find(solution==-1) %求待判样本点中的恶性编号
原课本习题及代码
点击下载 【课本 + 源码 】 提取码:92h8