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

news2024/9/23 17:14:37

目录

一、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 pd

data = 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 np

x1 = 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.coloradmin.cn/o/2081428.html

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

相关文章

Python使用Tesseract OCR识别文字

Tesseract-OCR是一款由Google维护的开源光学字符识别&#xff08;OCR&#xff09;引擎&#xff0c;它能够从图像中识别出文本&#xff0c;并将其转换为可编辑的文本格式。以下是关于Tesseract-OCR的详细介绍&#xff1a; 一、背景与发展 起源&#xff1a;Tesseract最初是惠普…

5G Hz WiFi 频段划分

5GHz WiFi频段被划分为多个Band&#xff0c;这主要是基于国际通信标准和各国监管机构的规定。在常见的划分中&#xff0c;5GHz频段被分为以下几个部分&#xff1a; Band 1 (U-NII-1): 频率范围为5.15~5.25GHz&#xff0c;带宽为100MHz。Band 2 (U-NII-2 或 U-NII-2A/2C): 通常…

Visual Studio Code 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开首选项设置对话框2. 在Font Family里面输入字体 前言 Visual Studio Code 自定义字体大小&#xff0c;统一设置为 Cascadia Code SemiBold &#xff0c;大小为 14 具体操作 【文件】>【首选项】>【设置】&…

SSRF漏洞(服务器端请求伪造)相关案例

目录 前言&#xff1a; 案例&#xff1a;Web-ssrfme 一、redis未授权访问攻击 1.1 进入题目给出源码 1.2 测试ssrf 1.3 查看phpinfo发现主机 1.4 发现服务 1.5 攻击访问 1.6 FLAG 二、redis未授权写入任务计划 2.1 探测开放端口 2.2 导入任务计划 2.3 反弹shell成…

开源跨平台支持400多个国家语言屏幕键盘虚拟键盘Keyman开发指南

很多嵌入式开发平台或者移动端&#xff0c;桌面端开发都需要用到自定义的键盘&#xff0c;想要开发一个能够支持多国语言键盘布局的开源Keyboard可不容易&#xff0c;工作量非常大。 很多公司都是只开发英汉两种键盘布局&#xff0c;连Qt自带的VirtualKeyboard实际上要支持多国…

C++内存对齐和无符号有符号数混合运算

记录一下笔试中遇到的几个问题&#xff1a; C中无符号数与有符号数一起运算时&#xff0c;都会转换成无符号数运算 int main() {unsigned int a 100;signed b -100;cout << (unsigned)b << endl; // 4294967196signed c, d;c a / b; // 相当于 100 / 429496…

TCP数据包——报文头部组成

TCP协议报头包括以下字段: 源端口和目标端口:分别是发送方和接收方的端口号,用于标识通信的应用程序。 序列号:用于标识数据流的序列号,保证数据包的顺序性。每一个报文都有一个序列号。 确认号:用于确认收到的数据包序列号,用于实现可靠传输。每发送一个数据包都需要收…

系统分析师5-数据库特训专题

文章目录 1 数据库设计概述2 规范化与反规范化2.1 规范化2.2 反规范化2.3 案例分析例题1 3 数据库索引与视图的应用3.1 数据库索引3.2 数据库视图3.3 案例分析例题2 4 分布式数据库系统5 数据库分区分表分库5.1 案例分析例题3 6 分布式事务增补6.1 案例分析例题4 7 NoSQL8 附录…

优雅实现远程调用-OpenFeign

目录 OpenFeign介绍 OpenFeign最佳实践 我再来遇到个问题&#xff0c;我创建的com.xx.xxx包&#xff0c;放到一起了&#xff0c;不是那种一个在一个下面的那种 Nacos&#xff0c;只要看见这种什么网络报错啥的&#xff0c;java.net.SocketException: Network is unreachabl…

十、软件工程基础知识(考点篇)

1 软件工程 软件开发生命周期&#xff1a; 软件定义时期&#xff1a;包括可行性研究和详细需求分析过程&#xff0c;任务是确定软件开发工程必须完成的总目 标&#xff0c;具体(步骤)可分成问题定义、可行性研究、需求分析等。 软件开发时期&#xff1a;就是软件的设计与实…

Hive的体系架构、安装

目录 一、Hive体系架构二、安装1.嵌入模式2.本地模式和远程模式 一、Hive体系架构 二、安装 1.嵌入模式 特点 不需要Mysql支持&#xff0c;数据存储在自带的derby中只支持一个链接&#xff0c;即一时间只能有一个用户操作 部署 根据如下文件自行编写hive-site.xml hive-sit…

Docker 部署 Kafka 可视化 Kafka-UI

前言 本文部署的Kafka-UI 是基于Docker Compose 部署 Kafka的KRaft模式&#xff0c;如有需要可访问下文链接 Docker Compose 部署 Kafka的KRaft模式 不用依赖 Zookeeper 此部署也适用于不是docker部署的kafka集群 1.启动 Kafka-UI 服务 1.1 kafka 来自docker安装 docker r…

无法验证 Anaconda 仓库证书

无法验证 Anaconda 仓库证书 这个错误表明无法验证 Anaconda 仓库的证书。你可以尝试添加参数 --no-check-certificate 来解决这个问题&#xff08;不推荐但还挺好用&#xff0c;嘻嘻&#xff09;&#xff1a; wget --no-check-certificate https://repo.anaconda.com/archive…

【案例63】SSL RC4 加密套件支持检测 (Bar Mitzvah)修复方案

漏洞详情信息 漏洞名称 SSL RC4 加密套件支持检测 (Bar Mitzvah) 漏洞等级 高 漏洞描述 远程主机支持在一个或多个密码组中使用 RC4。 RC4 密码在伪随机字节流的生成中存在缺陷&#xff0c;导致引入了各种各样的小偏差&#xff0c;降低了其随机 性。 如果反复加密明文&am…

【北森-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

八款主流图纸加密软件强力推荐|2024年图纸加密软件最佳选择!

在当今数字化设计的世界中&#xff0c;保护企业的图纸和设计文件至关重要。无论是建筑图纸、机械设计还是电子电路图&#xff0c;这些宝贵的知识产权都需要被妥善保护&#xff0c;以防止未经授权的访问和数据泄露。本文将为您推荐2024年最值得选择的八款主流图纸加密软件&#…

1. Redis 相关背景

文章目录 一 . 初识 Redis二 . 浅谈分布式系统2.1 单机架构2.2 分布式2.3 服务分离和负载策略2.4 数据库读写分离2.5 引入缓存2.6 数据库的分库分表2.7 引入微服务2.8 其他概念 三 . Redis 的特性四 . Redis 的应用场景4.1 Redis 能做的事4.2 Redis 不能做的事 Hello , 大家好 …

第二证券:A股公司中期分红踊跃 红利资产获机构关注

A股公司2024年半年报正在密布宣布&#xff0c;上市公司中期分红计划备受商场重视。据统计&#xff0c;到8月26日&#xff0c;有中期分红计划的A股公司近370家&#xff0c;创下前史新高。业内人士称&#xff0c;得益于政策层面的生动引导&#xff0c;上市公司分红“大军”敏捷扩…

随笔七、开启gst-rtsp-server服务及推流测试

目录 1. 环境 2. 启用gst-rtsp-server服务 3. 交叉编译测试程序examples 4. 推流测试 1. 环境 泰山派RK3566开发板的SDK使用了GStreamer媒体编解码框架&#xff0c;其扩展能力应该是优于ffmpeg&#xff0c;因此目前不考虑移植ffmpeg。要实现摄像头推流&#xff0c;还需要流…

MySQL的半同步模式

MySQL 的半同步复制 MySQL 的半同步复制&#xff08;Semi-Synchronous Replication, SSR&#xff09;是一种增强的复制机制&#xff0c;旨在减少主服务器&#xff08;Master&#xff09;发生故障时的数据丢失风险&#xff0c;并在一定程度上提高复制的可靠性。半同步复制结合了…