第六章:支持向量机

目录

6.1 间隔与支持向量

6.2 对偶问题

6.3 核函数

6.4 软间隔与正则化

6.4.1 软间隔

6.4.2 正则化

6.5 支持向量回归

6.6 核方法

6.1 间隔与支持向量

分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开.但能将训练样本分开的划分超平面可能有很多,如下图所示

图6.1 划分超平面

“正中间”的:鲁棒性最好,泛化能力最强

超平面方程:

w^Tx+b=0

样本空间中任意点到超平面(w,b)的距离可写为:

r=\frac{|w^T+b|}{||w||}

如图6..1.2所示,距离超平面最近的这几个训练样本点点到超平面的距离为1,它们被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为:

\gamma =\frac{2}{||w||}

图6.1.2 支持向量与间隔

 现在我们需要找到最大间隔的划分超平面,使y最大

6.2 对偶问题

支持向量机本身是一个二次规划问题,能用优化计算包求解,但可以有更高效的办法

拉格朗日乘子法:

  • 第一步:引入拉格朗日乘子法\alpha _i\geq0得到拉格朗日函数:

L(w,b,a)=\frac{1}{2}||w||^2+\sum_{i=1}^{m}a_i(1-y_i(w^Tx_i+b))

  • 第二步:令L(w,b,a)对w和b的偏导为零可得:

w=\sum_{i=1}^{m}a_iy_ix_i,0=\sum_{i=1}^{m}a_iy_i

  • 第三步:回代可得:

最终模型:

f(x)=w^T+b=\sum_{i=1}^{m}a_iy_ix_i^Tx+b 

需要满足KKT条件:

\left\{\begin{matrix} a_i\geq 0\\ 1-y_if(x_i)\leq 0\\ a_i(1-y_if(x_i))=0 \end{matrix}\right.

必有a_i=0y_if(x_i)=1

  • 解的稀疏性:

训练完成后,最终模型仅与支持向量有关

这个解法还不够方便,还有更容易的方法:

  • SMO:

基本思路:不断执行如下两个步骤直至收敛

  • 第一步: 选取一对需更新的变量a_ia_j
  • 第二步: 固定a_ia_j以外的参数,求解对偶问题更新a_ia_j

仅考虑a_ia_j时,对偶问题的约束0=\sum_{i=1}^{m}a_iy_i变为

 用a_i表示a_j,代入对偶问题,这样就有闭式解。

对任意支持向量(x_s,y_s)y_sf(x_s)=1,可以解出b

但现实任务中常采用一种更鲁棒的做法:使用所有支持向量求解的平均值

b=\frac{1}{|S|}\sum_{s\in S}^{}(\frac{1}{y_s}-\sum_{i\in S}^{}a_iy_ix_i^Tx_s)

6.3 核函数

若不存在一个能正确划分两类样本的超平面,怎么办?

将样本从原始空间映射到一个更高维的特征空间,使样本在这个特征空间内线性可分

图6.3.1 异或问题与非线性性映射

如果原始空间是有限维(属性数有限),那么—定存在一个高维特征空间使样本线性可分

  • 原始问题:

  • 对偶问题:

  • 预测:

 计算高维的内积非常困难,所以我们设想了一个函数(核函数):

k(x_i,x_j)=\phi (x_i)^T\phi (x_j)

绕过显式考虑特征映射、以及计算高维内积的困难

Mercer定理: 若一个对称函数所对应的核矩阵半正定,则它就能作为核函数来使用

任何一个核函数,都隐式地定义了一个RKHS(Reproducing Kernel HilbertSpace,再生核希尔伯特空间)
“核函数选择”成为决定支持向量机性能的关键!

6.4 软间隔与正则化

6.4.1 软间隔

现实中很难确定合适的核函数。使训练样本在特征空间中线性可分,即便貌似线性可分,也很难断定是否是因过拟合造成的
引入软间隔(Soft Margin),允许在一些样本上不满足约束

图6.4.1 软间隔示意图,红色为不满足约束

 基本思路: 最大化间隔的同时,让不满足约束y_i(w^Tx_i+b)≥1的样本尽可能少

 

 障碍:0/1损失函数非凸、非连续、不易优化!

图6.4.2 三种替代损失函数
  • 采用替代损失函数,是在解决困难问题时的常见技巧
  • 求解替代函数得到的解是否仍是原问题的解?理论上称为替代损失的“—致性”(Consistency)问题

 软间隔支持向量机:

  • 原始问题:

  • 引入”松弛量“:

  • 对偶问题:

根据KKT条件可知,最终模型仅与支持向量有关,也即采用hinge损失函数后仍保持了sVM解的稀疏性

6.4.2 正则化

统计学习模型的更一般形式:

min_f\Omega (f)+C\sum_{i=1}^{m}l(f(x_i),y_i)

 \Omega (f)是结构风险(也被称为正则化项),描述模型本身的某些性质,l(f(x_i),y_i)是经验风险,描述模型与训练数据的契合程度

  • 正则化可理解为“罚函数法”
  • 通过对不希望的结果施以惩罚,使得优化过程趋向于希望目标从贝叶斯估计的角度,则可认为是提供了模型的先验概率

6.5 支持向量回归

基本思路:允许模型输出与实际输出间存在2\varepsilon的差别

标题

 落入2\varepsilon间隔带的样本不计算损失

  • 原始问题:

  • 对偶问题:

  • 预测:

6.6 核方法

  • 表示定理:

令H为核函数k对应的再生核希尔伯特空间,优化问题:

解为:

h^*(x)=\sum_{i=1}^{m}a_ik(x,x_i)

对于一般的损失函数和正则化项,优化问题的最优解h*(z)都可表示为核函数的线性组合

核方法:核函数的学习方法

  • 核化:

将线性学习器拓展为非线性学习器,从而得到“核线性判别分析”

通过某种映射将样本映射到一个特征空间,然后进行线性判别分析,求得:

h(x)=w^T\phi (x)

 KLDA学习目标:

用核函数来替代高维的内积,

h(x)=\sum_{i=1}^{m}a_ik(x,x_i)

可得:

w=\sum_{i=1}^{m}a_i\phi (x_i)

最后KLDA学习目标可等价为:

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

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

相关文章

【宝藏系列】模/数转换十大常用滤波算法

【宝藏系列】模/数转换十大常用滤波算法 文章目录 【宝藏系列】模/数转换十大常用滤波算法👨‍🏫ADC(Analog-to-Digital Converter,模数转换器)1️⃣限幅滤波法2️⃣中位值滤波法3️⃣算术平均滤波法4️⃣递推平均滤波…

PLC通过IGT-SER系列智能网关快速实现WebService接口调用案例

IGT-SER系列智能网关支持PLC设备数据对接到各种系统平台,包括SQL数据库,以及MQTT、HTTP协议的数据服务端;通过其边缘计算功能和脚本生成的工具软件,非常方便快速实现PLC、智能仪表与WebService服务端通信。 本文是通过智能网关读取…

Ubuntu 22.04.4 LTS (linux) GoAccess 分析 Nginx 日志

1 安装goaccess sudo apt-get update sudo apt-get install goaccess 2 控制台运行 goaccess -a -d -f /usr/local/openresty/nginx/logs/access.log -p /etc/goaccess/goaccess.conf #sudo vim /etc/goaccess/goaccess.conf time-format %H:%M:%S date-format %d/%b…

van-dialog 组件调用报错

报错截图 报错原因 这个警告表明 vue 在渲染页面时遇到了一个未知的自定义组件 <van-dialog>&#xff0c;并且提示可能是由于未正确注册该组件导致的。在 vue 中&#xff0c;当我们使用自定义组件时&#xff0c;需要先在 vue 实例中注册这些组件&#xff0c;以便 vue 能…

Emacs之解决无法输入中文问题(一百四十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

基于YOLO8的目标检测系统:开启智能视觉识别之旅

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 target_dec_app.py 二、核心代码介绍篇2.1 target_dec_app.py2.2 scan_taskflow.py 三、结语 在线体验 基于YOLO8的目标检测系统 基于opencv的摄像头…

Provisional headers are shown Learn more

Provisional headers are shown Learn more 目录 Provisional headers are shown Learn more 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医…

什么情况下的网站要使用CDN加速呢?

CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。 CDN的通俗理解就是网站加速&#xff0c;CPU均衡负载&#xff0c;可以解决跨运营商&#xff0c;跨地区&#xff0c;服务器负载能力过低&#xff0c;带宽过少等带来的网站打开速度慢等问题。 原理就是在客户端…

如何解除maven打包编译的警告日志:[WARNING] 未与 -source 21 一起设置系统模块的位置

在用jdk较高的版本进行maven项目的打包编译时&#xff0c;经常遇到类似“[WARNING] 未与 -source 21 一起设置系统模块的位置”这样的警告日志&#xff0c;如下&#xff1a; 网上大量搜索该问题的解决方案&#xff0c;却未果&#xff0c;无耐去看了官网的用法&#xff0c;才获得…

Java项目中整合多个pdf合并为一个pdf

一、Java项目中整合多个pdf合并为一个pdf gitee笔记路径&#xff1a;https://gitee.com/happy_sad/drools一、依赖导入 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version> …

ts 下使用 interactjs 的时候,事件类型该如何定义 InteractEvent

ts 下使用 interactjs 的时候&#xff0c;事件类型该如何定义 InteractEvent 一、问题 interactjs 是一个很好用的给元素添加拖动事件的插件&#xff0c;它可以实现如下的效果。 其官网是 https://interactjs.io/ vitetsvue3 项目中用到了 interactjs 这个库&#xff0c;但在…

事务、函数和索引

M y S Q L 事 务 什么是事务&#xff1f; 事务&#xff08;Transaction&#xff09;&#xff0c;就是将一组SQL语句放在同一批次内去执行&#xff0c;如果一个SQL语句出错&#xff0c;则该批次内 的所有SQL都将被取消执行。 特点&#xff1a;一个事务中如果有一个数据库操作…

【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结

文章目录 文件存储存储到文件读取文件 SharedPreferences存储存储获取SharedPreferences对象Context 类的 getSharedPreferences() 方法Activity 类的 getPreferences() 方法PreferenceManager 类中的 getDefaultSharedPreferences() 方法 示例 读取记住密码的功能 SQLite数据库…

学习OCR具体使用

暂时找了三种&#xff0c;有一些问题待解决 Tesseract-OCR1. 安装库&#xff1a;2. 安装Tesseract-OCR&#xff1a;3. 安装中文语言包&#xff1a;4. Python代码&#xff1a;5. 运行结果 cnOCR1. 安装cnOCR&#xff1a;2. 使用cnOCR进行OCR&#xff1a;3. 运行结果 PaddleOCR1.…

vue 实战 区域内小组件元素拖拽 示例

<template><div><el-button type"primary" click"showDialog true">快捷布局</el-button><el-dialog title"快捷布局配置" :visible.sync"showDialog"><el-row :gutter"20"><el-co…

柯达sd卡数据丢失怎么办?分享有效数据恢复方法

随着科技的进步&#xff0c;数码相机已成为我们生活中不可或缺的一部分&#xff0c;而柯达作为摄影界的知名品牌&#xff0c;其相机及配件更是广受欢迎。然而&#xff0c;在日常使用中&#xff0c;难免会遇到数据丢失的情况&#xff0c;特别是SD卡中的数据丢失&#xff0c;常常…

大模型技术:发展历程、经典模型、微调与应用[更新中...]

文章目录 一、预训练语言模型发展历程二、经典的Pre-trained任务2.1 Masked Language Modeling2.2 Next Sentence Prediction 三、Task-specific Fine-tuning 任务3.1 Single-text Classification (单句分类)3.2 Sentence-pair Classification (句子匹配/成对分类)3.3 Span Tex…

Java3-final,singleInstance,enum

final可以用来修饰类、方法、变量 public static final -- 修饰常量 singleInstance-单例&#xff1b;一个类永远只存在一个对象 1、饿汉单例&#xff1b; --通过类获取单例对象的时候&#xff0c;对象已经提前做好了 --实现&#xff1a; 2、懒汉单例 --通过类获取单例对象…

C++第二十七弹---优先级队列的高级应用:结合仿函数优化性能

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 priority_queue的介绍和使用 1.1 priority_queue的介绍 1.2 priority_queue的使用 2 仿函数的介绍和使用 2.1 仿函数的介绍 2.2 仿函数的…

Java的类加载机制

Java的类加载机制是指将类的字节码文件&#xff08;.class文件&#xff09;加载到JVM中并将其转换为Class对象的过程。这个过程由类加载器&#xff08;ClassLoader&#xff09;完成。Java的类加载机制具有动态性和灵活性&#xff0c;使得Java能够支持动态加载类、实现模块化开发…