当前位置: 首页 > news >正文

简述SVM

概述

SVM,即支持向量机(Support Vector Machine),是一种常见的监督学习算法,用于分类和回归问题。它是一种基于统计学习理论和结构风险最小化原则的机器学习方法。

SVM的主要思想是在特征空间中找到一个最优的超平面,将不同类别的样本点分隔开来。这个超平面可以被视为一个决策边界,用于对新的样本进行分类。SVM的目标是找到具有最大间隔(下图中margin的一半)的超平面,以实现更好的泛化性能。

                                

超平面公式怎么推导

假设x0为超平面上的一点,w为超平面的法向量,对于超平面上任意的一点x都存在

                                                        w·(x-x0) = w·x - w·x0 = 0

令-w·x0 = b,则变为

                                                                w·x + b = 0

函数距离和几何距离

在超平面w·x + b = 0确定的情况下,|w·x + b|可以相对地表示点x距离超平面的远近,对于二分类问题,如果w·x + b > 0,则x的类别被判定为1,否则判定为-1。如果y(w·x + b) > 0,则x的分类正确,并且y(w·x + b)的值越大,分类结果的确信度越大。

所以样本点(xi,yi)与超平面(w,b)之间的函数距离定义为d = yi(w·xi + b)

但是该定义存在问题,即w和b同时缩放k倍后,超平面没有变化(比如w·x + b = 0和2w·x + 2b = 0是同一个超平面),但是函数距离却变化了,于是我们需要求几何距离。

几何距离可以通过面与面的距离公式来算,因为离超平面最近的样本点其实可以看作是处在一个和超平面平行的面上,所以我们要求的其实是面w·x + b = 1和面w·x + b = 0的距离,由距离公式可得d = 1/||w||。

于是我们得到

\left\{\begin{matrix}max \frac{1}{||w||} & \\s.t. y_{i}(w^{T}x_{i} + b) - 1 >= 0,i = 1,2,...,n & \end{matrix}\right.

拉格朗日乘子法

再进行下一步之前,我们先来了解一下拉格朗日乘子法。

拉格朗日乘子法是一种在最优化的问题中寻找多元函数在其变量受到一个或多个条件的约束时的求局部极值的方法。这种方法可以将一个有n个变量和k个约束条件的最优化问题转换为一个解有n + k个变量的方程组的解的问题。

举个例子:求双曲线xy = 3上离原点最近的点。

首先根据问题得出min f(x,y) = x^2 + y^2        s.t. xy = 3

如下图

                                        

可以看出,xy = 3和f(x,y) = x^2 + y^2的曲线簇的切点,就是我们要求的距离原点最近的点。

又有如果两个曲线相切,那么它们的切线相同,即法向量是相互平行的,于是由▽f//▽g可得▽f = λ*▽g。

这时,就将原有的约束优化问题转化为了一种对偶的无约束优化问题

原问题:

对偶问题:

min f(x,y) = x2 + y2

s.t.  xy = 3

由▽f = λ*▽g得:

  fx = λ*gx        (1)

  xy = 3

约束优化问题

无约束方程组问题

接着对上面的(1)式分别对x和y求偏导,得到2x = λ*y,        2y = λ*x,        xy = 3

通过求解方程得λ = ±2,当λ = 2时,x = sqrt(3),y = sqrt(3)或者x = sqrt(3),y = sqrt(3);当λ = -2时无解。

从等式约束到非等式约束

现在回到之前的问题,我们发现,在上面的例子中,约束条件是一个等式,而在我们的问题中约束条件s.t. yi(w·xi + b) - 1 >= 0,i=1,2,...,n是一个不等式,那么非等式约束又该怎么处理呢?

下图展示了拉格朗日乘子法的几何含义:红色曲线表示等式约束g(x) = 0,红色曲线围成的曲面内表示非等式约束g(x) <= 0

                        

非等式约束g(x) <= 0的情形中,最优点x要么出现在边界g(x) = 0上,要么出现在区域g(x) < 0中,

        对于g(x) < 0的情况,因为▽f(x)方向向里,因此约束条件g(x) <= 0不起作用,我们只需要通过条件▽f(x) = 0求得可能的极值即可

        对于g(x) = 0的情况,类似于之前提到的等式约束,但是▽f(x)的方向和▽g(x)的方向必须相反,即存在常数λ > 0使得▽f(x) + λ*▽g(x) = 0

当最优值落在g(x) < 0区域时,约束条件g(x) <= 0不起作用,因此我们令约束条件的乘子λ = 0,当最优值落在g(x) = 0边界上时,λg(x)自然等于0。综合这两种情况,可以推出λg(x) = 0。

因此,拉格朗日乘子法可以写成如下的等价形式,括号中的条件也叫做KKT条件。

L(x,λ) = f(x) + λ*g(x)

\left\{\begin{matrix}g(x) <= 0 \\ \lambda >= 0 \\ \lambda *g(x) = 0 \end{matrix}\right.

从原函数到对偶问题

接着考虑之前得到的目标函数

\left\{\begin{matrix}max \frac{1}{||w||} & \\s.t. y_{i}(w^{T}x_{i} + b) - 1 >= 0,i = 1,2,...,n & \end{matrix}\right.

由于求\frac{1}{||w||}的最大值相当于求\frac{1}{2}\left \| w \right \|^{2}的最小值,所以上述目标函数等价于

\left\{\begin{matrix}min \frac{1}{2}\left \| w \right \|^{2} & \\s.t. y_{i}(w^{T}x_{i} + b) - 1 >= 0,i = 1,2,...,n & \end{matrix}\right.

因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题(之所以等价于\frac{1}{2}\left \| w \right \|^{2}而不是等价于\left \| w \right \|就是为了将它转化为一个凸二次规划问题)

此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性变换到对偶变量的优化问题,即通过求解与原问题等价的对偶问题得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。

那什么是拉格朗日对偶性呢?简单来讲,通过给每一个约束条件加上一个拉格朗日乘子α,定义拉格朗日函数如下

                

然后令

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

容易验证,当某个约束条件不满足时,例如y_{i}(w^{T}x_{i} + b) < 1,那么显然有\theta (x) = \infty(只要令\alpha _{i} = \infty即可)。而当所有约束条件都满足时,则最优值为​​​​​​​\theta (x) = \frac{1}{2}\left \| w \right \|^{2},亦即最初要最小化的量。

因此,在要求约束条件得到满足的情况下最小化​​​​​​​\frac{1}{2}\left \| w \right \|^{2},实际上等价于直接最小化​​​​​​​\theta (x)(当然,这里也有约束条件,就是≥0,i=1,…,n),因为如果约束条件没有得到满足,​​​​​​​\theta (x)会等于无穷大,自然不会是我们所要求的最小值。

        具体写出来,目标函数变成了:

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

这里用p^{*}表示这个问题的最优值,且和最初的问题是等价的。如果直接求解,那么一上来便得面对w和b两个参数,而\alpha _{i}又是不等式约束,这个求解过程不好做。不妨把最小和最大的位置交换一下,变成:

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

交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用d^{*}来表示。而且有d^{*}p^{*},在满足某些条件的情况下(这个条件指的是强对偶,Slater条件是强对偶的充分条件),这两者相等,即d^{*}=p^{*},这个时候就可以通过求解对偶问题来间接地求解原始问题。

        换言之,之所以从minmax的原始问题p^{*},转化为maxmin的对偶问题d^{*},一者因为d^{*}p^{*}的近似解,二者,转化为对偶问题后,更容易求解。

        所谓Slater 条件,即指:凸优化问题,如果存在一个点x,使得所有等式约束都成立,并且所有不等式约束都严格成立(即取严格不等号,而非等号),则满足Slater 条件。对于此处,Slater条件成立,所以d^{*}p^{*}可以取等号,即d^{*}=p^{*},所以我们对对偶问题的求解等价于对原问题的求解。

下面可以先求L 对w、b的极小,再求L 对的极大。

对偶问题的求解

先让拉格朗日函数分别对w和b求偏导

将以上结果代入

求对\alpha的极大,即是关于对偶问题的最优化问题。经过上面第一个步骤的求w和b,得到的拉格朗日函数式子已经没有了变量w,b,只有\alpha。从上面的式子得到:

这样,求出了\alpha _{i},根据\omega = \sum_{i=1}^{m}\alpha _{i}y^{i}x^{i},即可求出w,然后通过,即可求出b,最终得出分离超平面和分类决策函数。

在求得L(w, b, a) 关于 w 和 b 最小化,以及对\alpha的极大之后,最后一步则可以利用SMO算法求解对偶问题中的拉格朗日乘子\alpha​​​​​​​。

相关文章:

简述SVM

概述 SVM&#xff0c;即支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种常见的监督学习算法&#xff0c;用于分类和回归问题。它是一种基于统计学习理论和结构风险最小化原则的机器学习方法。 SVM的主要思想是在特征空间中找到一个最优的超平面…...

【DevOps】Rundeck以及Jenkins

Rundeck是一个DevOps常用的工具&#xff0c;是PagerDuty公司开发的产品&#xff0c;能够很好的和PagerDuty进行集成。 但是平常我们听得或用得更多的是Jenkins&#xff0c;一个非常流行的CI工具&#xff0c;具有很好的可扩展性。 可是为什么那家公司会用Rundeck而不是Jenkins呢…...

数字滤波器分析---零极点分析

数字滤波器分析---零极点分析 zplane 函数绘制线性系统的极点和零点。 例如&#xff0c;在 -1/2 处为零且在 0.9e−j2π0.3 和 0.9ej2π0.3 处有一对复极点的简单滤波器为 zer -0.5; pol 0.9*exp(j*2*pi*[-0.3 0.3]); 要查看该滤波器的零极点图&#xff0c;您可以使用 z…...

HarmonyOS应用开发-网络请求与web组件

前言 当今世界&#xff0c;移动应用已经成为人们日常生活中不可或缺的一部分。无论是社交媒体、新闻、购物还是娱乐&#xff0c;安卓应用的广泛使用已经改变了我们与数字世界互动的方式。然而&#xff0c;这些应用的实际功能远不止界面和用户体验。它们背后的精密技术和网络请…...

频次最高的38道selenium面试题及答案

1、selenium的原理是什么&#xff1f; selenium的原理涉及到3个部分&#xff0c;分别是&#xff1a; 浏览器driver&#xff1a;一般我们都会下载driverclient&#xff1a;也就是我们写的代码 client其实并不知道浏览器是怎么工作的&#xff0c;但是driver知道&#xff0c;在…...

利用MSF设置代理

1、介绍&#xff1a; 通过MSF拿到一个机器的权限后&#xff0c;通过MSF搭建socks代理&#xff0c;然后通内网。 拿到目标权限&#xff0c;有很多方法&#xff0c;比如&#xff1a;①ms17-010 ②补丁漏洞 ③MSF生成后门 在此直接使用MSF生成后门 MSF中有三个代理模块&#x…...

模型剪枝算法——L1正则化BN层的γ因子

ICCV在2017年刊登了一篇经典论文《 Learning Efficient Convolutional Networks through Network Slimming》。在神经网络的卷积操作之后会得到多个特征图&#xff0c;通过策略突出重要的特征达到对网络瘦身的目的。在该论文中使用的剪枝策略就是稀疏化BN层中的缩放因子 。 Bat…...

11.9 知识总结(三板斧、全局配置文件、静态文件的配置、request对象等)

一、 三板斧的使用 三个方法&#xff1a; HttpResponse render redirect def index(request): print(request) # return HttpResponse("request") # 它返回的是字符串 # return render(request, index.html) # 加载HTML页面的 # return redirect(ht…...

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距&#xff1a; CSS margin&#xff08;外边距&#xff09;属性定义元素周期的空间。margin清除周围的&#xff08;外边框&#xff09;元素区域。margin没有背景颜色&#xff0c;是完全透明的。margin可以单独改变元素的上、下、左、右边距&#xff0c;也可以一次改…...

Exploration by random network distillation论文笔记

Exploration by Random Network Distillation (2018) 随机网络蒸馏探索 0、问题 这篇文章提出的随机网络蒸馏方法与Curiosity-driven Exploration by Self-supervised Prediction中提出的好奇心机制的区别&#xff1f; 猜想&#xff1a;本文是基于随机网络蒸馏提出的intrin…...

Ubuntu22.04配置Go环境

Ubuntu上配置Go环境biCentOS简单多了&#xff0c;有两种方案&#xff0c;一种直接使用apt进行安装&#xff0c;一种自己从官网下载安装包进行安装。 1、使用apt直接安装 更新apt安装包&#xff0c;常规操作 apt update 然后看看apt自带的Go版本是多少 apt list golang 是1…...

Zabbix深入解析与实战

1.Zabbix 1.1.监控概述 监控是指对行为、活动或其他变动中信息的一种持续性关注&#xff0c;通常是为了对人达成影响、管理、指导或保护的目的 监控 监视主机架构状态控制&#xff0c;事后追责目标&#xff1a;早发现早处理(故障、性能、架构) 网站扩容(用数据说话) 为什么要…...

怎么用电脑开发安卓app?能外包吗?

随着智能手机的普及&#xff0c;安卓应用程序的开发需求也越来越高&#xff0c;许多人都想开发自己的安卓应用程序&#xff0c;但苦于缺乏相关知识和技能&#xff0c;本文将介绍如何使用电脑开发安卓应用程序&#xff0c;以及是否可以将开发工作外包给专业的开发团队。 一、了…...

1-前端基本知识-HTML

1-前端基本知识-HTML 文章目录 1-前端基本知识-HTML总体概述什么是HTML&#xff1f;超文本标记语言 HTML基础结构文档声明根标签头部元素主体元素注释 HTML概念词汇&#xff1a;标签、属性、文本、元素HTML基本语法规则HTML常见标签标题标签段落标签换行标签列表标签超链接标签…...

磁盘的分区、格式化、检验与挂载 ---- fdisk,mkfs,mount

磁盘的分区、格式化、检验与挂载 磁盘管理是非常重要的&#xff0c;当我们想要再系统里面新增一块磁盘使用时&#xff0c;应执行如下几步&#xff1a; 对磁盘进行划分&#xff0c;以建立可用的硬盘分区 &#xff08;fdisk / gdisk&#xff09;对硬盘分区进行格式化&#xff0…...

Solr搜索参数详解

Solr 页面搜索 1.1 基本查询 参数意义q查询的关键字&#xff0c;此参数最为重要&#xff0c;例如&#xff0c;qid:1&#xff0c;默认为q:&#xff0c;fl指定返回哪些字段&#xff0c;用逗号或空格分隔&#xff0c;注意&#xff1a;字段区分大小写&#xff0c;例如&#xff0c;…...

Flink(三)【运行时架构】

前言 今天学习 Flink 的一些原理性的东西&#xff0c;比较偏概念&#xff0c;但是十分重要。有人觉得上来框框敲代码才能学到东西&#xff0c;那是狗屁不通的道理&#xff08;虽然我以前也这么认为&#xff09;。个人认为&#xff0c;学习 JavaEE那些框架&#xff0c;你上来就敲…...

conda添加清华镜像源

一、conda下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 显示所有channel conda config --show channels 二、添加清华镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://…...

「Verilog学习笔记」求两个数的差值

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module data_minus(input clk,input rst_n,input [7:0]a,input [7:0]b,output reg [8:0]c );always (posedge clk or negedge rst_n) begin if (~rst_…...

微头条项目实战:通过postman测试登录验证请求

1、CrosFilter package com.csdn.headline.filters; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class CrosFilter implements Filter {/*** 过滤器方法&#xff0c;用于处理HTTP请求* param servletReq…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...