机器学习算法_支持向量机

一、支持向量机

  • 支持向量机只能做二分类任务

  • SVM全称支持向量机,即寻找到一个超平面使样本分成两类,且间隔最大

  • 硬间隔:如果样本线性可分,在所有样本分类都正确的情况下,寻找最大间隔;如果出现异常值或样本线性不可分,此时硬间隔无法实现

  • 软间隔:允许部分样本,在最大间隔之内,甚至在错误的一边,寻找最大间隔;目标是尽可能保持间隔宽阔和限制间隔违例之间寻找良好的平衡

  • 惩罚系数:通过惩罚系数来控制这个平衡,C值越小,则间隔越宽,分错的样本个数也就越多;反之,C值越大,则间隔越窄,分错的样本个数越少

二、LinearSVC_API

class sklearn.svm LinearSVC(C = 1.0)
  • 示例
from plot_util import plot_decision_boundary_svc, plot_decision_boundary
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVCX, y = load_iris(return_X_y= True)x = X[y < 2, :2]
y = y[y < 2]plt.scatter(x[y == 0, 0], x[y == 0, 1], c = 'r')
plt.scatter(x[y == 1, 0], x[y == 1, 1], c = 'b')
plt.show()# 特征处理
transform = StandardScaler()
x_tran = transform.fit_transform(x)# 模型训练
model = LinearSVC(C = 30)
model.fit(x_tran, y)
y_pre = model.predict(x_tran)
print(accuracy_score(y, y_pre))# 可视化处理
plot_decision_boundary_svc(model, axis = [-3, 3, -3, 3])
plt.scatter(x_tran[y == 0, 0], x_tran[y == 0, 1], c = 'r')
plt.scatter(x_tran[y == 1, 0], x_tran[y == 1, 1], c = 'b')
plt.show()# 模型训练
model = LinearSVC(C = 0.01)
model.fit(x_tran, y)
y_pre = model.predict(x_tran)
print(accuracy_score(y, y_pre))# 可视化处理
plot_decision_boundary_svc(model, axis = [-3, 3, -3, 3])
plt.scatter(x_tran[y == 0, 0], x_tran[y == 0, 1], c = 'r')
plt.scatter(x_tran[y == 1, 0], x_tran[y == 1, 1], c = 'b')
plt.show()

三、SVM算法原理

要去求一组参数(w, b),使其构建的超平面函数能够最优地分离两个集合

样本空间中任一点x到超平面(w, b)的距离可写成: r = w T x + b ∣ ∣ w ∣ ∣ r = \frac{w^Tx+b}{||w||} r=∣∣w∣∣wTx+b,想要找到具有最大间隔的划分超平面,也就是要找到能满足下式中约束的参数w和b,使得间隔 γ \gamma γ最大

{ w T x i + b ⩾ + 1 , y i = + 1 ; w T x i + b ⩽ − 1 , y i = − 1. \begin{cases} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i} + b \geqslant +1, & y_{i} = +1; \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i} + b \leqslant -1, & y_{i} = -1. \end{cases} {wTxi+b+1,wTxi+b1,yi=+1;yi=1.

距离超平面最近的几个训练样本点使上式等号成立,他们被称为“支持向量”,两个异类支持向量到超平面的距离之和为(最大间隔距离表示): 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2

  • 训练样本: { w T x i + b ⩾ + 1 , y i = + 1 ; w T x i + b ⩽ − 1 , y i = − 1. \begin{cases} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i} + b \geqslant +1, & y_{i} = +1; \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i} + b \leqslant -1, & y_{i} = -1. \end{cases} {wTxi+b+1,wTxi+b1,yi=+1;yi=1.则目标函数可以写成: m a x w , b = 2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ⩾ 1 ,其中 i = 1 , 2 , 3 , … , m max_{w, b} = \frac{2}{||w||}s.t.y_i(w^Tx_i+b) \geqslant 1,其中i=1,2,3,\dots, m maxw,b=∣∣w∣∣2s.t.yi(wTxi+b)1,其中i=1,2,3,,m

  • 将目标函数进一步优化: m i n w , b = 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ⩾ 1 , 其中 i = 1 , 2 , 3 , … , m min_{w, b} = \frac{1}{2}||w||^2 s.t.y_i(w^Tx_i+b) \geqslant 1,其中i = 1, 2, 3, \dots, m minw,b=21∣∣w2s.t.yi(wTxi+b)1,其中i=1,2,3,,m

  • 添加核函数,将目标函数转化成以下形式:KaTeX parse error: {align*} can be used only in display mode.

  • 构建拉格朗日函数:其中 α i \alpha_i αi为拉格朗日乘子(相当于 λ i \lambda_i λi): L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i ( 1 − y i ( w T ⋅ Φ ( x i ) + b ) − 1 ) … … ① L(w, b, \alpha) = \frac{1}{2}||w||^2-\sum_{i = 1}^{n} \alpha_i\left(1 - y_{i} \left(\boldsymbol{w}^{\mathrm{T}} \cdot \boldsymbol{\varPhi}(x_{i}) + b\right)-1\right) \dots \dots ① L(w,b,α)=21∣∣w2i=1nαi(1yi(wTΦ(xi)+b)1)……

  • 要想求得极小值,上式后半部分应该取的极大值: m i n w , b m a x α L ( w , b , α ) < = = > m a x α m i n w , b L ( w , b , α ) min_{w, b}max_{\alpha}L(w, b, \alpha) <==> max_{\alpha }min_{w, b}L(w, b, \alpha) minw,bmaxαL(w,b,α)<==>maxαminw,bL(w,b,α)

  • 要找 m i n w , b L ( w , b , α ) min_{w, b}L(w, b, \alpha) minw,bL(w,b,α),既要先对 w , b w, b w,b求导

    • w w w求偏导,并令其为0: L = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i ( y i w T φ ( x i ) + y i b − 1 ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i y i w T φ ( x i ) + α i y i b − α i L=\frac{1}{2}||w||^2-\sum_{i = 1}^n \alpha_i(y_iw^T \varphi(x_i)+y_ib-1)=\frac{1}{2}||w||^2-\sum_{i = 1}^n \alpha_iy_iw^T \varphi(x_i)+\alpha_iy_ib-\alpha_i L=21∣∣w2i=1nαi(yiwTφ(xi)+yib1)=21∣∣w2i=1nαiyiwTφ(xi)+αiyibαi

      ∂ L ∂ w = w − ∑ i = 1 n α i y i φ ( x i ) = 0 \frac{\partial L}{\partial w}= w-\sum_{i = 1}^n\alpha_iy_i \varphi(x_i) = 0 wL=wi=1nαiyiφ(xi)=0

      得到: w = ∑ i = 1 n α i y i φ ( x i ) = 0 w =\sum_{i = 1}^n\alpha_iy_i \varphi(x_i) = 0 w=i=1nαiyiφ(xi)=0

    • 对b求偏导,并令其为0:
      L = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i y i w T φ ( x i ) + α i y i b − α i L = \frac{1}{2}||w||^2-\sum_{i = 1}^n \alpha_iy_iw^T\varphi(x_i)+\alpha_iy_ib-\alpha_i L=21∣∣w2i=1nαiyiwTφ(xi)+αiyibαi

      ∂ L ∂ b = ∑ i = 1 n α i y i = 0 \frac{\partial L}{\partial b}=\sum_{i = 1}^n\alpha_iy_i=0 bL=i=1nαiyi=0
      得到: ∑ i = 1 n α i y i = 0 \sum_{i = 1}^n\alpha _iy_i = 0 i=1nαiyi=0

  • 将上面两个求导的结果代入①式中,得到:KaTeX parse error: {align*} can be used only in display mode.

四、SVM核函数

  • 核函数作用:核函数将原始输入空间映射到新的特征空间,从而使原本线性不可分的样本可能在核空间可分
  • 核函数分类
    • 线性核: k ( x i , x j ) = x i T x j k(x_i, x_j)=x_i^Tx_j k(xi,xj)=xiTxj
    • 多项式核: k ( x i , x j ) = ( x i T x j ) d k(x_i, x_j) = (x_i^Tx_j)^d k(xi,xj)=(xiTxj)d
    • 高斯核(RBF, 径向基函数): k ( x I , x j ) = e p x ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) k(x_I, x_j) = epx(-\frac{||x_i-x_j||^2}{2\sigma^2}) k(xI,xj)=epx(2σ2∣∣xixj2)——产生将样本投射到无限维空间的运算效果,使得原来不可分的数据变得可分,使用最多
    • 拉普拉斯核: k ( x i , x j ) = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 σ ) k(x_i, x_j)=exp(-\frac{||x_i-x_j||^2}{\sigma}) k(xi,xj)=exp(σ∣∣xixj2)
    • Sigmod核: k ( x i , x j ) = t a n h ( β x i T x j + θ ) k(x_i, x_j) = tanh(\beta x_i^Tx_j+\theta) k(xi,xj)=tanh(βxiTxj+θ)

1.高斯核

  • 公式: K ( x , y ) = e − γ ∣ ∣ x − y ∣ ∣ 2 K(x, y) = e^{-\gamma||x-y||^2} K(x,y)=eγ∣∣xy2,其中 γ = 1 2 σ 2 \gamma=\frac{1}{2\sigma^2} γ=2σ21

    • γ \gamma γ是超参数,作用与标准差相反, γ \gamma γ越大(标准差越小),高斯分布越窄, γ \gamma γ越小,高斯分布越宽
  • API( γ \gamma γ较大,过拟合; γ \gamma γ较小,欠拟合)

from sklearn.svm import SVC
SVC(kernel = 'rbf', gamma=gamma)

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

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

相关文章

Linux : echo ~ tail 重定向符

&#x1f680; Linux 常用命令详解&#xff1a;echo、tail 与重定向符号全解析&#xff08;含通俗案例&#xff09; &#x1f4c5; 更新时间&#xff1a;2025年6月17日 &#x1f3f7;️ 标签&#xff1a;Linux基础 | Shell命令 | echo | tail | 输出重定向 | Linux入门 文章目录…

uniapp的更新流程【安卓、IOS、热更新】

UniApp应用更新方案 两种更新方式 APP全量升级&#xff1a;需要重新下载安装包热更新&#xff1a;通过下载wgt资源包实现&#xff0c;用户只需重启应用 Android更新实现 用户需要授权安装权限&#xff0c;流程为下载APK后自动弹出安装界面 var dtask plus.downloader.cre…

火山引擎解码生态型增长铁律

“技术流量与力量的崛起&#xff0c;本质上是一场生态规模的竞赛。每次浪潮的排头兵&#xff0c;都是指尖沾着代码的开发者——互联网时代的Linux社区让开源席卷全球&#xff0c;移动互联网的App Store催生百万开发者&#xff0c;而今天&#xff0c;大模型正在用API重构产业。”…

警惕GO的重复初始化

go的初始化方式有很多种&#xff0c;在某些情况下容易引起重复初始化导致错误。 事例如下&#xff1a; 当使用gorm连接数据库时定义了全局DB var DB *gorm.DB 但是在后面某个函数内部初始化时导致DB重新初始化变成了局部变量&#xff0c;导致原来的全局变量DB还是nil func I…

python校园服务交流系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…

AlexNet:图像分类领域的里程碑网络及其创新剖析

文章目录 前言AlexNet一、网络的背景二、网络结构三、网络的创新3.1 首次使用GPU训练网络3.2 使用Relu激活函数3.2.1 sigmoid激活函数和tanh激活函数3.2.1.1 sigmoid激活函数3.2.1.2 tanh激活函数 3.3 Relu激活函数3.4 使用LRN局部响应归一化(已弃用)3.4.1 LRN的定义与起源3.4.…

iOS性能调优实践:结合KeyMob等多个工具提升应用稳定性与流畅度

在iOS应用开发中&#xff0c;性能问题往往难以通过单一工具轻松解决。尤其是当App面临用户反馈的流畅度差、卡顿严重、内存泄漏等问题时&#xff0c;开发者需要依靠多种工具的组合&#xff0c;才能有效地排查和优化性能瓶颈。 在我们最近的一个项目中&#xff0c;开发团队在处…

球形波方程的推导与解法

题目 问题 6. 一个球形波是三维波动方程的解,形式为 u ( r , t ) u(r,t) u(r,t),其中 r r r 是到原点的距离(球坐标)。波动方程的形式为: u t t = c 2 ( u r r + 2 r u r ) (球形波方程) . u_{tt} = c^{2} \left( u_{rr} + \frac{2}{r} u_{r} \right) \quad \text{(球形…

自动打电话软件设计与实现

文章目录 方案概述实现代码1. 安装必要的库2. 主程序代码3. HTML模板 (templates/index.html) 功能说明部署说明扩展功能建议注意事项 方案概述 使用Twilio的API进行电话呼叫实现基本的呼叫逻辑添加简单的用户界面 实现代码 1. 安装必要的库 pip install twilio flask2. 主…

RedissonLock源代码分析与锁应用

文章目录 前言一、RedissonLock源代码分析1.1 尝试加锁2.2 解锁 二、锁业务应用1.服务层方法注解方式 注入锁1.1 定义DistributedLock 注解类1.2 定义DistributedLockAspect 切片类1.3 尝试获取锁代码片断1.4 释放锁代码片断1.5 服务层注入锁注解 2.代码行加锁2.1 pom.xml文件引…

深入理解mysql索引

一、什么是索引&#xff1f; 索引&#xff08;Index&#xff09; 是数据库管理系统中一种特殊的数据结构&#xff0c;存储在磁盘上。它包含对数据表中一列或多列的值进行排序&#xff0c;并存储了指向表中实际数据行物理位置或主键值的引用指针。可以把它类比为书籍的目录&…

VMware vSphere Foundation 9.0 技术手册 —— Ⅰ 安装 ESXi 9.0 (虚拟机)

目录 1. 安装 ESXi 9.0 (虚拟机)&#xff08;1&#xff09;ESXi Standard Boot Menu&#xff08;2&#xff09;ESXi 安装导向&#xff08;3&#xff09;最终用户许可协议&#xff08;4&#xff09;选择系统盘&#xff08;5&#xff09;选择键盘类型&#xff08;6&#xff09;设…

UE5 游戏模板 —— TopDownGame 俯视角游戏

UE5 游戏模板 —— TopDownGame 俯视角游戏 前言一、模块导入二、TopDownGameMode三、TopDownPlayerController1、构造函数2、SetupInputComponent初始化新输入系统处理输入逻辑 四、TopDownCharacter五、射线检测总结 前言 上一篇文章介绍了一下PuzzleGame模板的流程&#xf…

基于深度学习的智能图像分割系统:技术与实践

前言 图像分割是计算机视觉领域中的一个核心任务&#xff0c;其目标是将图像划分为多个有意义的区域或对象。图像分割在医学影像分析、自动驾驶、安防监控等多个领域有着广泛的应用。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;…

【学习笔记】2.2 Encoder-Decoder

参考资料&#xff1a;https://github.com/datawhalechina/happy-llm 在 Transformer 中&#xff0c;使用注意力机制的是其两个核心组件——Encoder&#xff08;编码器&#xff09;和 Decoder&#xff08;解码器&#xff09;。 2.2.1 Seq2Seq 模型 Seq2Seq&#xff08;序列到…

# 材料力学押题

材料力学押题 文章目录 材料力学押题第一题第二题组合变形弯曲变形 第一题 Q 求力作用的销钉位置的竖直偏移距离。 S 方法一:能量方法 材料应变能计算为: U ∫ 内力 2 2 刚度 d A U\int \frac{\text{内力}^2}{2\times 刚度}\text{d}A U∫2刚度内力2​dA 克拉珀龙原理&…

uniapp项目之小兔鲜儿小程序商城(一) 项目介绍,技术栈,小程序的基础架构,封装拦截器和请求函数

文章目录 一.项目介绍和前置内容1.重要链接2.技术栈 二.创建uniapp项目1.使用HBuilderX创建2.使用命令行创建3.如何使用vscode开发uniapp项目?step1:把项目拉入vscode,开始下相关插件step2:ts类型校验step3:设置json文件可以允许注释 4.pages.json文件的作用是什么?5.示例:在…

Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量

在移动互联网时代&#xff0c;H5页面因其跨平台、低成本、易传播的特性&#xff0c;成为许多企业的首选。Uniapp作为一款优秀的前端跨端开发框架&#xff0c;能够快速开发H5、小程序、App等多端应用。然而&#xff0c;由于Uniapp默认采用SPA&#xff08;单页应用&#xff09;架…

一[3.3]、ubuntu18.04环境 利用 yolov8 实现列车轨道检测,并提取正确的轨道线【全网最详细】

一、参考文献 https://blog.csdn.net/u010117029/category_12977729.html 一[3.2]、ubuntu18.04环境 利用 yolov8 训练开源列车数据集,并实现列车轨道检测【全网最详细】-CSDN博客 火车轨道铁路轨道检测识别(附带Python源码+详细解析)_轨道点云提取铁轨代码-CSDN博客

pp-ocrv5中的改进-跨阶段特征融合(CSP-PAN)以及在 Neck 部分引入 CSP-PAN后为何就能解决小文本漏检问题?

好的&#xff0c;我们来详细解析一下 PP-OCRv5 中的**跨阶段特征融合&#xff08;CSP-PAN&#xff09;**改进&#xff0c;以及它如何有效解决小文本漏检问题。 背景&#xff1a;PP-OCR 的 Neck 部分与 PAN 在 PP-OCRv3 及之前的版本中&#xff0c;Neck 部分使用的是标准的 **…