《机器学习》 SVM支持向量机 推导、参数解析、可视化实现

目录

一、SVM支持向量机

1、什么是SVM

例如:

2、SVM的主要特点是:

二、SVM方程

1、超平面方程

2、标签问题

3、决策函数:

符号函数:

整合:

4、距离问题

1)点到直线距离

2)点到平面距离

3)点到超平面距离

简写:

改进:加上正确性

分类正确时:

两个衡量指标:

5、如何找到最优超平面

1)找到距离超平面最近点

2)最大化这个距离

6、损失函数求解

7、超平面可视化

8、拉格朗日乘子法

9、整合函数与约束条件

10、修改目标函数

11、修改约束条件

12、整合结果

13、求解目标转化

1)对偶性质:

 2)求解方式:

14、求解SVM

三、SVM参数

1、用法

2、参数解析

1)C :惩罚因子【浮点数,默认为1.】【软间隔】

2.)kernel: 核函数【默认rbf(径向基核函数|高斯核函数)】

3)degree:【整型,默认3维】

4)gamma: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。

5)coef0:核函数中的独立项。

6)probability :是否启用概率估计。

7)cache_size :核函数cache缓存大小,默认为200MB

8)class_weight :类别的权重,字典形式传递。默认’balanced’

3、属性

1)support_vectors_  【支持向量】

2)n_support_  【每个类别支持向量的个数】

3)coef_  【参数w】

4)intercept_ 【偏置项参数b】

四、代码实现

1、文件内容格式

2、代码实现

调试模式可以看到:

3、运行结果

4、流程介绍


一、SVM支持向量机

1、什么是SVM

        支持向量机(Support Vector Machine,SVM)是一种监督学习算法,用于分类和回归问题

        在SVM中,我们将每个样本表示为在高维空间中的一个点,并尝试找到一个超平面来将不同类别的样本分开。超平面的选择是基于使两个类别之间的间隔最大化的原则。支持向量机通过最大化支持向量与超平面之间的最小间隔来实现这一点。

例如:

        很久以前的情人节,公主被魔鬼绑架了,王子要去救公主,魔鬼和他玩了一个游戏。魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。

后来,我们把这些球叫做【data->数据】

把棍子叫做【classifier->分类器】

最大间隙trick 叫做【optimization->最优化】

拍桌子叫做【kernelling->核函数】

这张纸叫做【hyperplane->超平面】

核心:选择一个最佳的一条线或者超平面

2、SVM的主要特点是:

         SVM可用于线性和非线性问题。对于非线性问题,SVM使用核函数来将样本映射到高维空间中。

         SVM是一种较好的分类器,具有较高的准确性。

        • SVM对于数据维度较高的情况下仍然有效。

        • SVM对于处理小样本问题也很有效。

        • SVM在处理具有多个特征的数据时表现良好。

二、SVM方程

1、超平面方程

2、标签问题

        在SVM中我们不用0和1来区分,使用+1和-1来区分,这样会更严格。假设超平面可以将训练的样本正确分类,那么对于任意样本如果 y= +1,则称为正例,y= -1,则称为负例。

3、决策函数:

        符号函数:

        整合:

4、距离问题

1)点到直线距离

2)点到平面距离

3)点到超平面距离

        简写:

        

        改进:加上正确性

        分类正确时:

        两个衡量指标:

                1、确信度:点到超平面的距离

                2、正确性:分类正确

5、如何找到最优超平面

1)找到距离超平面最近点

2)最大化这个距离

        使得离超平面最近的点到超平面的距离越近越好

6、损失函数求解

7、超平面可视化

        

8、拉格朗日乘子法

        求解没有约束条件的极值问题,形式如下:

        目标函数:        

9、整合函数与约束条件

10、修改目标函数

11、修改约束条件

12、整合结果

13、求解目标转化

        1)对偶性质:

        2)求解方式:

14、求解SVM

三、SVM参数

1、用法

class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)[source]

2、参数解析

1)C :惩罚因子【浮点数,默认为1.】【软间隔】

         (1) C越大,对误分类的惩罚增大,希望松弛变量接近0,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱;

        (2) C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

        ->>建议通过交叉验证来选择       

2.)kernel: 核函数【默认rbf(径向基核函数|高斯核函数)】

        可以选择线性(linear)、多项式(poly)、sigmoid

        ->>多数情况下选择rbf

3)degree:【整型,默认3维】

        多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。

        ->>按默认【选择rbf之后,此参数不起作用】

4)gamma: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。

        (1) 如果gamma是’auto’,那么实际系数1 / n_features,也就是数据如果有10个特征,那么gamma值维0.1。(sklearn0.21版本)

        (2) 在sklearn0.22版本中,默认为’scale’,此时gamma=1 / (n_features*X.var())#X.var()数据集所有值的方差。

                <1> gamma越大,过拟合风险越

                <2> gamma越小,过拟合风险越

->>建议通过交叉验证来选择

5)coef0:核函数中的独立项。

        多项式的偏置项。它只在’poly’和’sigmoid’中很重要。

6)probability 是否启用概率估计。

        允许在模型训练完成后,使用predict_proba方法来预测每个类别的概率,而不是仅仅给出类别的预测结果。必须在调用fit之前启用它,并且会减慢该方法的速度。默认为False

        ->>按默认即可【选择rbf之后,不起作用】

7)cache_size 核函数cache缓存大小,默认为200MB

        ->>不用调整

8)class_weight 类别的权重,字典形式传递。默认’balanced’

        ->>按默认设置

3、属性

1)support_vectors_  【支持向量】

        ->>以数组的形式储存

2)n_support_  【每个类别支持向量的个数】

        ->>int类型

3)coef_  【参数w】

        ->>数组的形式储存

4)intercept_ 【偏置项参数b】

        ->>数组的形式储存

四、代码实现

1、文件内容格式

        第一列为排序,最后一列为分类结果

2、代码实现


import pandas as pddata = pd.read_csv('iris.csv',header=None)  # 导入数据import matplotlib.pyplot as plt  # 导入绘图库data1 = data.iloc[:50,:]  # 取出前50行,左右的列
data2 = data.iloc[50:,:]  # 取出后50行,所有的列plt.scatter(data1[1],data1[3],marker='+')   # 绘制散点图,x轴为前50行的列名1,y轴为列号3,点的标记为+号
plt.scatter(data2[1],data2[3],marker='o')
# plt.show()from sklearn.svm import SVC   # 导入支持向量机库x = data.iloc[:,[1,3]]  # 取出原始数据的所有行,列名1和3两列
y = data.iloc[:,-1]  # 取出最后一列的所有数据svm = SVC(kernel='linear',C=float("inf"),random_state=0)  # 建立分类器,导入参数kernel核函数为线性的,并设置惩罚因子C为无穷大
svm.fit(x,y)  # 训练# 可视化svm结果
w = svm.coef_[0]   # 表示支持向量机的权重向量。对于线性SVM来说,权重向量可以用来描述决策边界的方向和斜率。
b = svm.intercept_[0]   # 表示支持向量机的截距(或偏差),即决策边界与原点的距离。import numpy as npx1 = np.linspace(0,7,300)  # 使用numpy中的函数linspace, 生成0到7之间300个连续数值的数组x2 = -(w[0]*x1+b)/w[1]   # x2 表示决策边界的 y 坐标值,通过计算得到。具体计算方法是使用决策边界的系数 w[0] 和 w[1],以及截距 b,根据决策边界的方程 w[0]*x + w[1]*y + b = 0 求解出 y 值。x3 = (1-(w[0]*x1+b))/w[1]  # x3和x4是决策边界上下两条辅助线的y坐标值,用于绘制支持向量。x4 = (-1-(w[0]*x1+b))/w[1]plt.plot(x1,x2,linewidth=2,color='r')   # 绘制折线图,x、y为坐标,线宽度为2,颜色为red
plt.plot(x1,x3,linewidth=1,color='r',linestyle='--')  # 在上述绘制的图像上方画条虚线
plt.plot(x1,x4,linewidth=1,color='r',linestyle='--')  # 在下方绘制虚线plt.xlim(4,7)  # x轴范围
plt.ylim(0,5)  # y轴范围vets = svm.support_vectors_  # 获取支持向量的坐标点
plt.scatter(vets[:,0],vets[:,1],c='b',marker='x')  # 绘制散点图,vets[:,0] 和 vets[:,1] 表示支持向量的 x 和 y 坐标,c='b' 设置颜色为蓝色,marker='x' 表示使用 X 做为散点标记。
plt.show()
调试模式可以看到:

3、运行结果

途中的圆点和+号点表示每个数据点,而在两条虚线上点叫支持向量,红实线和虚线是决策边界的直线和辅助线。

4、流程介绍

        使用SVM算法对鸢尾花数据集进行二分类,并绘制出决策边界支持向量的可视化图

        首先,通过pandas库读取名为"iris.csv"的数据集文件,存储在变量data中。然后,使用matplotlib.pyplot库绘制散点图,将数据集中前50个样本和后50个样本分别用不同的标记("+"和"o")表示。

        接下来,从数据集中取出特征列1和特征列3作为样本特征X,及最后一列作为标签y。然后,创建一个SVC分类器对象svm,使用线性核函数,并设置C参数为无穷,random_state为0,初始化支持向量机分类器。

        进行模型训练,调用svm的fit方法,传入特征数据X和标签数据y。获取模型的权重向量w和截距b,分别存储在变量w和b中

        接着,使用numpy库生成300个连续的数值,存储在变量x1中。根据决策边界的数学表达式计算x2,x3和x4的值。利用matplotlib.pyplot库的plot函数绘制决策边界的直线和辅助线。通过设置坐标轴的范围,使得图像能够更好地显示。获取支持向量的坐标,存储在变量vets中。使用scatter函数绘制支持向量的散点图。

        最后,调用show方法将图像显示出来。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

航空公司名字趣史:看看有趣又有意义的命名背后有什么玄机

上周“东海航空”事件引发了东方航空在社交媒体上的一系列被迫营业&#xff0c;因为媒体的乌龙报道误将“东海航空”简称为“东航”&#xff0c;甚至直接用错了图片。众号&#xff1a;标猿公司起名 给公司起个好名字 其实除了大部分以地域、国家命名的航空公司&#xff0c;还…

Android Auto推出全新Google助手设计

智能手机与汽车的无缝整合已成为现代驾驶的重要组成部分&#xff0c;而 Android Auto 一直在这一领域处于领先地位。谷歌通过不断推出新功能和更新&#xff0c;体现了其致力于提升 Android Auto 体验的决心。最近&#xff0c;Android Auto 引入了 Google助手的全新设计。 当系…

【Qt】多元素控件QTreeWidget

多元素控件QTreeWidget 使用QTreeWidget表示一个树型结构&#xff0c;里面的每一个元素都是QTreeWidgetItem&#xff0c;每个QTreeWidgetItem可以包含多个文本和图标&#xff0c;每个文本/图标表示一列。 可以给QTreeWidget设置顶层结构&#xff08;顶层节点可以有多个&#…

redis面试(二十二)读锁释放

假设现在已经有各种锁的重入什么的&#xff0c;那如何释放锁&#xff1f; 读锁读锁 假如说&#xff0c;同一个线程多次加读锁&#xff0c;或者不同的线程加了多个读锁 当前的锁结构长这样 anyLock: { “mode”: “read”, “UUID_01:threadId_01”: 2, “UUID_02:threadId_02…

去雾去雨算法

简单版 import cv2 import numpy as npdef dehaze(image):"""简单去雾算法&#xff0c;使用直方图均衡化来增强图像"""# 将图像转换为YUV颜色空间yuv_image cv2.cvtColor(image, cv2.COLOR_BGR2YUV)# 对Y通道&#xff08;亮度&#xff09;进行…

数据结构——队的基本操作

一、顺序队 队的用法&#xff1a;先进先出 跟平时我们遇到的大多情况一样&#xff0c;队的主要思想就是先进先出&#xff0c;比如我去食堂打饭&#xff0c;我先排那么就是我先打到饭咯 顺序队&#xff1a;其实说白了就是一块空间用两个指针去指向&#xff0c;为了实现先进先…

C语言指针重学

学习要纲:建议掌握 gdb调试(b ,d ,fin ,bt ,print ,awatch ,up ,down ,set pretty等) SourceInsight软件看代码(全局搜索 文件搜索等) git如何调取分支合并(git branch,git blame,git log,git pull,git reset --hard等) 等内容,下面是对于指针的一个重新学习. C语言的指针&…

AI工具 GPT 学术优化 (GPT Academic) 安装实践

GPT 学术优化 (GPT Academic)是一个综合的AI GPT工具包&#xff0c;可以完成各种gpt辅助的工作&#xff0c;比如代码解读、翻译、读论文等功能。官网&#xff1a;GitHub - binary-husky/gpt_academic: 为GPT/GLM等LLM大语言模型提供实用化交互接口&#xff0c;特别优化论文阅读…

2024年中国运筹学会运筹竞赛(数据驱动赛道)报名通知

竞赛组织 主办单位&#xff1a;中国运筹学会&#xff08;国家一级学会&#xff09; 承办单位&#xff1a;中国科学技术大学 支持单位&#xff1a;杉数科技、海康威视、中国科学技术大学管理学院、《运筹学学报》杂志 竞赛内容 本次竞赛&#xff08;本科生组&#xff09;由竞…

BOSS直聘财报:2024年第二季度净利润4.17亿元,同比上涨34.8%

8月28日美股盘前&#xff0c;BOSS直聘&#xff08;NASDAQ:BZ,HK:2076&#xff09;发布了2024年第二季度财报。在第二季度&#xff0c;公司经营效率不断提升&#xff0c;非通用会计准则下&#xff0c;取得净利润4.17亿元&#xff0c;同比上涨34.8%。 第二季度&#xff0c;公司持…

实习结束总结20240828

长达两个月的实习终于在今天结束了&#xff0c;不知怎的&#xff0c;心如止水&#xff0c;没有高兴&#xff0c;没有伤心&#xff0c;毫无波澜的内心甚至让自己都感觉可怕&#xff0c;也许&#xff0c;这就是成长吧。 硬件上&#xff1a; 1.cadence需要继续深入学习&#xff…

深圳保障房、商品房、小产权房子类型对比

摘要&#xff1a; 整理了我认知以内的深圳房子类型&#xff0c;有安居房&#xff0c;可售人才房&#xff0c;共有产权房、配售型保障房、商品房、统建楼、农民房的区别。如果数据存疑&#xff0c;可以多方对比论证&#xff0c;我也主要靠百度。 我发现我很多同事是非深户&#…

JS WebSocket 深度解析

JS WebSocket 深度解析 文章目录 JavaScript WebSocket 深度解析一、WebSocket 是什么二、JS 中如何使用 WebSocket1. 创建 WebSocket 对象2. 连接打开事件3. 监听消息事件4. 监听错误事件5. 关闭连接 三、WebSocket 包含哪些属性或方法 API1. 属性2. 方法 四、扩展与高级技巧1…

结果一。5.be doing表将来和 表 will的区别

be doing 表⽰近期、眼下就要发⽣的事情; will 表⽰将来的时间,则较远⼀些。如: He is going to write a letter tonight.He will write a book 。 be going to 表⽰根据主观判断将来肯定发⽣的事情。 will+ 动词原形表⽰⼀般将来时。 will ࿰

【xilinx】米联客ZYNQ MZ7100自学发现JTAG烧写失败

3-2-01米联客 2022 版 ZYNQ SOC SDK 入门篇 02 程序固化入门(SDK 方式) 生成了boot.bin 2.4.2 程序通过jtag烧不进去卡在performing erase operation 最终发现是spi的flash type 模式设置错误&#xff0c;文档和板卡没对应上 文档写的qspi-x4-single 实际用的qspi-x8-dual_par…

16:9横屏短视频素材库有哪些?横屏短视频素材网站分享

在当今这个视觉为王的时代&#xff0c;16:9横屏视频凭借其宽阔的画面和卓越的观看体验&#xff0c;已经成为许多视频创作者和营销专家的首选格式。如果你想制作出引人注目的横屏视频&#xff0c;选择高质量的视频素材库是关键。无论你是视频制作的老手还是刚入行的新手&#xf…

免费分享一套SpringBoot+Vue个人理财管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue个人理财管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue个人理财管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入而广泛的应用&am…

【图像去噪】论文复现:代替ReLU!Pytorch实现即插即用激活函数模块xUnit,并插入到DnCNN中实现xDnCNN!

请先看【专栏介绍文章】&#xff1a;【图像去噪&#xff08;Image Denoising&#xff09;】关于【图像去噪】专栏的相关说明&#xff0c;包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总&#xff08;更新中…

文章生成用这三款伪原创软件效果好

在当今信息爆炸的时代&#xff0c;无论是网站运营者、博主、作家还是学生&#xff0c;对文章的需求量越来越大。他们需要用大理的的原创文章来满足他们工作需求。然而&#xff0c;对于许多人来说&#xff0c;写作一篇优质的文章并非易事。这就产生了一种需求&#xff0c;那就是…

3 Python开发工具:VSCode+插件

本文是 Python 系列教程第 3 篇&#xff0c;完整系列请查看 Python 专栏。 Visual Studio Code的安装非常简单&#xff0c;就不放这里增加文章篇幅了。 相比PyCharm&#xff0c;VSCode更加轻量&#xff0c;启动速度快。并且搭配Python插件就能实现和Pycharm一样的代码提示、高…