(转载)支持向量机(support vector machine, SVM)的分类(matlab实现)

news/2023/11/28 17:31:03
        支持向量机(support vector machine,SVM)是一种新的机器学习方法,其基础是Vapnik 创建的统计学习理论(statistical learning theory,STL)。统计学习理论采用结构风险最小化(structural risk minimization,SRM)准则,在最小化样本点误差的同时,最小化结构风险,提高了模型的泛化能力,且没有数据维数的限制。在进行线性分类时,将分类面取在离两类样本距离较大的地方;进行非线性分类时通过高维空间变换,将非线性分类变成高维空间的线性分类问题。
        本章将详细介绍支持向量机的分类原理,并将其应用于基于乳腺组织电阻抗频谱特性的乳腺癌诊断。

1 理论基础

1.1 支持向量机分类原理

1.线性可分SVM
        支持向量机最初是研究线性可分问题而提出的,因此,这里先详细介绍线性SVM的基本思想及原理。
        值得一提的是,若数据集中的绝大多数样本是线性可分的,仅有少数几个样本(可能是异常点)导致寻找不到最优分类超平面。针对此类情况,通用的做法是引入松弛变量,并对式(28-7)中的优化目标及约束项进行修正,即
        2.线性不可分SVM
        在实际应用中,绝大多数问题都是非线性的,这时对于线性可分SVM是无能为力的。对于此类线性不可分问题,常用的方法是通过非线性映射φ:R?→H,将原输入空间的样本映射到高维的特征空间H中,再在高维特征空间H中构造最优分类超平面,如图28-2所示。另外,与线性可分SVM相同,考虑到通过非线性映射到高维特征空间后仍有因少量样本造成的线性不可分情况,亦考虑引入松弛变量。  

        3.多分类SVM
        由线性可分SVM和线性不可分SVM的原理可知,支持向量机仅限于处理二分类问题,对于多分类问题,须做进一步的改进。目前,构造多分类SVM的方法主要有两个:直接法和间接法。直接法通过修改待求解的优化问题,直接计算出用于多分类的分类函数,该方法计算量较大、求解过程复杂、花费时间较长,实现起来比较困难。间接法主要是通过组合多个二分类SVM来实现多分类SVM的构建,常见的方法有一对一(one-against-one)和一对多(one-against-all)两种,

1.2 libsvm软件包简介

        libsvm工具箱是台湾大学林智仁(C.JLin)等人开发的一套简单的、易于使用的SVM模式识别与回归机软件包,该软件包利用收敛性证明的成果改进算法,取得了很好的结果。libsvm共实现了5种类型的SVM:C-SVC,u-SVC,One Class-SVC,e-SVR和v-SVR等。下面将详细介绍libsvm软件包中主要函数的调用格式及注意事项。
        1.SVM训练函数svmtrain
        函数svmtrain用于创建一个SVM模型,其调用格式为
model= svmtrain(train_label,train_matrix,'libsvm_options');
        其中,train_label为训练集样本对应的类别标签;train_matrix为训练集样本的输入矩阵;libsvm_options为SVM模型的参数及其取值(具体的参数、意义及其取值请参考libsvm软件包的参数说明文档,此处不再赘述);model为训练好的SVM模型。值得一提的是,与BP神经网络及RBF神经网络不同,train_label及train_matrix为列向量(矩阵),每行对应一个训练样本。
        2.SVM预测函数svmpredict
        函数svmpredict用于利用已建立的SVM模型进行仿真预测,其调用格式为
[predict _label,accuracy]= svmpredict(test_label,test _matrix,model);
        其中,test_label为测试集样本对应的类别标签;test_matrix为测试集样本的输入矩阵;model为利用函数svmtrain训练好的SVM模型;predict_label为预测得到的测试集样本的类别标签;accuracy为测试集的分类正确率。需要说明的是,若测试集样本对应的类别标签test_label未知,为了符合函数svmpredict调用格式的要求,随机填写即可,在这种情况下,accuracy便没有具体的意义了,只需关注预测的类别标签predict_label即可。

2 案例背景

2.1 问题描述

        乳腺是女性身体的重要器官,乳腺疾病类别繁多,病因复杂,其中,乳腺癌是乳腺疾病的一 种,逐渐成为危害女性健康的主要恶性肿瘤之一。近年来,乳腺癌等乳腺疾病发病率呈明显上升趋势,被医学界称为“女性健康第一杀手”。
        相关研究结果表明,在直流状态下,不同生物组织表现出不同的电阻特性,生物组织电阻抗随着外加电信号频率的不同而表现出较大的差异。常见的电阻抗测量方法有:电阻抗频谱法(impedance spectroscopy)、阻抗扫描成像法(electrical impedance scanning,EIS)、电阻抗断层成像法(electrical impedance tomography,EIT)等。电阻抗频谱法的测量依据是生物组织的电阻抗随着外加电信号频率的不同而呈现出较大的差异。阻抗扫描成像法的原理是癌变组织与正常组织及良性肿瘤组织的电导(阻)率相比,存在着显著性的差异,从而使得均匀分布在组织外的外加电流或电压场产生畸变。电阻抗断层成像法则利用设于体表外周的电极阵列及微弱测量电流,提取相关特征并重新构造出截面的电阻抗特性图像。
        尽管目前的电阻抗测量结果还存在一些偏差,但相关研究已经证实癌变组织与正常组织的电阻抗特性存在显著的差异。因此,乳腺组织的电阻抗特征可以应用于乳腺癌的检查与诊断中。由于电阻抗测量法具有无创、廉价、操作简单、医生与病人易于接受等优点,随着测量技术的不断发展,电阻抗测量系统精度的日益提高,基于乳腺组织电阻抗特性的乳腺癌诊断技术势必会在临床检查与诊断中发挥其特有的作用。
        1996年,Jossinet研究小组利用电阻抗频谱法测量了来自64位妇女的106个乳腺样本的电阻抗特性,并将其分为6组:乳腺组织、结缔组织、脂肪组织、乳腺病、纤维腺瘤和乳腺癌,其中前3组是正常组织,后3组是病变组织(其中前2组是良性病变)。各组的乳腺样本数如表28-1所列。

2.2 解题思路及步骤

        依据问题描述中的要求,利用SVM建立乳腺癌诊断模型并对模型的性能进行评价,大体上可以分为以下几个步骤,如图28-5所示。

        1.产生训练集/测试集
        与前面几章类似,要求所产生的训练集样本数不宜太少,且应具有代表性。同时,由于libsvm软件包对输入的数据有格式上的要求,需要转换产生的训练集和测试集输入矩阵和类别标签以满足函数svmtrain和函数svmpredict调用格式的要求。
        2.创建/训练SVM诊断模型
        利用函数svmtrain可以方便地创建/训练一个SVM模型,值得一提的是,在创建之前,如若需要,还应对数据进行归一化。同时,由于不同核函数类型及参数对模型的泛化能力影响较大,因此,需要确定核函数类型及选择较好的参数。一般选用RBF核函数,且利用交叉验证方法选择较好的模型参数。
        3.仿真测试
        当SVM诊断模型训练好后,输入测试集的类别标签及输入矩阵函数svmpredict,便可以得到对应的预测类别标签及正确率。
        4.性能评价
        依据函数svmpredict返回的正确率,可以对建立的模型性能进行评价。若模型性能不理想,可以从以下3个方面进行调整:训练集的选择、核函数的选择及模型参数的取值,并在此基础上重新建立模型,直到模型的性能达到要求为止。

3 MATLAB程序实现

        利用MATLAB及libsvm软件包中提供的函数,可以方便地在MATLAB环境下实现上述步骤。

%% 清空环境变量
clear all
clc%% 导入数据
load BreastTissue_data.mat
% 随机产生训练集和测试集
n = randperm(size(matrix,1));
% 训练集——80个样本
train_matrix = matrix(n(1:80),:);
train_label = label(n(1:80),:);
% 测试集——26个样本
test_matrix = matrix(n(81:end),:);
test_label = label(n(81:end),:);%% 数据归一化
[Train_matrix,PS] = mapminmax(train_matrix');
Train_matrix = Train_matrix';
Test_matrix = mapminmax('apply',test_matrix',PS);
Test_matrix = Test_matrix';%% SVM创建/训练(RBF核函数)% 寻找最佳c/g参数——交叉验证方法
[c,g] = meshgrid(-10:0.2:10,-10:0.2:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;
bestc = 1;
bestg = 0.1;
bestacc = 0;
for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j))];cg(i,j) = svmtrain(train_label,Train_matrix,cmd);     if cg(i,j) > bestaccbestacc = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);end        if abs( cg(i,j)-bestacc )<=eps && bestc > 2^c(i,j) bestacc = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);end               end
end
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
% 创建/训练SVM模型
model = svmtrain(train_label,Train_matrix,cmd);%% SVM仿真测试
[predict_label_1,accuracy_1] = svmpredict(train_label,Train_matrix,model);
[predict_label_2,accuracy_2] = svmpredict(test_label,Test_matrix,model);
result_1 = [train_label predict_label_1];
result_2 = [test_label predict_label_2];%% 绘图
figure
plot(1:length(test_label),test_label,'r-*')
hold on
plot(1:length(test_label),predict_label_2,'b:o')
grid on
legend('真实类别','预测类别')
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集SVM预测结果对比(RBF核函数)';['accuracy = ' num2str(accuracy_2(1)) '%']};
title(string)

PS:如果提示:错误使用 svmtrain (line xxx) Y must be a vector or a character array.说明你的matlab中已经不包含libsvm工具箱以及svmtrain函数,改用fitcsvm即可。

        由于训练集和测试集是随机产生的,所以程序每次运行的结果都会不同。某次运行的测试集预测结果如表28-3所列。从表中可以清晰地看到,只有样本7和9预测错误,测试集的预测正确率达到92.31%(24/26)。且如前文所述,乳腺癌、纤维腺瘤和乳腺病(标签分别为1、2和3)为病变组织,乳腺组织、结缔组织和脂肪组织(标签分别为4、5、6)为正常组织,若仅判断为病变组织或正常组织(即二分类),则样本9则判断正确(将乳腺癌诊断为纤维腺瘤,同为病变组织),预测正确率将达到96.15%(25/26),这也从另外一个角度体现了SVM用于二分类的优越性。

4 延伸阅读

4.1 性能对比

        1.归一化对模型性能的影响
        为了评价归一化对模型性能的影响,这里尝试不对输入矩阵进行归一化,测试集的预测结果如表28-4所列。从表中可以看出,相比于归一化情况,未归一化的测试集预测正确率要低很多,仅为23.08%(6/26)。然而,需要说明的是,归一化并非一个不可或缺的处理步骤,针对具体问题应进行具体分析,从而决定是否要进行归一化。

        2.核函数对模型性能的影响
        保证其他模型参数不变,仅修改核函数的类型,选择不同核函数时的训练集及测试集预测正确率如表28-5所列。从表中可以清晰地看到,线性核函数和Sigmoid核函数对应的正确率较低,而RBF核函数和多项式核函数对应的训练集预测正确率相当,但从模型的泛化能力考虑,即同时衡量测试集的预测正确率,则RBF核函数对应的模型性能最佳。因此,如前文所述,一般采用默认设置的RBF核函数进行建模。

4.2 案例延伸

        近年来,越来越多的专家与学者致力于SVM方面的研究,取得了许多进展。一方面,针对目前的SVM训练算法复杂度较大、计算时间较长等问题,不少学者提出了新的训练算法;另一方面,一些专家尝试着寻找更简单、更有效的核函数以简化运算并提升SVM的性能。同时,为了解决模型参数大多依靠经验选取或者大范围网格搜索耗时较长等问题,不少学者引入遗传算法、粒子群算法等优化算法,从而自动寻找最佳的模型参数使得模型的性能达到最优。


http://www.ppmy.cn/news/554990.html

相关文章

ADRC自抗扰控制(CODESYS平台完整源代码)

博途PLC ADRC完整源代码请参考下面文章链接: 博途PLC ADRC自抗扰控制完整SCL源代码_adrc控制算法代码_RXXW_Dor的博客-CSDN博客关于自抗扰控制框图可以参看专栏的其它文章,这里不再讲解具体算法过程,详细了解也可以参看韩京清研究员写的 《ADRC自抗扰》一书。_adrc控制算法…

栈的应用——括号匹配、表达式求值、递归

目录 一、栈在括号匹配中的应用逻辑实现代码实现 二、栈在表达式求值中的应用手算实现代码实现 三、栈在递归中的应用逻辑实现代码实现 一、栈在括号匹配中的应用 括号匹配&#xff0c;顾名思义。若括号按照正确的格式嵌套&#xff0c;则可正确匹配&#xff0c;例如([])&#…

冒泡排序、选择排序、插入排序

冒泡排序 思路&#xff1a; 每次循环比较相邻两个元素&#xff0c;如果左边元素>右边元素&#xff0c;则交换位置。结果&#xff1a;将最大值放到最右边&#xff1b;一次循环过后&#xff0c;左边无序区域减少一个数&#xff0c;右边有序取增加一个数&#xff1b;序列长度…

一键重装系统工具哪个好哪个更好用——好系统重装助手

现在网上很多重装系统大师,究竟系统重装大师哪个好呢?那必须是好系统重装助手&#xff0c;它能快速实现一键重装系统.好系统重装助手软件是一款好评的很高的装机软件&#xff0c;里面集合了U盘启动工具&#xff0c;一键重装&#xff0c;原版安装的工具与一体。可以说有了好系统…

【Windows】Windows装机软件

快捷启动工具 Wox局域网文件传输 飞鸽传书编辑器&#xff1a;Sublime Text3Markdown Editor/Reader : Typora视频播放器: QQ 影音 火绒安全 官网, 专业, 简洁, 个性化功能, 比如屏蔽流氓弹窗. 视频一波流 QQPlayer: 本地视频播放器 干净&#xff0c;小巧&#xff0c; 纯洁…

怎么用好系统重装助手装机?

对于很多电脑小白来说&#xff0c;重装电脑系统是件困难又麻烦的事&#xff0c;所以大都选择去修电脑的地方花钱找人重装电脑系统&#xff0c;一次就要三五十&#xff0c;有的甚至要价一百。 其实&#xff0c;现在已经有许多的软件工具来协助我们重装电脑系统&#xff0c;好系…

使用冷门装机助手/流氓软件导致被捆绑安装各种奇奇怪怪软件的问题

本文首发于 lzcBlog&#xff0c;作者 lzc256&#xff0c;原文地址&#xff1a;https://www.lzcapp.cn/archives/600/。推荐转移到原文阅读&#xff0c;体验更佳。本文不采用 Creative Commons 版权模板&#xff0c;转载协议请以原文文尾为准。 前几天一个急用的软件没法在 Deep…

Reentrantreadwritelock应用和原理

目录 一、介绍 二、应用 三、原理 一、介绍 当读操作远远高于写操作时&#xff0c;这时候使用读写锁让读-读可以并发&#xff0c;提高性能 类似于数据库中的共享锁 select...from...lock in share mode 提供一个数据容器类内部分别使用读锁保护数据的read()方法&#x…

重装助手安装系统教程

电脑反应慢&#xff0c;软件运行卡顿&#xff0c;关键时刻无响应&#xff01;&#xff01;&#xff01;心情瞬间不好了&#xff0c;重装大法好&#xff0c;扔掉臃肿的旧系统&#xff01;安装好系统装机助手&#xff0c;体验一个不一样的系统&#xff01;今天我们就带大家了解一…

【群智能算法】基于浣熊优化算法的工程应用问题优化【Matlab代码#43】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 原始COA算法1.1 开发阶段1.2 探索阶段 2. 工程应用问题优化2.1 压力容器设计2.2 拉压弹簧设计 3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章…

【差旅-游记】记一次海南出差

哈喽&#xff0c;大家好&#xff01;我是雷工&#xff01; 这篇不是技术分享&#xff0c;是篇差旅记录。 最近出差去了一次海南&#xff0c;应该算得上我目前出差去过最远的地方了&#xff0c;也是我第一次去海南&#xff0c;还是蛮有新鲜感的&#xff0c;因此记录下此次差旅。…

车载软件架构 —— 闲聊几句AUTOSAR OS(六)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最…

西湖大学博导:都说不唯论文,那我们发表论文是为了什么?

本文来源&#xff1a;西湖大学WestlakeUniversity、科学网&#xff1b;作者&#xff1a;黄嘉兴&#xff0c;编辑&#xff1a;募格学术 编者按&#xff1a; Undergraduate: I want papers, more papers, more more papers. Graduate:I want papers, more papers, JACS papers. P…

YOLO系列目标检测数据集大全

YOLO系列目标检测数据集大全 目标检测数据集无人机检测数据集飞机检测飞鸟检测数据集人脸和口罩检测数据集安全帽检测数据集和训练权重电力巡检安全帽检测不同颜色的安全帽检测数据集和训练模型自动驾驶场景KITTI汽车检测数据集火焰检测数据集和训练模型烟雾识别数据集和模型火…

kurento-media-server和cotrun打洞的服务器的安装及部署,实现RTSP转WebRTC视频流播放

一、Kurento介绍 Kurento的主要组件是Kurento媒体服务器&#xff08;KMS&#xff09;&#xff0c;负责媒体传输&#xff0c;处理&#xff0c;记录和播放。KMS建立在出色的GStreamer多媒体库之上&#xff0c;并提供以下功能&#xff1a; 网络流协议&#xff0c;包括HTTP&#x…

如何设计并实现传统小区智能化

目录 1、访客系统 2、可视对讲系统 3、视频控制系统 4、周界防范报警系统 5、停车场管理系统 6、出入品管理系统 7、电子巡更管理系统 8、多媒体信息引导发布系统 8.1、液晶电视显示系统 8.2、LED显示系统 9、公共广播系统 10、有线电视系统 11、电话、带宽网…

JavaSSM框架学完,手写一个汽车租赁系统,真NE!

文章目录 适合人群项目介绍项目整体功能图涉及的技术数据库设计一.业务表1&#xff0c;客户表(bus_customers)2&#xff0c;车辆表(bus_cars)3&#xff0c;出租表(bus_rents)4&#xff0c;还车表(bus_checks) 二&#xff0c;系统表(RBAC权限管理)1.菜单表(sys_menus)2. 用户表(…

CSS基础学习--26 渐变(Gradients)

CSS3 渐变&#xff08;gradients&#xff09;可以让你在两个或多个指定的颜色之间显示平稳的过渡。以前&#xff0c;你必须使用图像来实现这些效果。但是&#xff0c;通过使用 CSS3 渐变&#xff08;gradients&#xff09;&#xff0c;你可以减少下载的时间和宽带的使用。此外&…

工作能力强的人有哪些共同特征?

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 本文整理自知乎问答&#xff0c;仅用于学术分享&#xff0c;著作权归作者所有。如有侵权&#xff0c;请联系后台作删文处理。 观点一 作者&#xff5c;马力和知群 https://www.zhihu.com/question/28880482/a…

推荐!最适合初学者的18个经典开源计算机视觉项目

英语原文&#xff1a;18 All-Time Classic Open Source Computer Vision Projects for Beginners 翻译&#xff1a;雷锋字幕组&#xff08;小哲&#xff09; 概述 开源计算机视觉项目是在深度学习领域中获得一席之地的绝佳路径 开始学习这18个非常受欢迎的经典开源计算机视觉…
最新文章