支持向量机(SVM)案例分析

news2024/9/24 3:18:34

支持向量机(support vector machines, SVM)是一种二分类模型,所谓二分类模型是指比如有很多特征(自变量X)对另外一个标签项(因变量Y)的分类作用关系,比如当前有很多特征,包括身高、年龄、学历、收入、教育年限等共5项,因变量为‘是否吸烟’,‘是否吸烟’仅包括两项,吸烟和不吸烟。那么该5个特征项对于‘是否吸烟’的分类情况的作用关系研究,则称为‘二分类模型’,但事实上很多时候标签项(因变量Y)有很多个类别,比如某个标签项Y为‘菜系偏好’,中国菜系有很多,包括川菜、鲁菜、粤菜、闽菜、苏菜、浙菜、湘菜和徽菜共计8类,此时则需要进行‘多分类决策函数’转化,简单理解为两两类别(8个中任意选择2)分别建立SVM模型,然后进行组合使用。

机器学习算法常见算法中包括决策树、随机森林、贝叶斯等,上述均有良好的可解释性,比如决策树是将特征按分割点不停地划分出类别,随机森林是多个决策树模型,贝叶斯模型是利用贝叶斯概率原理进行计算。与上述不同,支持向量机模型是利用运筹规划约束求最优解,而此最优解是一个空间平面,此空间平面可以结合特征项,将‘吸烟’和‘不吸烟’两类完全地分开,寻找该空间平面即是支持向量机的核心算法原理。

支持向量机的计算原理复杂,但对其通俗地理解并不复杂,只需要知道其需要求解出‘空间平面’,该‘空间平面’可以把不同的标签项(因变量Y)类别特别明显的划分开即可。类似其它机器学习算法,支持向量机的构建步骤上,一般也需要先对数据进行量纲化处理、设置训练数据和测试数据比例、设置相关参数调优,最终实现在训练数据上有着良好表现,并且测试数据上也有着良好表现即可。


支持向量机模型案例

1 背景

本部分支持向量机使用的‘鸢尾花分类数据集’进行案例演示,其共为150个样本,包括4个特征属性(4个自变量X),以及标签(因变量Y)为鸢尾花卉类别,共包括3个类别分别是刚毛鸢尾花、变色鸢尾花和弗吉尼亚鸢尾花(下称A、B、C三类)。

2 理论

支持向量机模型的原理上,其可见下图。

比如红色表示“吸烟”,黄色表示“不吸烟”,那么如何找到一个平面最大化的将两类群体分开,如上图所示,分开有很多种方式,左侧也可以分开,右侧也能分开。但明显的,右侧会“分的更开”,因而如何寻找到这样的一个空间平面,让标签项各类别最为明显的分开,此算法过程即为支持向量机。将点分开时,离平面最近的点要尽可能的远,比如右侧时A点和B点离平面最近,那么算法需要想办法让该类点尽可能地远离平面,这样就称为“分的更好”。左侧时挨着平面最近的两个点离平面太近,所以右侧的分类更好。

与此同时,理论上可以找到‘空间平面’,将点彻底完全地分开,但此种情况并没有用,因为它只是数学上彻底地分开,但对真实数据业务并没有帮助,与此同时,数学计算上如果尽可能地让点分开,那么很容易出现‘过拟合’现象,即训练数据时模型构建完美,但测试数据上的表现糟糕,因而通过可对此类情况进行惩罚,即设置‘误差项惩罚系数值’。另外,为构建出空间平面,还需要使用到非线性函数,SVM模型时称‘核函数’,其用用于将特征从低维(比如二维XY轴平面)向高维空间转换,并且对其进行一定参数设置,以寻找较优模型。

结合支持向量机的原理情况,其涉及以下参数,如下:

上述参数中,误差项惩罚系数是一个惩罚值,该值越大时训练数据越容易表现良好,但越容易产生‘过拟合’现象。参数调整时,如果发现有‘过拟合’情况,建议将该值往下设置,SPSSAU默认该值为1(已经较小)。核函数是SVM算法时,将低维向高维转化的‘助手’,建议设置方式如下:

核函数系数值(也称Gamma值),其意义相对较小,通常使用默认值即可;

核函数最高次幂:如果使用多项式核函数时,最高次幂越大,模型效果越好,但更容易带来‘过拟合’问题,建议设置为2、3或者4进行对比比(默认该值为3);

多分类决策函数:基础的的SVM只处理二分类问题,如果标签项(因变量Y)有多个类别,比如8大菜系共8个类别时,那么算法上有两种方式,第1种是每个类别与余下类别(作为反例)建立1个SVM然后整合(共计建立8个SVM),即ovr法(1对其余法),还有一种方式是两两配对法即ovo法,8个类别形成8*(8-1)/2=28个配对组合,即进行28次SVM然后整合,该项默认值为ovr法。

最后:模型收敛参数值和最大迭代次数这两项,其为算法内部迭代求最优解的参数值,正常情况下不用设置。

3 操作

本例子操作如下:

训练集比例默认选择为:0.8即80%(150*0.8=120个样本)进行训练支持向量机模型,余下20%即30个样本(测试数据)用于模型的验证。需要注意的是SVM时涉及距离计算,因而需要对特征进行量纲处理,通常量纲处理方式为正态标准化,此处理目的是让数据保持一致性量纲。当然也可使用其它的量纲方式,比如区间化,归一化等。

接着对参数设置如下:

误差项惩罚系数值为1,如果希望训练集数据有着更好的表现,则可将其设置更高,但一定需要注意此时测试集的效果情况,否则就会出现‘过拟合’现象。本案例数据仅4个特征X,训练数据量为120个,因而使用高斯核较为适合,核函数系数值默认。多分类决策函数上使用ovr(即一对多余法),这样会减少运行时间加快运行速度。模型收敛参数和最大迭代次数保持默认值。

4 SPSSAU输出结果

SPSSAU共输出5项结果,依次为基本信息汇总,训练集或测试集模型评估结果,测试集结果混淆矩阵,模型汇总表和模型代码,如下说明:

上述表格中,基本信息汇总展示出因变量Y(标签项)的分类分布情况,模型评估结果(包括训练集或测试集)用于模型的拟合效果判断,尤其是测试集的拟合效果,以及提供测试集数据的混淆矩阵结果;模型汇总表格将各类参数值进行汇总,并且在最后附录SVM模型构建的核心代码。

5文字分析

接下来针对最重要的模型拟合情况进行说明,如下表格:

上表格中分别针对训练集和测试集,提供四个评估指标,分别是精确率、召回率、f1-scrore、准确率,以及平均指标和样本量指标等,如下表格说明:

具体上述具体指标的解读,可见决策树模型帮助手册,通常使用F1-score值进行评估即可,训练数据时f1-score值为0.96,并且测试集数据也保持着0.94高分,二者比较接近,因而意味着应该不存在‘过拟合’现象,而且模型良好。

接着进一步查看测试数据的‘混淆矩阵’,即模型预测和事实情况的交叉集合,如下图:

‘混淆矩阵’时,右下三角对角线的值越大越好,其表示预测值和真实值完全一致。上图中仅B类中2个样本被判断成C类,其余全部正确,意味着本次支持向量机模型在测试数据上表现良好。最后SPSSAU输出模型参数信息值,如下表格:

上述参数信息仅为再次输出汇总,并无其它目的,最后SPSSAU输出使用python中slearn包构建本次支持向量机模型的核心代码如下:

model = svm.SVC(C=1.0, kernel=rbf, gamma=scale, tol = 0.001, max_iter=2000, decision_function_shape=ovr)

model.fit(x_train, y_train)

6 剖析

涉及以下几个关键点,分别如下:

  • 支持向量机模型时是否需要标准化处理?
    一般建议是进行标准化处理,因为SVM模型时涉及距离计算,需要量纲化数据处理,通常使用正态标准化处理方式即可。
  • 保存预测值
    保存预测值时,SPSSAU会新生成一个标题用于存储模型预测的类别信息,其数字的意义与模型中标签项(因变量Y)的数字保持一致意义。
  • SPSSAU进行支持向量机模型构建时,自变量X(特征项)中包括定类数据如何处理?
    支持向量机模型时本身并不单独针对定类数据处理,如果有定类数据,建议对其哑变量处理后放入,关于哑变量可点击查看。
    http://spssau.com/front/spssau/helps/otherdocuments/dummy.html
  • SPSSAU中随机模型合格的判断标准是什么?
    机器学习模型中,通常均为先使用训练数据训练模型,然后使用测试数据测试模型效果。通常判断标准为训练模型具有良好的拟合效果,同时测试模型也有良好的拟合效果。机器学习模型中很容易出现‘过拟合’现象即假的好结果,因而一定需要重点关注测试数据的拟合效果。针对单一模型,可通过变换参数调优,与此同时,可使用多种机器学习模型,比如使用决策树、随机森林、神经网络等,综合对比选择最优模型。
  • 支持向量机SVM更多参考资料?
    更多关于SVM的资料,可通过sklearn官方手册查看,点击查看。
    https://scikit-learn.org/stable/modules/svm.html#svm-classification
  • SPSSAU进行SVM支持向量机时提示数据质量异常?

当前SVM支持分类任务,需要确保标签项(因变量Y)为定类数据,如果为定量连续数据,也或者样本量较少(或者非会员仅分析前100个样本)时可能出现无法计算因而提示数据质量异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 解决数据重复添加

1. sql语句: insert ignore into insert ignore into 表名 (xx1,xx2,xx3) VALUES (#{xx1},#{xx2},#{xx3}) 2. 复合索引

Vue基础入门---详细简介

一,对Vue的概念 1.1 什么是Vue ? 一种流行的JavaScript前端框架,用于构建交互式的Web应用程序。它以简洁、灵活和高效的特性而受到广泛欢迎。Vue采用了一种响应式的数据绑定机制,使得数据的变化能够自动更新相关的DOM元素&#x…

无涯教程-JavaScript - COMBIN函数

描述 COMBIN函数返回给定数量的项目的组合数量。使用COMBIN确定给定数量的项目的组总数。 语法 COMBIN (number, number_chosen)争论 Argument描述Required/OptionalNumberThe number of items.RequiredNumber_chosenThe number of items in each combination.Required No…

人脸识别三部曲

人脸识别三部曲 首先看目录结构图像信息采集 采集图片.py模型训练 训练模型.py人脸识别 人脸识别.py效果 首先看目录结构 引用文121本 opencv │ 采集图片.py │ 训练模型.py │ 人脸识别.py │ └───trainer │ │ trainer.yml │ └───data │ └──…

如何把VRTE的应用程序在Ubuntu上跑起来?

1、rvbuild -d project_name 20 产生一个文件夹vrte 如果此时直接将vrte文件夹打包放到Ubuntu的 /opt目录内 执行./opt/vrte/usr/bin/exmd.sh 会出现如下错误: 但是查看文件发现这个文件是存在的。 系统找不到文件是因为找不到对应的ld库 从VRTE里面拷贝一个库…

css动画旋转分层旋转图

1.代码 <template><view class"animations"><view class"animation animation1"><view class"animate1"></view><view class"animate2"></view><view class"animate3">&l…

九鼎开发板Uboot开发问题——sd_fusing运行异常

在学习朱有鹏老师的嵌入式Linux——Uboot移植&#xff0c;运行sd_fusing.sh脚本出现mkfs.fat命令参数问题&#xff0c;一直提示"No device specified." 脚本内容&#xff1a; # # Copyright (C) 2010 Samsung Electronics Co., Ltd. # http://www.sams…

多目标优化算法:基于非支配排序的霸王龙优化算法(NSTROA)MATLAB

一、霸王龙优化算法 霸王龙优化算法&#xff08;Tyrannosaurus optimization&#xff0c;TROA&#xff09;由Venkata Satya Durga Manohar Sahu等人于2023年提出&#xff0c;该算法模拟霸王龙的狩猎行为&#xff0c;具有搜索速度快等优势。 霸王龙属于暴龙超科的暴龙属&#…

粘连物体分割

threshold-全局固定阈值分割 Binary Threshold-自动全局阈值分割 dyn_threshold-局部动态阈值分割 var_threshold算子-均值和标准偏差局部阈值分割 dual_threshold-双重阈值分割&#xff08;有符号图像的阈值算子&#xff09; auto_threshold-自动全局阈值分割 fast_threshold-…

Java面试_并发编程_线程基础

Java面试_并发编程_线程基础 线程基础线程和进程的区别(出现频率: 3⭐)并行和并发的区别(出现频率: 2⭐)线程的创建(出现频率: 4⭐)线程的状态(出现频率: 4⭐)让线程按顺序执行(出现频率: 3⭐)notify()和notifyAll()有什么区别(出现频率: 2⭐)wait方法和sleep方法的区别(出现频…

Ubuntu下 Docker、Docker Compose 的安装教程

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 Docker Compose是用于定义…

springboot班级综合测评管理系统springboot005

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

优思学院|六西格玛与敏捷管理两者有何不同?

如果你正在寻找提高组织流程和降低缺陷或错误的方法&#xff0c;六西格玛和敏捷是两种你可能会考虑的方法。这两种方法有着不同的重点和应用领域。在这篇文章中&#xff0c;我们将深入研究六西格玛和敏捷&#xff0c;并探讨它们之间的差异。 什么是六西格玛&#xff1f; 六西…

MySQL数据库索引优化难点与面试点

MySQL数据库索引优化难点与面试点 什么是MySQL索引&#xff1f; 索引的MySQL官方定义&#xff1a;索引是帮助MySQL快速获取数据的数据结构。 动力节点原文&#xff1a; MysQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MysQL在存储数据之外&#xff0c;数据…

Qt5开发及实例V2.0-第二章Qt模板库工具类及控件

Qt5开发及实例V2.0-第二章Qt模板库工具类及控件 第2章 Qt 5模板库、工具类及控件2.1 字符串类2.1.1 操作字符串2.1.2 查询字符串数据2.1.3 字符串的转换 2.2 容器类2.2.1 QList类、QLinkedList类和QVector类2.2.2 QMap类和QHash类 2.3 QVariant类2.4 算法及正则表达式2.4.1 Qt …

Spring编程常见错误50例-Spring Bean依赖注入常见错误(下)

Value没有注入预期的值 问题 对于Value可以装配多种类型的数据&#xff1a; 装配对象&#xff1a; Value("#{student}") private Student student;Bean public Student student(){Student student createStudent(1, "xie");return student; }装配字符…

【Nuxt3】Vue3 + Element-plus 打包后报错 @popperjs/core

问题&#xff1a; 更新 Element-plus 后&#xff0c;运行时需要安装 popperjs/core 依赖。 如果正常执行 npm install popperjs/core &#xff0c;那么&#xff0c;打包时&#xff0c;就会出现下面报错。 Named export ‘placements’ not found. The requested module ‘poppe…

Python | 为FastAPI后端服务添加API Key认证(分别基于路径传参和header两种方式且swagger文档友好支持)

文章目录 01 前言02 路径传参方式添加API Key2.1 完整代码2.2 请求示例2.3 swagger文档测试 03 请求头Header方式传入API Key&#xff08;推荐&#xff09;3.1 完整代码3.2 请求示例3.3 swagger文档测试 01 前言 FastAPI&#xff0c;如其名所示&#xff0c;是一个极为高效的框…

云计算的未来:云原生架构和自动化运维的崭露头角

文章目录 云计算的演进云原生架构1. 容器化2. 微服务3. 自动化部署和扩展4. 故障恢复 自动化运维1. 基础设施即代码&#xff08;IaC&#xff09;2. 运维自动化示例&#xff1a;使用Ansible自动化配置管理 3. 自动化监控和报警 未来展望1. 更多的自动化2. 多云混合云3. 边缘计算…

华为+苹果的“科技春晚”背后,“自主创新+实在技术”遥遥领先!

过去的24小时里&#xff0c;科技春晚迎来“双主角”&#xff1a;12日下午&#xff0c;华为发布会&#xff0c;13日凌晨&#xff0c;苹果发布会。 尽管苹果一向以其创新和高端的形象而闻名&#xff0c;但与昔日苹果发布会后有关新品的词条霸屏微博热搜不同&#xff0c;当天在发…