《机器学习》 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.mzph.cn/diannao/52639.shtml

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

相关文章

关于喷墨打印:液滴喷射及基材影响的那些事儿

大家好&#xff0c;今天我们来探讨一篇关于液滴喷射在生物应用中相关知识的文章——《Understanding droplet jetting on varying substrate for biological applications》是发表于《International Journal of Bioprinting》。在生物打印领域&#xff0c;了解液滴在不同基材上…

【Pytorch】Linear 层,举例:相机参数和Instance Feaure通过Linear层生成Group Weights

背景 看论文看到这个pipeline&#xff0c;对于相机参数和Instance Fature 的融合有点兴趣&#xff0c;研究如下&#xff1a; Linear 层 Linear 层是最基本的神经网络层之一&#xff0c;也称为全连接层。它将输入与每个输出神经元完全连接。每个连接都有一个权重和一个偏置。…

elasticsearch快照存储到linux本地路径或分布式存储系统mioio

一、使用linux本地目录做快照存储 1.编辑 elasticsearch.yml 文件&#xff0c;添加以下配置&#xff1a; path.repo: ["/path/to/your/backup/dir"]2.创建一个文件系统类型的快照仓库 PUT /_snapshot/my_local_repository {"type": "fs",&quo…

磷酸二氢钾溶液净化除杂,除重金属

磷酸二氢锂&#xff0c;化学式LiH2PO4&#xff0c;相对分子质量103.93&#xff0c;白色结晶或粉末。熔点大于100℃&#xff0c;相对密度2.5g/ml。每100毫升水中的溶解克数&#xff1a;126g/0℃。 锂离子二次电池在手提电脑、移动通讯、电动工具等方面具有广泛应用&#xff0c;在…

使用VScode的Git版本控制功能(图文版)

☁️ 前言 今天让我来手把手教你简单入门VScode自带的Git版本控制。 &#x1f389; 初始化仓库 初始化仓库之后&#xff0c;仓库里的文件发生了任何改动都会有相应的提示&#xff0c;这对于我们开发和维护项目非常有帮助。 &#x1f389;提交更改 初始化仓库之后&#xff…

基于web的停车场管理系统设计与实现-计算机毕设 附源码 16856

基于web的停车场管理系统设计与实现 目 录 1 绪论 1.1 研究背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分…

【自动化】考试答题自动化完成答案,如何实现100%正确呢

一、科目仿真考试不能自动答题 我的答案是可以的&#xff0c;电脑程序可以模拟人的操作完成所有的答题并提交结束考试 二、分析页面内容 完成一个题目&#xff0c;包括判断题&#xff0c;对与错2选1答案&#xff0c;单选题ABCD4选1答案&#xff0c;多选题大家想一想 F12查看按…

基于layui实现简单的万智牌生命计数器页面

对照手机App“旅法师营地”的万智牌生命计数器窗口&#xff08;如下图所示&#xff09;&#xff0c;使用layui、jQuery等实现简单的万智牌生命计数器页面。   主要实现的功能如下&#xff1a;   1&#xff09;点击左右两侧的-1、1、-5、5区域更新左右两侧生命值&#xff1…

【MATLAB学习笔记】绘图——自定义标记(Marker)形状,实现与MATLAB自带标记基本一致的功能(自适应缩放、自适应裁剪)

目录 前言自定义标记函数自定义标记函数的说明纵横比调整将图形大小按磅数设置平移标记点绘制标记点边界标记点不裁剪 拓展功能——标记点自适应绘图区的缩放绘图区缩放回调函数标记点大小自适应标记点裁剪自适应 示例基本绘图自定义标记函数的使用 总代码主函数自定义标记函数…

入门STM32--按键输入

上一篇博客我们介绍了如何使用GPIO配置跑马灯&#xff0c;根据GPIO的基本结构图&#xff0c;我们能够发现&#xff0c;他肯定不单单有输出的功能&#xff0c;肯定可以检测IO上的电平变化&#xff0c;实际上就是输入的功能。 1.按键 在大多数情况下&#xff0c;按键是一种简单的…

【第54课】XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

1259:【例9.3】求最长不下降序列 动态规划

1259&#xff1a;【例9.3】求最长不下降序列 题目链接 【输入样例】 【输入样例】 14 13 7 9 16 38 24 37 18 44 19 21 22 63 15【输出样例】 max8 7 9 16 18 19 21 22 63思路&#xff1a; 确定状态&#xff1a; a[n]数组放数据&#xff0c; dp[n]数组放第i个位子前最长子序…

kafka发送消息-生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略)

生产者发送消息的分区策略&#xff08;消息发送到哪个分区中&#xff1f;是什么策略&#xff09; 1、默认策略&#xff0c;程序自动计算并指定分区1.1、指定key&#xff0c;不指定分区1.2、不指定key&#xff0c;不指定分区 2、轮询分配策略RoundRobinPartitioner2.1、创建配置…

Linux网络:网络基础

Linux网络&#xff1a;网络基础 一、网络诞生背景及产生的诸多问题1. 1 网络诞生背景1.2 网络诞生面临的困境 二、网络协议栈&#xff08;OSI七层模型、CP/IP五层模型&#xff09;2.1 TCP/IP五层(或四层)模型 三、网络和系统关系四、网络传输流程4.1 同一个局域网中的两台主机进…

折腾 Quickwit,Rust 编写的分布式搜索引擎-官方教程

快速上手 在本快速入门指南中&#xff0c;我们将安装 Quickwit&#xff0c;创建一个索引&#xff0c;添加文档&#xff0c;最后执行搜索查询。本指南中使用的所有 Quickwit 命令都在 CLI 参考文档 中进行了记录。 https://quickwit.io/docs/main-branch/reference/cli 使用 Qui…

flutter 中 ssl 双向证书校验

SSL 证书&#xff1a; 在处理 https 请求的时候&#xff0c;通常可以使用 中间人攻击的方式 获取 https 请求以及响应参数。应为通常我们是 SSL 单向认证&#xff0c;服务器并没有验证我们的客户端的证书。为了防止这种中间人攻击的情况。我么可以通过 ssl 双向认证的方式。即…

用Python实现时间序列模型实战——Day1:时间序列的基本概念

一、学习内容 1. 时间序列数据的定义与特点 定义&#xff1a; 时间序列数据是一组按时间顺序排列的观测值。时间序列的每个观测值都与特定时间点相关联。例如&#xff0c;气温每天的记录、股票每日的收盘价等。 特点&#xff1a; 时间依赖性&#xff1a;时间序列数据的一个…

8.27-dockerfile的应用+私有仓库的创建

一、dockerfile应用 通过dockerfile创建⼀个在启动容器时&#xff0c;就可以启动httpd服务的镜像 1.步骤 : 1.创建⼀个⽬录&#xff0c;⽤于存储Docker file所使⽤的⽂件2.在此⽬录中创建Docker file⽂件&#xff0c;以及镜像制作所使⽤的⽂件3.使⽤docker build创建镜像4.使…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

全新的大语言模型Grok-2,最新测评!!

埃隆马斯克再次引发轰动&#xff0c;他旗下的xAI公司推出了全新的大语言模型Grok-2&#xff01; 最新的Grok-2测试版已经发布&#xff0c;用户可以在&#x1d54f;平台上体验小版本的Grok-2 mini。 马斯克还通过一种谜语般的方式揭开了困扰大模型社区一个多月的谜团&#xff1a…