机器学习笔记:支持向量机SVM

news2024/11/15 21:29:47

1 一些概念

1.1 线性可分

  • 在二维空间上,两类点被一条直线完全分开叫做线性可分。
  • 严谨的说法是:
    • D0和 D1 是 n 维欧氏空间中的两个点集。
    • 如果存在 n 维向量 w 和实数 b,使得所有属于 D0 的点 xi 都有 wxi+b>0 ,而对于所有属于 D1 的点 xj 则有 wxj+b<0 ,则我们称 D0 和 D1 线性可分。

 1.2 最大间隔超平面

但是,问题来了,如果有很多的超平面可以分割这两类点,那么应该选择哪一条呢

 答案是找最佳超平面,以最大间隔把两类样本分开的超平面,也称之为最大间隔超平面。

  • 两类样本分别分割在该超平面的两侧;
  • 两侧距离超平面最近的样本点到超平面的距离被最大化了。

1.3 支持向量

  •  样本中距离超平面最近的一些点,这些点叫做支持向量

1.4 点到直线的距离

二维空间点 (x,y) 到直线 Ax+By+C=0 的距离为:\frac{|Ax+By+C|}{\sqrt{A^2+B^2}}

2 SVM

2.1 最优化问题

2.1.1 支持向量到超平面距离推导

  • SVM 希望找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面
  • 我们记某一超平面为:w^Tx+b=0

    • 则点x=(x_1,x_2,\cdots,x_n)到超平面w^Tx+b=0的距离为:\frac{|w^Tx+b|}{||w||}
    • ||w||=\sqrt{w_1^2+\cdots+w_n^2}
  • 于是我们有:

  • 即: 

  • ||w||d是正数,且令其为任何值都不会对优化结果有影响

    • ——>不妨令||w||d=1

    • 所以有 

  • 将方程组合并,有:y(w^Tx+b) \ge 1(等于1的地方就是支持向量)

 2.1.2  最优化问题目标函数

通过上一小节我们知道:

  • 支持向量处w^Tx+b=1
  •  点x=(x_1,x_2,\cdots,x_n)到直线w^Tx+b=0的距离为:\frac{|w^Tx+b|}{||w||}

  • ——>支持向量到超平面的距离是\frac{1}{||w||}

  • ——>margin=\frac{2}{||w||}

我们希望最大化margin,即max \frac{2}{||w||};

分子分母调换位置,有:min \frac{1}{2}||w||

此时计算||w||时要带根号,为了方便计算,我们将上式改写成min \frac{1}{2} ||w||^2

所以最优化问题是

 2.2 最优化问题求解

目前SVM问题是一个带不等式的最优化问题

数学知识笔记:拉格朗日乘子_UQI-LIUWJ的博客-CSDN博客

根据KKT条件,我们有

2.3 最优化问题对偶问题

根据数学知识笔记:拉格朗日乘子_UQI-LIUWJ的博客-CSDN博客

 我们可以写出原始问题的对偶形式:

(λ≥0)

 2.3.1 求解过程

  • 先看里面 min 部分,对w和b求偏导:
  • 得到:
  • 带回到L(w,b,λ)中,有:

——>去掉min一层,对偶问题就转化为:

 之后利用SMO(Sequential Minimal Optimization) 算法求解各个λ,然后通过λ求W

W求得后,可以求解b:(S为支持向量的集合)

 3 软间隔

3.1 不完全线性可分问题

完全线性可分的样本是很少的,如果遇到了不能够完全线性可分的样本,应该怎么办?

 3.2 软间隔

相比于硬间隔的苛刻条件,软间隔允许个别样本点出现在间隔带里面

引入松弛变量\xi_i从原来硬间隔的y_i(w^Tx_i+b) \ge 1变成 y_i(w^Tx_i+b) \ge 1-\xi_i

 

3.2.1 软间隔优化问题

  •  增加软间隔后,优化目标变成了:
  • C 是一个大于 0 的常数,可以理解为错误样本的惩罚程度
    • 若 C 为无穷大, ξi 必然无穷小,如此一来就又变成了线性可分 SVM
    • 当 C 为有限值的时候,会允许部分样本不遵循约束条件。

3.2.2 软间隔拉格朗日函数

3.2.3 软间隔对偶问题

 

 分别对主问题参数w、b 和 ξi 求偏导数,并令偏导数为 0,得出如下关系:

 将这些关系带入拉格朗日函数中,得到:

最小化结果只有 λ 而没有 μ ,所以现在只需要最大化 λ 就好: 

这个和硬间隔的一样,只是多了个约束条件。

同样地, 之后利用SMO(Sequential Minimal Optimization) 算法求解各个λ,然后通过λ求W

W求得后,可以求解b:(S为支持向量的集合,这里间隔内的那部分样本也是支持向量

4 非线性SVM

前面讨论的硬间隔和软间隔都是在说样本的完全线性可分或者大部分样本点的线性可分。

但我们可能会碰到的一种情况是样本点不是线性可分的,比如:

 这种情况的解决方法就是:将二维线性不可分样本映射到高维空间中,让样本点在高维空间线性可分,比如:

对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性 SVM。 

我们用 x 表示原来的样本点,用 ϕ(x) 表示 x 映射到特征新的特征空间后到新向量。那么分割超平面可以表示为: f(x)=wϕ(x)+b 。

对于非线性 SVM 的对偶问题就变成了:

 可以看到与线性 SVM 唯一的不同就是:之前的 (xi⋅xj) 变成了 (ϕ(xi)⋅ϕ(xj)) 。

4.1 非线性SVM VS 线性SVM

  •  不难发现,如果不使用对偶形式的话,映射关系的计算和存储也是一个大问题

5 多分类问题

参考内容:【机器学习】支持向量机 SVM(非常详细) - 知乎 (zhihu.com)

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

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

相关文章

【面试题】 ES6知识点详细解析

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 &#x1f354;let const 其他知识点补充 块级作用域的补充 const 不可以在循环体里面声明变量给大家推荐一个实用面试…

从零备战蓝桥杯——动态规划(背包dp篇)

双非刷leetcode备战2023年蓝桥杯&#xff0c;qwq加油吧&#xff0c;无论结果如何总会有收获&#xff01;一起加油,我是跟着英雄哥的那个思维导图刷leetcode的&#xff0c;大家也可以看看所有涉及到的题目用leetcode搜索就可以哦&#xff0c;因为避让添加外链&#xff0c;一起加…

【JavaWeb】之Tomcat介绍、安装与使用

【JavaWeb】Tomcat前言一、Tomcat简介1.什么是Tomcat2.其他常用Web服务器二、Tomcat安装1.下载Tomcat2.配置环境变量三、Tomcat使用1.启动与关闭Tomcat2.修改Tomcat的端口号和主机名称3.使用IDEA搭建Web开发环境4.在Tomcat中部署web项目四、Web项目目录结构五、网站访问流程后记…

【Linux】yum vim 基础工具的使用

文章目录1. Linux环境下的软件包管理器---- yum1.2 什么是软件包1.3 yum源镜像配置1.4 yum查看软件包1.5 yum 如何安装软件1.6 yum 如何卸载软件2. Linux编辑器--vim2.1 vim 简介2.2 . vim的基本操作2.3 vim命令模式下的命令集2.3.1 光标移动2.3.2 编辑2.4 vim末行模式下的命令…

Python入门自学进阶-Web框架——24、DjangoAdmin项目应用-定制页面2

这里要实现点击对应的表名称&#xff0c;显示具体表的详细内容&#xff0c;大致的流程是&#xff1a; 前端显示各个表名&#xff0c;如下&#xff1a; <tbody>{% for table_name,admin in app_tables.items %}<tr class"border-bottom"><td style&…

彻底理解Java并发:volatile关键字

本篇内容包括&#xff1a;volatile 关键字简介、volatile 保证可见性&#xff08;包括&#xff1a;关乎不可见性问题描述、JMM内存模型和不可见性的解决方案&#xff09;以及 volatile 其他特性&#xff08;包括&#xff1a;volatile 不保证原子性、volatile 原子性的保证操作、…

mysql-高级命令(1)和一些函数(悟已往之不谏,知来者之可追)

一、高级命令 1.查询某个字段和多个字段 select 某个字段&#xff08;或者多个字段&#xff0c;中间以逗号间隔&#xff09;from 表名&#xff1b; 2. 去除字段的重复值 3.and 表示&#xff08;两个条件都需要满足&#xff09; 4.or &#xff08;两个条件满足一点&#xff09;…

【Linux】软件包管理器 yum 与编辑器 vim 的基本使用

文章目录一、yum 背景知识1、商业生态2、开源生态3、软件生态本土化二、yum 的基本使用1、查看软件包2、安装软件3、卸载软件三、vim 的基本使用1、vim 的基本概念2、vim 的基本操作2.1 模式间切换2.2 光标定位2.3 文本复制2.4 文本编辑2.5 底行模式的操作四、简单 vim 配置2、…

SpringBoot+SpringCloud+Nutty打造分布式在线消息推送服务(实例)

文章目录前言技术架构效果图后端项目消息数据定义存储结构消息状态Nutty消息服务项目结构改动消息bean消息处理器消息转换pojo工具审核消息处理controller实现类服务调用前端连接代码初始化接受消息消息的展示效果总结前言 其实关于这个的话&#xff0c;我先前的几篇博文&…

css选择器

碎碎念&#xff1a;都是一些自己在学习过程中的一点体会&#xff0c;如果有什么不对的感谢大家指正一起学习&#xff01; css选择器一、常用选择器二、属性选择器三、其他五、栗子1. * 通配符2. 空格 div p3. > 子选择器4. ~ 通用兄弟选择器5. 相邻兄弟选择器6. , 选择器分…

使用 Vercel 快速部署前端项目

Vercel&#xff1a;一键部署前端项目。 前端项目部署的问题 先来说下前端项目的部署&#xff0c;一般来说有以下几个步骤&#xff1a; 项目打包上传到服务器域名解析SSL 证书申请Nginx 配置CDN 加速 如果是公司的项目&#xff0c;打包之后的步骤一般有专门的运维人员负责&am…

C++:多态

文章目录一、多态的概念二、多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写(覆盖)2.4 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比三、抽象类四、继承和多态常见的面试问题1.2.总结一、多态的概念 多态按字面的意思就是多种形态。当类之间存在…

瞪羚优化算法(Gazelle Optimization Algorithm,GOA)

瞪羚优化算法&#xff08;Gazelle Optimization Algorithm&#xff0c;GOA&#xff09;由Agushaka等人于2022年提出&#xff0c;该算法模拟了瞪羚逃避捕食者的行为&#xff0c;思路新颖&#xff0c;性能高效。 瞪羚的身高60-110厘米&#xff0c;体重13-29千克。该属物种有像小鹿…

【Linux】基本指令(上)

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;操作系统&…

Linux - 第2节 - Linux环境基础开发工具使用

1.Linux 软件包管理器 yum centos 7中安装软件的方式&#xff1a; &#xff08;1&#xff09;源码安装 &#xff08;2&#xff09;rpm包安装 &#xff08;3&#xff09;yum安装 yum安装的好处&#xff1a; &#xff08;1&#xff09;不用编译源码 &#xff08;2&#xff09;不用…

赶紧进来看看---C语言实现学生信息管理系统(2.0动态内存版)

本文介绍了将学生信息管理系统静态版本改造为动态内存版本,主要涉及改造思路,枚举类型的使用,动态内存函数和柔性数组的使用,动手写程序才能使基础知识更为牢固…(文章最后有源码展示) 学生信息管理系统1.0静态版->学生信息管理系统2.0动态内存版 c语言实现学生信息管理系统…

在python中使用ggplot2

python的ggplot2库:plotnine > 一.安装方法&#xff1a; pip install plotnine使用的编译器&#xff1a;pycharm 二.plotnine绘图 1.第一个图形 除了导包的操作不一致&#xff0c;其他类似 from plotnine import ggplot, geom_point, aes, stat_smooth, facet_wrap fr…

70.【JavaScript 6.0】

前端三要素1.前端三要素2.引入JavaScript3.JavaScript基本语法入门4.数据类型5.严格检查模式( use strict)6.Map和Set7.函数的定义和参数获取8.变量的作用域(局部 全局)-------> 和Java一样9.全局规范:10.方法的定义和调用11.内部对象1.Date--------->日期2.JSON--------…

自定义mybatis插件实现sql日志打印

自定义mybatis插件实现sql日志打印 mysql插件实现原理 官网的关键信息 参考文档 https://mybatis.org/mybatis-3/zh/configuration.html#plugins 官方文档 MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下&#xff0c;MyBatis 允许使用插件来拦截的方…

【JavaSE】一篇文章领悟Java运算符

前言&#xff1a; 作者简介&#xff1a;爱吃大白菜1132 人生格言:纸上得来终觉浅&#xff0c;绝知此事要躬行 如果文章知识点有错误的地方不吝赐教&#xff0c;和大家一起学习&#xff0c;一起进步&#xff01; 如果觉得博主文章还不错的话&#xff0c;希望三连支持&#xff01…