支持向量机算法(SVM)详细讲解(含手推公式)(《机器学习》--周志华)

2023-11-16

#前言

    本人是一个本科到研究生都坚持本专业的人,但是,本科时间被狗吃了,目前还是小白一只,曾经以为考研之后要继续学习一技之长找个工作养活自己,当然,现在发现这都是自己想太多了,哈哈哈,读研之后才知道基础不好的人学习起来是多么困难,但是,既然选择了,哭着也要拿到毕业证啊。
     因为被老师安排讲解SVM算法并且推到公式,于是花了一些时间来研究和推到了SVM算法的公式。可能写的不够全,也可能由一些错的地方,第一次写博客,望多多指教。哈哈哈,说太多没用的,开始来看一下SVM吧!!

今天的内容:

  • 间隔与支持向量机
  • 对偶问题
  • 核函数
  • 软间隔
  • 支持向量回归

# 间隔与支持向量机

    支持向量机(support vector machines,SVM)是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。

    给定训练数据集 D = D= D={ ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) (x1,y1),(x2,y2),...,(xm,ym)}, y i ∈ y_{i}∈ yi{-1,+1},分类学习器最基本的想法就是基于训练集D在空间中找到一个划分平面,能够将不同的样本分开。如下图所示【图片来源网络】,在一个这个样本空间中,我们可以找到很多条划分平面能够将两类样本正确的分开,那么我们应该选择哪一条呢?或许你会说,当然是正中间那一条了,没错,如果你这么想,那么你已经知道SVM是用来干什么的了。

    正如你所想的,我们需要选择正中间的这条直线(图中红色的直线)作为我们的划分平面,因为这条直线的容错能力和泛化能力比较强,也就是说,当我们在样本空间中再增加一些样本,此时就会有很多划分平面不能再将样本正确的分开,而正中间这一条直线却还能正确的将样本区分开。我们的SVM算法就是要找到这样一个划分平面,使其能够将不同样本正确的分开并且对训练样本局部扰动的“容忍”性最好。     上述中提到的划分平面在SVM中就称为**超平面**,可以通过如下的线性方程来描述:

(1) w T x + b = 0 \bm{w^Tx}+b=0\tag{1} wTx+b=0(1)
其中, w = \bm{w}= w= ( w 1 , w 2 , . . . , w d ) (w_{1},w_{2},...,w_{d}) (w1,w2,...,wd)为法向量,决定超平面的方向,b为偏移项,决定超平面与原点之间的距离。划分超平面可记为 ( w T , b ) (\bm{w^T},b) (wT,b),样本空间中任意一点x到超平面的距离可写为:
(2) r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ . r=\frac{|\bm{w^Tx}+b|}{||w||}.\tag{2} r=wwTx+b.(2)
这个距离怎么得到的呢?下面请看我的推导:其中x是样本空间中任意一个样本, x 0 x_{0} x0是x再超平面上的投影,因此有 w T x 0 + b = 0 \bm{w^Tx_{0}}+b=0 wTx0+b=0,r为x到超平面的距离。

    假设超平面$(\bm{w^T},b)$能将训练样本正确分类,即对于任意的$(x_{i},y_{i})∈D$,若$y_{i}=+1$,则有$\bm{w^Tx}+b>0$;若$y_{i}=-1$,则有$\bm{w^Tx}+b<0$。我们令

(3) { w T x + b ≥ + 1 , y i = + 1 w T x + b ≤ − 1 , y i = − 1 \left\{ \begin{aligned} \bm{w^Tx}+b ≥&amp;+1 , y_{i}=+1\\ \bm{w^Tx}+b ≤&amp;-1, y_{i}=-1 \\ \end{aligned} \right.\tag{3} { wTx+bwTx+b+1,yi=+11,yi=1(3)

为什么可以这样写呢,而不是写成下面这样呢?

(4) { w T x + b ≥ 0 , y i = + 1 w T x + b ≤ 0 , y i = − 1 \left\{ \begin{aligned} \bm{w^Tx}+b ≥&amp;0 , y_{i}=+1\\ \bm{w^Tx}+b ≤&amp;0, y_{i}=-1 \\ \end{aligned} \right.\tag{4} { wTx+bwTx+b0,yi=+10,yi=1(4)
其实我们也是为了解释SVM的原理,同时也易于后面的计算和理解,下面来看一下下图【图片来源网络】:

我们可以从图中看出,式(3)表示的是,当样本属于正例时,样本就落在直线 w T x + b = 1 \bm{w^Tx}+b=1 wTx+b=1上方;当样本属于反列时,样本就落在直线 w T x + b = − 1 \bm{w^Tx}+b=-1 wTx+b=1下方。我们要找的不是中间那条超平面吗,为什么还要这两条直线呢?这里,我先引入两个概念。
    在样本空间中,总会有一些正例样本和反例样本距离超平面是最近的,这些样本点我们就称为”支持向量“(support vector),而过这些支持向量且平行于超平面的直线就是我们我们图中的两条直线 w T x + b = 1 \bm{w^Tx}+b=1 wTx+b=1 w T x + b = − 1 \bm{w^Tx}+b=-1 wTx+b=1。两个异类支持向量到超平面的距离之和为
(5) r = 2 ∣ ∣ w ∣ ∣ r=\frac{2}{||w||}\tag{5} r=w2(5)
它被称为”间隔“(margin)。

    你可能还有疑问,为什么支持向量间隔边界为什么就一定是 w T x + b = 1 \bm{w^Tx}+b=1 wTx+b=1 w T x + b = − 1 \bm{w^Tx}+b=-1 wTx+b=1呢?这里原则上说,这两条直线可以是 w T x + b = k \bm{w^Tx}+b=k wTx+b=k w T x + b = − k \bm{w^Tx}+b=-k wTx+b=k,这里我们的可以两边同时乘以 1 k \frac{1}{k} k1,然后令 w T = 1 k w T \bm{w^T}=\frac{1}{k}\bm{w^T} wT=k1wT,再令 b = 1 k b b=\frac{1}{k}{b} b=k1b,这时候我们就得到图中的边界直线 w T x + b = 1 \bm{w^Tx}+b=1 wTx+b=1 w T x + b = − 1 \bm{w^Tx}+b=-1 wTx+b=1,而超平面依然是 w T x + b = 0 \bm{w^Tx}+b=0 wTx+b=0,因此在这里,我们只是对w和b进行变换了。

    公式(5)我们怎么得到的呢?在前面我们就知道,我们需要找一个在两个异类正中间的超平面,这里我们就知道,两个异类的支持向量到超平面的距离是相等的,而对任意支持向量 x i , 都 有 x_{i},都有 xi, ∣ w T x + b ∣ = 1 |\bm{w^Tx}+b|=1 wTx+b=1,将其带入式(2),得到支持向量到超平面的距离都为: r = 1 ∣ ∣ w ∣ ∣ r=\frac{1}{||w||} r=w1,间隔等于支持向量到超平面的2倍,也就是式(5)。
    支持向量机的目标就是找到”最大间隔“(maximum margin)的划分超平面,也就是找到能够找到满足式(3)中约束的参数 w \bm{w} w和b,使得 r r r最大,即
(6) max ⁡ w , b 2 ∣ ∣ w ∣ ∣ s . t &ThinSpace;&ThinSpace;&ThinSpace;&ThinSpace;&ThinSpace;&ThinSpace; y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m {\max_{w,b} \frac{2}{||w||}}\\ s.t \,\,\,\,\,\, y_{i}(\bm{w^Tx_{i}}+b)≥1,i=1,2,...,m \tag{6} w,bmaxw2s.tyi(wTxi+b)1i=1,2,...,m(6)
    为了最大化间隔,仅需要最大化 ∣ ∣ w ∣ ∣ − 1 ||\bm{w}||^{-1} w1,这等价于最小化 ∣ ∣ w ∣ ∣ 2 ||\bm{w}||^2 w2,于是目标方程写成
(7) max ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t &ThinSpace;&ThinSpace;&ThinSpace;&ThinSpace;&ThinSpace;&ThinSpace; y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m {\max_{w,b} \frac{1}{2}||\bm{w}||^2}\\ s.t \,\,\,\,\,\, y_{i}(\bm{w^Tx_{i}}+b)≥1,i=1,2,...,m \tag{7} w,bmax21w2s.t</

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

支持向量机算法(SVM)详细讲解(含手推公式)(《机器学习》--周志华) 的相关文章

  • JAVA语言特点

    Java语言特点 Java语言是面向对象的 oop Java语言是健壮的 Java的强类型机制 异常处理 垃圾的自动收集等是Java程序健壮性的重要保障 Java语言是跨平台性的 即一个编译好的 class文件可以在多个系统下运行 借助各系
  • 创建Vue3.0工程和常用 Composition API

    一 创建Vue3 0工程 1 使用 vue cli 创建 官方文档 https cli vuejs org zh guide creating a project html vue create 查看 vue cli版本 确保 vue cl
  • QWidget关闭子窗口后显示主窗口(父窗口)

    已经弃坑 不再使用Qt工具 有疑问可以查阅博主的其它博客 看看有没有解决方案 如果还没有可以百度或Google搜一下其他博主的教程 谢谢 Holle 好久没见了 据我上次发博客已经过去很久 今天呢 带给大家一个Qt上的小问题 好多初学者在Q
  • 回顾篇-SpringBoot-Tomcat

    为什么写 今天看了Spring实战第五版 里边有句话如下 传统的基于Servlet的Web框架 如Spring MVC 在本质上都是阻塞和多线程的 每个连接都会使用一个线程 在请求处理的时候 会在线程池中拉取一个工作者 worker 线程来
  • Linux下修改密码命令及查看密码修改时间

    Linux下修改密码命令及查看密码修改时间 1 如修改用户liu的密码为123456 在root用户下执行 echo 123456 passwd stdin liu 2 查看密码修改时间 date d 1970 01 01 more etc
  • CloudCompare——计算点云的KD树并可视化

    目录 1 功能概述 2 完整操作 3 算法源码 4 相关代码 1 功能概述 使用Tools gt Sand box research gt compute kd tree访问此工具 该功能可以用于论文写作中的KD树绘图 2 完整操作 3 算
  • 你的小程序

    你的小程序还未设置管理员信息 无法被绑定 你可先访问mp weixin qq com 在 用户身份 页面设置管理员信息后即可进行绑定 解决方法 换一个浏览器 别用火狐 真XXX 但解决放哪就这么简单
  • 如何在Visual Studio给多行代码进行注释和取消注释

    如何在Visual Studio给多行代码进行注释和取消注释 用鼠标选中要注释的代码 先按Ctr K 键 再按 Ctrl C 键进行注释多行代码 如果要取消注释 用鼠标选中被注释的代码 先按Ctrl K 再按 Ctrl U 即可取消注释
  • 中文OCR识别

    在闲暇时刻做了一个中文识别能力的工程 工程主要对中文文字进行识别 当前工程没有检测文本能力 后续会加入 文本字段在32000验证集合上准确率为83 2 可识别中文字符5990 由于没有时间做太多优化 可能对于相近字体的准确率并不太高 但是可
  • 拿来即用的 Python SSH+SFTP 实现类

    一个拿来即用的 Python SSH 和 SFTP 实现类 可用于 与 Linux 服务器建立持续交互的 SSH 会话 从 Linux 服务器下载远程文件 上传本地文件到 Linux 服务器 新创建一个 linux client py 文件
  • Vue.js中的v-model指令(双向绑定)

    Vue js中v model的作用 v model的作用和使用场景 1 v model的作用 双向绑定 2 v model双向绑定的使用场景 表单 3 总结 v model的作用和使用场景 你好 Vue js作为现在最为常用的前端框架之一
  • UI自动化测试通过飞书发送告警信息

    1 发送纯文本消息 1 1代码如下 usr bin env python coding utf 8 import json import requests url https open feishu cn open apis bot v2
  • Matting(抠图)--用深度学习自动去除照片背景

    转自 https zhuanlan zhihu com p 38031181 https zhuanlan zhihu com p 151212267 现在又有一个 AI 能干 Photoshop 的活了 自动抠图 一键去除照片背景 这款
  • AD如何画多图纸原理图

    很多东西都讲究模块化 比如 程序模块化 原理图也不例外 模块化后的原理图更能直观的显示其原理 文章中操作的图标是什么功能可以先看下参考文献中的博客在来看看我的这篇博客 效果会更好 原本以为原理图多图纸很难 其实也差不多 只是多了几步罢了 多
  • getClassLoader()返回null,getClassLoader()获取为空

    一 问题描述 通过getClassLoader 的方式获取jar包中的资源 为空 this getClassLoader getResources com xxxx test Start class hasMoreElements this
  • gin context和官方context_go-gin框架入门

    gin入门 介绍 gin是一个golang的微框架 封装比较优雅 api友好 源码注释比较明确 具有快速灵活 容错方便等特点 对于golang而言 web框架的依赖要比python java之类的要小的多 完全使用自身net http包封装
  • 课时 10 自测题

    使用存储快照功能需要用到哪些 Kubernetes API 资源对象 多选题 A VolumeSnapshot B VolumeSnapshotClass C VolumeSnapshotContent D PersistentVolume
  • C++学习 十、函数重载,函数模板

    C 学习 十 函数重载 函数模板 前言 函数重载 二义性 强制类型转换 类型与类型引用 默认参数 const指针参数和const引用参数 函数模板 模板函数声明与定义 函数模板重载 显式实例化 显式具体化 重载解析 引导编译器使用函数模板
  • Box layout

    Layout management with layout classes is much more flexible and practical It is the preferred way to place widgets on a
  • Vue3+TypeScript 完整项目上手教程

    转自 Vue3拥抱TypeScript的正确姿势 https juejin im post 6875713523968802829 一个完整的Vue3 Ts项目 支持 vue和 tsx写法 项目地址 https github com vin

随机推荐

  • Tomcat的安装与环境变量配置(图文详解)

    Tomcat的安装与环境变量配置 首先说明一下我的电脑配置 Windows 7 专业版 64位操作系统 安装内存8G 四核处理器 一 Tomcat的下载与安装 1 进入Tomcat官网 https tomcat apache org 2 在
  • soap错误码和获取处理错误码的详细信息

    gsoap页面 https www genivia com doc guide html index html soap客户端用户登录返回值错误代码表 ERROR CODE SOAP EOF 1 Unexpected end of file
  • const 在C和C++ 中的区别

    目录 c中的const C 中的const const修饰指针 const修饰引用 const是construct的缩写 是c c 语言中的类型限定符 采用const修饰变量 功能是对变量声明为只读特性 并保护变量值以防被修改 c中的con
  • 最新版Adobe2023:After Effects 2023(Ae2023) win/mac版中文特别版

    Adobe After Effects 2023 AE2023 它用于视频处理后期制作 创建音乐视频 广告 动画 标题以及许多其他需要数字视频效果的元素 Adobe After Effects提供了出色的控制功能 广泛的创意工具以及与其他视
  • 香港云服务器怎么样_硅云服务器评测

    这次我来给大家测试下香港云服务器 本次测试选用的硅云香港可用一区 使用到的配置是2H2G 官方文档介绍说通用型g1是50 cpu性能 因为想用Linux 只是做下简单评测 就选择了通用型 正式使用的朋友建议买标准型S 100 CPU性能 一
  • android studio gradle 下载失败万能解决方案

    The specified Gradle distribution https services gradle org distributions gradle 7 2 2 bin zip does not exist 报错如上 介绍个绝对
  • 飞腾平台 银河麒麟 安装nginx

    飞腾平台 银河麒麟 安装nginx 1 在 home目录输入命令新建npf文件夹 mkdir npf 进入npf 目录输入命令新建nginx server文件夹 mkdir nginx server 2 将以下安装包上传到nginx ser
  • U-boot在S3C2440上的移植详解(一)

    本文转载至 http www embeddedlinux org cn html jishuzixun 201303 16 2499 html 一 移植环境 主 机 VMWare Fedora 9 开发板 Mini2440 64MB Nan
  • 小程序开发之 wx.getUserInfo获取用户信息方案介绍

    原文链接 https www cnblogs com kenshinobiy p 9118024 html 背景 小程序一个比较重要的能力就是获取用户信息 也就是使用 wx getUserInfo 接口 我们发现几乎所有的小程序都会调用这个
  • websocket有什么特点

    websocket有什么特点 答 websocket的最大特点就是 服务器可以主动向客户端推送信息 客户端也可以主动向服务器发送信息 是真正的双向平等对话 属于服务器推送技术的一种 1 建立在tcp协议之上 服务器端的实现比较容易 2 与H
  • 多线程处理

    https www runoob com python3 python3 multithreading html import requests import threading import time import xlrd import
  • 二维数组分组,一行显示5个,适合在table里面显示,php控制显示的数据

    需求 把数据平均显示到table的显示框内 如一行5个数据 效果 方法代码 一行展示N个数据 param int type 默认1 可扩展 param int num 一行显示的个数 可设置 param arrs 二维数组 static f
  • 强化学习学习

    强化学习一些基本概念 强化学习是除了监督学习和无监督学习的第三种机器学习方法 监督学习 Supervised Learning 是从外部监督者提供的带标注训练集中进行学习 任务驱动 无监督学习 Unsupervised Learning 是
  • 003 C++基础篇

    前言 大家好 本文将会向您介绍引用 定义 使用场景 引用与值分别作为返回值和参数时的性能比较 引用的权限 引用 一 引用是什么 引用 定义一个变量的别名 不是新定义一个变量 而是给已经存在的变量取了一个别名 编译器不会为引用变量单独开辟一个
  • WPF应用程序最小化到系统托盘

    using System using System Collections Generic using System ComponentModel using System Windows using System Windows Inpu
  • Unity3D跑酷游戏开发-游戏结束分数排名当前高能显示 (原创教程)

    一般游戏结束后都会有个分数排名板 接下来让分析这功能 1 游戏结束后显示高分排列 当前玩家分数高能显示 如果能进入排名板 2 数据必须持久化 切换场景 关闭开启游戏都要能用 流程 游戏结束后 调出排名板 1 取得上次的所有排名数据保存到li
  • elasticsearch查询

    环境 es1 3 eclipse jdk1 8 问题 刚开始用游标查询 再用游标获取数据 查询耗时较慢 解决办法 不使用游标查询 直接根据条件查询 es查询参考网址 https www cnblogs com chenyuanbo p 10
  • 数据库内连接、左外连接、右外连接中的on、and、where条件使用

    数据库各种连接方式的on and where条件使用 文章目录 前言 使用on条件 A为主表 使用on条件 B为主表 使用on and主表条件 使用on where主表条件 使用on and条件 a type lt gt 1 使用on wh
  • GOME-2 SIF 数据链接

    目录 一 xiao Jinfeng 文章GOME 2 SIF 数据链接 网站 说明 引用 网页预览 一 xiao Jinfeng 文章GOME 2 SIF 数据链接 网站 https acd ext gsfc nasa gov People
  • 支持向量机算法(SVM)详细讲解(含手推公式)(《机器学习》--周志华)

    前言 本人是一个本科到研究生都坚持本专业的人 但是 本科时间被狗吃了 目前还是小白一只 曾经以为考研之后要继续学习一技之长找个工作养活自己 当然 现在发现这都是自己想太多了 哈哈哈 读研之后才知道基础不好的人学习起来是多么困难 但是 既然选