机器学习之支持向量机(手推公式版)

news2025/2/28 21:51:36

文章目录

    • 前言
    • 1. 间隔与支持向量
    • 2. 函数方程描述
    • 3. 参数求解
      • 3.1 拉格朗日乘数
      • 3.2 拉格朗日对偶函数

前言

  支持向量机 ( S u p p o r t (Support (Support V e c t o r Vector Vector M a c h i n e , S V M ) Machine,SVM) Machine,SVM)源于统计学习理论,是一种二分类模型,是机器学习中获得关注最多的算法,没错,是“最”,没有之一。

1. 间隔与支持向量

  支持向量机分类方法的核心思想就是在特征空间中找出一个超平面作为决策边界,来将样本划分为正类和负类,并使模型在未知数据集上的泛化误差尽可能的小。

  超平面:在几何中,超平面是一个空间的子空间,它是维度比所在空间小一维的空间。 如果数据空间本身是三维的,则其超平面是二维平面,而如果数据空间本身是二维的,则其超平面是一维的直线。

在这里插入图片描述

  比如上面这组数据,我们很容易就可以画出一条线将上面的数据划分为两个类别,而且其误差为零。对于一个数据集来说,这样误差为0的超平面可能有很多个,比如下面这样:

在这里插入图片描述
  但这样的模型不能保证泛化性能很好,即无法保证这个超平面在未知数据集上也表现很优秀。因此我们引入了一个名词------间隔 ( m a r g i n ) (margin) (margin),就是将我们找到的超平面向两边进行平移,直到碰到离这个超平面最近的样本点后停下,形成两个新的超平面,这两个超平面的距离就叫“间隔”,超平面处于这个“间隔”的中间位置,即我们选择的超平面到平移后的两个新的超平面之间的距离相等。而距离超平面最近的几个样本点称为支持向量 ( s u p p o r t (support (support v e c t o r ) vector) vector)

在这里插入图片描述
在这里插入图片描述
  比较一下上面两个图,直观上来看,都能够将样本换分为了两类,但如果再往里面加入一些噪声呢,很明显,蓝色的那个超平面对局部扰动的容忍性最好,因为它“够宽”,如果想象不出来,看下面这个例子:
在这里插入图片描述
  很明显,引入了一些新的数据样本后, B 1 B_1 B1这个超平面误差依旧为0,分类结果是最鲁棒的, B 2 B_2 B2这个超平面因为间隔较小,所以出现了分类误差。因此我们在寻找超平面时,希望间隔越大越好。
  以上就是支持向量机,即通过找出间隔最大的超平面,来对数据进行分类的分类器。
  支持向量机的模型由简至繁可以分为下面三种:
   ∙ \bullet 线性可分支持向量机
   ∙ \bullet 线性支持向量机
   ∙ \bullet 非线性支持向量机
  当训练数据线性可分时,通过硬间隔最大化 ( h a r d (hard (hard m a r g i n margin margin m a x i m i z a t i o n ) maximization) maximization),学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据集近似线性可分时,通过软间隔最大化 ( s o f t (soft (soft m a r g i n margin margin m a x i m i z a t i o n ) maximization) maximization),也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据集线性不可分时,通过使用核技巧 ( k e r n e l (kernel (kernel t r i c k ) trick) trick)及软间隔最大化,学习非线性支持向量机。

  简单是复杂的基础,也是复杂的特殊情况嘛

2. 函数方程描述

在这里插入图片描述

  假设给定数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) } , y i ∈ { − 1 , + 1 } D=\{(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)\},y_i \in \{-1,+1\} D={(x1,y1),(x2,y2),,(xn,yn)},yi{1,+1},在上述在样本空间中,任意一条线都可以表示为: w T x + b = 0 \bm w^T\bm x+b=0 wTx+b=0  其中 w = ( w 1 , w 2 , … , w d ) T \bm w=(w_1, w_2,\dots,w_d)^T w=(w1,w2,,wd)T为法向量,决定了超平面的方向; b b b为位移项,决定了超平面与原点之间的距离。很显然,超平面也可以被法向量 w \bm w w和位移 b b b确定。
  为了推导和计算简便,我们做出以下规定:
  在超平面以上的点都标记为正,超平面以下的点都标记为负,即对于 ( x i , y i ) ∈ D (x_i,y_i)\in D (xi,yi)D,若 y i = + 1 y_i=+1 yi=+1,则有 w T x i + b > 0 \bm w^T\bm x_i+b>0 wTxi+b>0;若 y i = − 1 y_i=-1 yi=1,则有 w T x i + b < 0 \bm w^T\bm x_i+b<0 wTxi+b<0,表达式如下: { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 \begin{cases} \bm w^T\bm x_i+b\geq+1, & y_i=+1\\ \\ \bm w^T\bm x_i+b\leq-1, & y_i=-1 \end{cases} wTxi+b+1,wTxi+b1,yi=+1yi=1  其中,+1和-1表示两条平行于超平面的虚线到超平面的相对距离
  那么,样本空间中任意点 x \bm x x到超平面的距离可以写为: r = ∣ w T + b ∣ ∣ ∣ w ∣ ∣ r=\frac {|\bm w^T+b|} {||\bm w||} r=∣∣w∣∣wT+b  由此也可以求得两个不同标签的支持向量到超平面的距离之和,也就是间隔,可以表示为: γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac {2} {||\bm w||} γ=∣∣w∣∣2  我们的目标就是找到最大间隔的超平面,也就是要满足如下约束的参数 w \bm w w b b b,使得 γ \gamma γ最大,即 m a x w , b 2 ∣ ∣ w ∣ ∣ s u b j e c t   t o   y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , … , n \underset {\bm w,b} {max} \frac {2} {||\bm w||} \\[3pt] subject\ to \ y_i(\bm w^T\bm x_i+b)\geq1,i=1,2,\dots,n w,bmax∣∣w∣∣2subject to yi(wTxi+b)1,i=1,2,,n  很显然,最大化间隔 γ \gamma γ只需要最小化 ∣ ∣ w ∣ ∣ ||\bm w|| ∣∣w∣∣即可,所以约束变成如下: m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 s u b j e c t   t o   y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , … , n \underset {\bm w,b} {min} \frac {1} {2}||\bm w||^2 \\[3pt] subject\ to \ y_i(\bm w^T\bm x_i+b)\geq1,i=1,2,\dots,n w,bmin21∣∣w2subject to yi(wTxi+b)1,i=1,2,,n

  实际上就是取一下倒数,那为啥又加上平方了呢,前面其实说过了, L 2 L_2 L2范式嘛,加个平方是为了消除开平方的操作,简化计算过程。

3. 参数求解

  求解带有约束的最优化问题,一般常用的就是引入拉格朗日乘子 λ \lambda λ构造拉格朗日函数。其实这属于多元函数的条件极值问题,可参考高数下册书中多元函数的条件极值与拉格朗日乘数法 ( s t a n d a r d   L a g r a n g e   m u l t i p l i e r   m e t h o d ) (standard\ Lagrange\ multiplier\ method) (standard Lagrange multiplier method),下面简单回顾一下。

3.1 拉格朗日乘数

  要找函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在附加条件 φ ( x , y ) = 0 \varphi(x,y)=0 φ(x,y)=0下的可能极值点,可以先作拉格朗日函数 L ( x , y ) = f ( x , y ) + λ φ ( x , y ) L(x,y)=f(x,y)+\lambda \varphi(x,y) L(x,y)=f(x,y)+λφ(x,y)  其中, λ \lambda λ为参数,求其对 x x x y y y λ \lambda λ的一阶偏导数,并使之为零,然后联立方程: { f x ( x , y ) + λ φ x ( x , y ) = 0 f y ( x , y ) + λ φ y ( x , y ) = 0 φ ( x , y ) = 0 \begin{cases} f_x(x,y)+\lambda \varphi_x(x,y)=0\\ \\ f_y(x,y)+\lambda \varphi_y(x,y)=0\\ \\ \varphi(x,y)=0\\ \end{cases} fx(x,y)+λφx(x,y)=0fy(x,y)+λφy(x,y)=0φ(x,y)=0  有这个方程组解出 x x x y y y λ \lambda λ,这样求得的 ( x , y ) (x,y) (x,y)就是函数 f ( x , y ) f(x,y) f(x,y)在附加条件 φ ( x , y ) = 0 \varphi(x,y)=0 φ(x,y)=0下的可能极值点。
  如果函数的自变量多于两个,且附加条件多于一个,比如,要求函数 u = f ( x , y , z , t ) u=f(x,y,z,t) u=f(x,y,z,t)在附加条件 φ ( x , y , z , t ) = 0 ψ ( x , y , z , t ) = 0 \varphi (x,y,z,t)=0 \\[3pt] \psi (x,y,z,t)=0 φ(x,y,z,t)=0ψ(x,y,z,t)=0下的极值,可以先作拉格朗日函数 L ( x , y , z , t ) = f ( x , y , z , t ) + λ f ( x , y , z , t ) + μ f ( x , y , z , t ) L(x,y,z,t)=f(x,y,z,t)+\lambda f(x,y,z,t)+\mu f(x,y,z,t) L(x,y,z,t)=f(x,y,z,t)+λf(x,y,z,t)+μf(x,y,z,t)  其中, λ , μ \lambda,\mu λ,μ为参数,求其对 x x x y y y z z z t t t λ \lambda λ μ \mu μ的一阶偏导数,并使之为零,然后联立方程求解出 ( x , y , z , t ) (x,y,z,t) (x,y,z,t)

  来,看一个小题:
  求函数 u = x 2 + y 2 + z 2 u=x^2+y^2+z^2 u=x2+y2+z2在约束条件 z = x 2 + y 2 z=x^2+y^2 z=x2+y2 x + y + z = 4 x+y+z=4 x+y+z=4下的最大值与最小值。
在这里插入图片描述

3.2 拉格朗日对偶函数

  凸优化问题:函数本身是二次的 ( q u a d r a t i c ) (quadratic) (quadratic),函数的约束条件在其参数下是线性的,这样的函数称为凸优化问题。

  首先构造支持向量机的拉格朗日函数,也就是损失函数: L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) )   ( α i ≥ 0 ) L(\bm w,b,\bm \alpha)=\frac {1} {2}||\bm w||^2+\sum_{i=1}^m\alpha_i\bigg(1-y_i\big(\bm w^T\bm x_i+b\big)\bigg)\ (\alpha_i \geq0) L(w,b,α)=21∣∣w2+i=1mαi(1yi(wTxi+b)) (αi0)   其中, α = ( α 1 , α 2 , … , α n ) T \alpha=(\alpha_1,\alpha_2,\dots,\alpha_n)^T α=(α1,α2,,αn)T
  可以看出,拉格朗日函数分为两部分:第一部分和我们原始的损失函数一样,第二部分表达的是我们的约束条件。我们希望,构造的损失函数不仅能够代表我们原有的损失函数和约束条件,最好还能够表示我们想要最小化损失函数来求解 w \bm w w b b b的意图,所以我们要先以 α \alpha α为参数,求解 L ( w , b , α ) L(\bm w,b,\alpha) L(w,b,α)的最大值,再以 w \bm w w b b b为参数,求解 L ( w , b , α ) L(\bm w,b,\alpha) L(w,b,α)的最小值。因此,我们的目标可以写作如下形式: m i n w , b   m a x α i ≥ 0   L ( w , b , α )   ( α i ≥ 0 ) \underset {\bm w,b} {min}\ \underset {\alpha_i \geq0} {max} \ L(\bm w,b,\alpha)\ (\alpha_i \geq0) w,bmin αi0max L(w,b,α) (αi0)

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

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

相关文章

mysql查询当天,近一周,近一个月,近一年的数据

1.mysql查询当天的数据 select * from table where to_days(时间字段) to_days(now()); 2.mysql查询昨天的数据 select * from table where to_days(now( ) ) - to_days( 时间字段名) < 1 3.mysql查询近一周的数据 SELECT * FROM table WHERE date(时间字段) > D…

MySQL表的创建修改删除

目录 1、表的创建 2、查看表结构 3、表的修改 4、表的删除 1、表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎&#xff1b;说明&#xff1a; field 表示列名 datatype 表…

计算机系统基础实验 - 定点数加减法的机器级表示

实验序号&#xff1a;2 实验名称&#xff1a;定点数加减法的机器级表示 适用专业&#xff1a;软件工程 学 时 数&#xff1a;2学时 一、实验目的 1、掌握定点数加法的机器级表示。 2、掌握定点数减法的机器级表示。 3、掌握EFLAGS中4个牵涉到计算的标志位的计算方法。 4、掌握…

python实现动态柱状图

目录 一.基础柱状图 反转x轴&#xff0c;y轴&#xff0c;设置数值标签在右侧 小结 二.基础时间线柱状图 三.GDP动态柱状图绘制 1.了解列表的sort方法并配合lambda匿名函数完成列表排序 2.完成图表所需数据 3.完成GDP动态图表绘制 添加主题类型 设置动态标题 四.完整代码…

5.6 try语句块和异常处理

文章目录throw表达式(异常检测)try语句块&#xff08;异常处理&#xff09;编写处理代码函数在寻找处理代码的过程中退出标准异常异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。典型的异常包括失去数据库连接以及遇到意外输入等。当程序的某部…

Android Studio实现一个旅游课题手机app

文章目录&#xff1a; 目录 一、课题介绍 二、软件的运行环境 三、软件运行截图 四、软件项目总结 一、课题介绍 本次课题是实现了一个外出旅游的app&#xff0c;通过app可以显示景点的信息&#xff0c;以及根据地区查询&#xff0c;具体功能如下&#xff1a; 客户端 1.用…

【算法】面试题 - 数组(附讲解视频)

目录标题原地修改数组&#xff08;快慢指针&#xff09;26. 删除有序数组中的重复项扩展&#xff1a;83. 删除排序链表中的重复元素27. 移除元素283. 移动零左右指针167. 两数之和15. 三数之和[一个方法团灭 NSUM 问题](https://blog.csdn.net/yzx3105/article/details/1284606…

JavaWeb学生系统+教师系统+管理员系统

目录&#xff1a;一、前言&#xff1a;一、用到的技术&#xff1a;1.前端&#xff1a;HTMLCssJavaScriptAjaxJQueryBootStrap2.后端&#xff1a;ServletJSPSpringMVCJPA二、系统实现的效果&#xff1a;1.登录登出功能&#xff1a;(1)不同用户可以跳转到不同的系统页面。(2)设有…

window 和虚拟机ubuntu通讯的网络设置 本地连接桥接和NAT

工作需要&#xff0c;最近在linux下开发&#xff0c;需要将windows里的文件传至虚拟机里以及下位机树莓派中&#xff0c;三者需要实现互传。 windows连接树莓派时是采用网口建立本地连接的&#xff0c;而当不需要连接树莓派时&#xff0c;windows和虚拟机不能通过有线本地连接…

09、SpringCloud 系列:Nacos - 配置文件中心

SpringCloud 系列列表&#xff1a; 文章名文章地址01、Eureka - 集群、服务发现https://blog.csdn.net/qq_46023503/article/details/12831902302、Ribbon - 负载均衡https://blog.csdn.net/qq_46023503/article/details/12833228803、OpenFeign - 远程调用https://blog.csdn.…

Python接口测试实战1(下)- 接口测试工具的使用

本节内容 抓包工具的使用Postman的使用 抓包工具的使用 抓包工具简介 Chrome/Firefox 开发者工具: 浏览器内置&#xff0c;方便易用Fiddler/Charles: 基于代理的抓包&#xff0c;功能强大&#xff0c;可以手机抓包&#xff0c;模拟弱网&#xff0c;拦截请求&#xff0c;定制…

xpdf在windows下的编译记录

目录 1、下载源码 ​编辑 2、准备工作 3、编译freetype 3.1 打开vs工程 3.2 生成之后查看 4、编译zlib 5、编译libpng 6、编译lcms 7、编译xpdf 8、存在问题 1、下载源码 Xpdf官网下载&#xff1a;Download Xpdf and XpdfReader 2、准备工作 3、编译freetype 3.1 打…

财务数字化转型怎么转?从哪几个方面出发

财务的数字化转型如何进行&#xff1f;许多企业在推动各大业务部门进行数字化转型时&#xff0c;往往会忽略财务部门。然而&#xff0c;作为掌握公司核心资源与数据和推动企业数字化建设的部门&#xff0c;财务也应成为企业数字化转型的重要突破口。 这篇就用几个案例详细拆解…

React 入门:实战案例 Github搜索_静态组件

文章目录开发前的准备实现组件静态代码开发前的准备 目标实现页面效果, 及组件拆分&#xff0c;如下图所示 组件代码结构规划 外部资源准备 引入第三方样式 bootstrap CSS 样式库 bootstrap 官网有 v3、v4、v5 三个版本&#xff0c;本文使用的 v3 版本的样式&#xff0c;可…

JavaScript篇.day05-数组, 基本/引用数据类型函数调用区别

目录 1.Array数组 (1)简介 (2)数组的基本操作 (3)数组的遍历 a. 普通数组的遍历 b.对象数组的遍历 (4)数组对象常用方法 2.基本/引用数据类型函数调用区别 1.Array数组 (1)简介 数组时存放一组数据,长度可变的有序集合索引: 从0开始, 空数组索引无效稀疏数组, 其中含…

一文搞懂中台与产品微服务、SaaS的区别

出处&#xff1a;本文摘录自《中台产品经理》一书 谈到“中台”&#xff0c;我们不得不说的另外两个概念就是“微服务”与“SaaS”&#xff0c;有很多人会把“中台”与这两个概念画上等号。但实际上&#xff0c;中台 ≠产品微服务 ≠ SaaS。这两个概念看似与中台很相似&#xf…

因斯布鲁克大学发明一种更快的新型量子计算机

奇偶校验计算机可以在单个量子比特上执行两个或多个量子比特之间的操作&#xff0c;更容易实现复杂的算法。 该团队由 Wolfgang Lechner&#xff08;右一&#xff09;领导&#xff0c;包括Kilian Ender&#xff08;右二&#xff09;、Anette Messinger&#xff08;左二&#xf…

七天免登录(Cookie+session)+ 页面显示动画人物效果(萌娘+气泡效果)

一.七天免登录&#xff08;Cookiesession&#xff09;&#xff0c;基于实现jsp页面 页面效果&#xff1a;勾选7天免登录复选框&#xff0c;输入用户名和密码&#xff0c;点击登录即可&#xff0c;登录后可在cookie中查看用户登录信息&#xff0c;以及用户过期时间 1.登录页面&…

通过heartbeat实现mysql高可用

192.168.6.128 主/heartbeat1 192.168.6.129 从/heartbeat2 192.168.6.131 漂移地址 主备基础&#xff1a;需要在128和129服务器上&#xff0c;搭建mysql主从复制 环境基础配置 128、129操作 # sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/…

C语言进阶-字符

C语言进阶-字符 #include <stdio.h> int main(int argc, char const *argv[]) {int ch;while ( (ch getchar()) ! EOF ) [putchar(ch);{printf("EOF\n"); }return 0; }强制程序结束 window 字符串数组