在支持向量机的分类模型中,我们会遇到两大类模型,一类是线性可分的模型,还有一类是非线性可分的。非线性可分模型是基于线性可分的基础上来处理的。支持向量机比较适合小样本的训练。

线性可分

如下图所示,有紫色和黑色两类,可以用一条直线对数据进行完全分类。这样叫做线性可分

由上图我们可以看出,这两类点可以由无限根直线给分割开,那么我们该怎么找出最好的那一根呢?我们该怎么衡量最好的呢?我们该怎么用数学表达式来表述出这个最好的那个数学表达式呢?

具体做法

光凭感觉,我们可以知道,上图中的红线最好,可能从两方面想到,红线的数据的权重相对于黄线考虑到的更多,更重要的是红线对数据误差的容忍度更高,因为红线刚好处于中间数据万一由于错误偏移一点,也是可以分类正确的。我们该怎么量化这个呢?

找最优

上图中,两条蓝线是经过红线平移,平移到恰好与黑点或者紫点相交的位置。要求最好,所以我们要让这两条线之间的距离d最大,这样也就确定了斜率值,但是在这两条蓝线中存在无数条红线,我们要确定红线我们还要让d/2最大,这样也就确定了截距。这样我们就语言描述出最好是什么样的了,下面我们来用数学公式表达出。(蓝线刚好要碰到的点就是支持向量)

定义

在我们进行数学公式表达之前,我们先对需要的进行定义。

1 训练数据及标签

                                        

这里我们假设数据为二维的(其实一样的,二维的我们建立的是一条线,如果是三维的,我们就建立一个最优平面,如果是高维的我们就建立一个最优的超平面,所用公式一样。)

这里标签我们就假设为        +1  和  -1(方面后面计算,对结果没影响)

2 训练模型

                                        ​​​​​​​        ​​​​​​​        

这里是W和X是相同维度的

3 线性可分

必要知识

后面虽然乘a,但对这个线或者超平面是不会发生改变的。

2 点到线距离公式(向量到超平面距离公式)

特征缩放

        ​​​​​​​        ​​​​​​​        ​​​​​​​        (a>0)

我们进行这一操作,对超平面的几何位置不会产生任何改变。

根据这个我们可以写出,肯定会存在一个a使得

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​        ​​​​​​​

这里等于1只是为了方便计算,意思就是使得支持向量 X0​ 到超平面的函数间隔等于 1。

缩放后,支持向量满足 ∣w⋅X0​+b∣=1,此时所有其他样本点满足 ∣w⋅Xi​+b∣≥1

这样上面d的公式就变为了        ​​​​​​​        ​​​​​​​        

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

我们要求d的最大值,也就是求分母W的最小值。

优化问题

                        最小化         ​​​​​​​        ​​​​​​​

                        限制条件              

线性不可分

这类又存在两种情况,一种是​​​​​​​

上面这类情况,和我们上面差不多,我们可以用直线给分隔开,但是代价太高了,所有我们可以加上一个松弛变量

目标函数(最小化)    

高维映射

上面对非线性的处理还是不够的,因为有可能会存在下面一种情况。

对于上面,我们不可能用一条线给分开了,这个时候我们要把低维向量映射到高维中,这样就可分了。在一个平面上取若干点,不同类,如果我们维度函数转化为无限维,这样我们可以分类所有的分类的问题。下面我举一个特别简单的小例子

简单示例

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

在这样一个数据中,不存在一条线能完全把红蓝两类点分开。

其中​​​​​​​

我们想着是不是可以把这个映射到高维中,然后就可以用一个超平面来分隔,这个映射的法则就叫做核函数。

核函数

核函数(Kernel Function)是支持向量机(SVM)中的关键组件,用于将原始输入数据映射到高维特征空间,从而解决非线性分类问题。核函数通过隐式计算高维空间的内积,避免了显式映射的计算复杂度。

我们假设一个法则

转化为:​​​​​​​

于是我们可以构造一个超平面​​​​​​​​​​​​​​

可以把他们分割

高维映射的优化式子

求最优W和b

SVM中的API接口

SVC( C=1.0, kernel='rbf', degree=3, gamma='scale', 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', 
break_ties=False, random_state=None)

上面全是默认参数值

以下是 SVC(支持向量分类器)中最关键的参数及其简明解析,基于专业实践和文档总结

参数名默认值作用机制影响效果典型设置建议
C*1.0控制分类错误的惩罚强度- ​值大​:严格惩罚误分类 → 边界复杂,易过拟合 ↑
- ​值小​:容忍更多错误 → 边界平滑,泛化性强 ↓
网格搜索(如 [0.01, 0.1, 1, 10, 100]
kernel'rbf'定义数据映射到高维空间的方式linear:线性可分数据(高效)
rbf:非线性数据(默认首选)
poly/sigmoid:特定场景适用
优先尝试 rbf,线性数据用 linear
gamma'scale'控制样本影响力范围(RBF/Poly/Sigmoid核有效)- ​值大​:样本影响范围小 → 决策边界复杂,易过拟合 ↑
- ​值小​:样本影响范围大 → 边界平滑,易欠拟合 ↓
'scale'(自动计算)或网格搜索(如 [0.001, 0.01, 0.1]
degree3多项式核的阶数(仅 kernel='poly' 有效)- ​阶数高​:拟合复杂模式,但易过拟合 ↑
- ​阶数低​:模型简单,可能欠拟合 ↓
通常取 2~5,需配合调 C 和 gamma
class_weightNone调整类别权重(应对样本不平衡)None:所有类权重相等
'balanced':按类别频率自动加权
样本不均衡时必选 'balanced'
decision_function_shape'ovr'多分类策略选择'ovr':一对其余(速度快)
'ovo':一对一(精度高,计算量大)
默认 'ovr' 即可,类别多时考虑 'ovo'

代码实战

import pandas as pd
data=pd.read_csv('iris.csv')
print(data.head())
X=data.iloc[:,[1,3]]
y=data.iloc[:,5]
from sklearn.model_selection import train_test_split
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)from sklearn.svm import SVC
model = SVC(kernel='linear', C=float('inf'))
# model = SVC(kernel='linear', C=1)
model.fit(X, y)
# y_pred = model.predict(X_test)a=model.coef_[0]
b=model.intercept_[0]print(a,b)from sklearn import metrics
print(metrics.classification_report(y,model.predict(X)))import matplotlib.pyplot as plt
import numpy as npX1=data[data.iloc[:,5]==1].iloc[:,[1,3]]
X0=data[data.iloc[:,5]==0].iloc[:,[1,3]]plt.scatter(X1.iloc[:,0],X1.iloc[:,1],c='red')
plt.scatter(X0.iloc[:,0],X0.iloc[:,1],c='blue')x1=np.linspace(0,7,100)
x2=(x1*a[0]-b)/a[1]         #-b!!!并且这里
x3=(x1*a[0]-b+1)/a[1]
x4=(x1*a[0]-b-1)/a[1]
plt.plot(x1,x2)
plt.plot(x1,x3)
plt.plot(x1,x4)
plt.show()

下面是对其中两个特征进行划分的结果图。可以看出准确率特别高。

总结

1 float('inf')表示无限大

2 绘图的时候注意是WX+b=0,要把一个x作为纵坐标要稍加处理

3 这个如果训练的时候对数据做切分处理了,可能有未被计算的点离我们的超平面距离小于1。

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

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

相关文章

面试问题总结——关于ROS

ROS作为机器人开发中必不可少的一环,总结了一些面试中常见的问题。 目录 1.ROS1 和 ROS2 的核心区别 2.ROS话题间通信和服务端之间通信有什么区别? 3.RViz 可视化ROS的消息发布是一对一还是一对多的? 4.ROS中的机器人指令发布ros topic pub的原理实现,用的ROS1还是ROS2? 5…

软考架构师:数据库的范式

软考架构师:数据库的范式 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得&#xf…

[激光原理与应用-184]:光学器件 - 光学器件中晶体的用途、分类、特性及示例

一、用途光学晶体在光学器件中扮演核心角色,主要应用于以下领域:光学系统调节与控制:制作偏振器、滤光器、透镜等,调节光的传播方向、强度及偏振状态。激光技术:作为激光介质,实现频率转换、调制、偏转及Q开…

深入解析C#并行编程:从并行循环到异步编程模式

在当今多核处理器普及的时代,高效利用计算资源成为开发者必备技能。本文将深入剖析C#中的并行编程利器——任务并行库(TPL)和经典异步模式,助你提升程序性能。 🚀 一、任务并行库(TPL)核心机制 1. Parallel.For:并行化的for循环 通…

从零到精通:嵌入式BLE开发实战指南

目录 1. BLE的魅力与核心概念:为什么选低功耗蓝牙? BLE的核心术语 为什么选择BLE? 2. 硬件选型:选择合适的BLE芯片 热门BLE芯片推荐 选型时的关键考量 3. 开发环境搭建:让你的代码跑起来 工具准备 安装步骤 常见问题解决 4. 深入GATT:打造你的BLE服务 服务设计…

15.NFS 服务器

15.NFS 服务器 NFS 服务介绍 NFS是Network File System的缩写,即网络文件系统,是一种基于TCP/IP协议的网络文件共享协议,最早由Sun公司开发,它允许不同操作系统的计算机通过网络共享文件和目录,实现跨平台的文件访问和管理。 核心…

站在Vue的角度,对比鸿蒙开发中的数据渲染二

第二类数字&#xff08;Number&#xff09;的操作 2.1普通数字的显示 vue中直接显示 <template> <div><h3>学习Vue</h3><div>{{ num }}</div> </div></template><script lang"ts" setup>import {ref} fr…

Python自动化测试实战:reCAPTCHA V3绕过技术深度解析

Python自动化测试实战&#xff1a;reCAPTCHA V3绕过技术深度解析 摘要 reCAPTCHA V3作为Google推出的无感验证码系统&#xff0c;通过先进的机器学习算法分析用户行为模式&#xff0c;已成为当前最主流的反机器人解决方案。本文将深入解析其核心检测机制&#xff0c;并提供完…

简单Modules 的配置与管理,灵活应对多版本软件环境的需求。

参考文档 官方手册&#xff1a;https://modules.readthedocs.io Modulefile 语法&#xff1a;modulefile — Modules documentation Environment Modules 工具 Environment Modules 是一个环境管理工具&#xff0c;用于动态加载、卸载和管理不同版本的软件环境变量&#xff…

java内部类-匿名内部类

匿名内部类必须有一个已经存在的类或者接口

上篇:《排序算法的奇妙世界:如何让数据井然有序?》

个人主页&#xff1a;strive-debug 排序算法精讲&#xff1a;从理论到实践 一、排序概念及应用 1.1 基本概念 **排序**&#xff1a;将一组记录按照特定关键字&#xff08;如数值大小&#xff09;进行递增或递减排列的操作。 1.2 常见排序算法分类 - **简单低效型**&#xff…

2025.8.6 图论(1)Solution

2025.8.6 图论&#xff08;1&#xff09;Solution 割点 学习资料&#xff0c;在 csdn 或洛谷上看都行。是模板题题解&#xff08;之一&#xff09;。 T1&#xff1a;Atserckcn与逃离恐怖老师。 题意简述&#xff1a;从一个图中选定一个点&#xff0c;使得删除这个点后图不连…

OpenBayes 教程上新丨一键部署 gpt-oss-20b,实测开源推理模型新 SOTA,性能直逼 o3‑mini

时隔 6 年&#xff0c;自 GPT-2 以来&#xff0c;OpenAI 终于再度发布开源大模型——gpt-oss-120b 和 gpt-oss-20b&#xff0c;前者以千亿级参数专为复杂推理与知识密集型场景设计&#xff0c;后者则更适合低延迟、本地或专业垂直领域使用&#xff0c;可在消费级硬件&#xff0…

nlp-句法分析

目录 一、句法概述 1、成分语法理论概述 &#xff08;1&#xff09;分析过程 &#xff08;2&#xff09;缺点 2、依存语法理论概述 &#xff08;1&#xff09;依存关系、配价模式 &#xff08;2&#xff09;分类 &#xff08;3&#xff09;优势&#xf…

linux磁盘加密

在Linux中&#xff0c;磁盘加密是一种保护数据不被未授权访问的方法。有多种工具和策略可以实现磁盘加密&#xff0c;包括使用Linux内核的内置功能&#xff0c;如dm-crypt&#xff0c;以及使用更高级的解决方案&#xff0c;如LUKS&#xff08;Linux Unified Key Setup&#xff…

大数据架构演变之路

目录 一、各阶段的架构简介 二、各个架构的详细解释 1. 传统离线架构 2.1. Lambda架构-离线数仓分析实时链路分析 2.2. Lambda架构-离线数仓实时数仓 3. Kappa/流批一体架构 4. 湖仓一体架构 三、总结 一、各阶段的架构简介 技术架构 核心驱动(核心需求) ‌关键技术 …

STM32 HAL库驱动0.96寸OLED屏幕

STM32 HAL库驱动0.96寸OLED屏幕 项目概述 本项目使用STM32 HAL库为0.96寸OLED屏幕编写驱动程序。OLED屏幕通过I2C接口与STM32单片机通信&#xff0c;实现文本、数字和图形的显示功能。 项目仓库地址&#xff1a;STM32_Sensor_Drives 硬件连接 OLED屏幕通过I2C接口与STM32连…

横向越权:修改参数访问不属于自己的数据

一、什么是横向越权定义 横向越权&#xff08;Horizontal Privilege Escalation&#xff09;是指 同一权限级别的用户&#xff0c;通过篡改请求参数或资源标识&#xff0c;访问本不属于自己的数据或功能。例子 假设一个在线商城&#xff0c;用户 A 访问订单详情的 URL&#xff…

攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)

实验一 ARP欺骗一、拓扑二、实验准备、1.设置终端漏洞靶机集合选择需要的数量和镜像打开设备上的驱动精灵安装网卡安装成功后查看IP地址、网关信息等。三、实验步骤1.实验原理中间人&#xff08;攻击者&#xff09;在终端与网关之间持续发送伪造的 ARP 应答包&#xff0c;双向欺…

VSCode 禁用更新检查的方法

通过设置菜单禁用 这是最直接和推荐的方法&#xff0c;可以永久禁用自动更新&#xff1a; 打开 VSCode。点击左下角的齿轮图标&#xff0c;然后选择“设置”。或者通过菜单栏“文件” > “首选项” > “设置”进入。在顶部的搜索框中输入“update”。找到“Update: Mode”…