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

支持向量机(SVM)

一、支持向量机核心目标与基本概念

1. 核心需求

在样本空间里找到一个 “划分超平面”,把不同类别的样本明确分开,这是支持向量机解决分类问题的核心目的。

2. 理想超平面的标准

理想的划分超平面对训练样本的 “局部扰动容忍性” 最好 —— 也就是说,哪怕样本位置有微小变化,分类结果也能保持稳定,这种稳定性是判断超平面好不好的关键。

3. 关键概念

  • 间隔(Margin):指样本到超平面的距离。支持向量机的优化目标是 “最大化间隔”,因为间隔越大,超平面对局部扰动的容忍性越强。
  • 支持向量:距离超平面最近的样本点。这些点决定了间隔的大小,是构建超平面的核心 —— 其他离超平面远的样本点,对超平面的位置和间隔没有影响。
  • 超平面定义:超平面是 n 维空间映射到 n-1 维空间的子空间,由一个 n 维向量(通常用字母 w 表示)和一个实数(通常用字母 b 表示)共同定义,它的方程可以描述为:w 的转置乘以 x,再加上 b,结果等于 0。
    • 二维空间中,超平面就是 “直线”(比如常见的 Ax + By + C = 0 这种形式);
    • 三维空间中,超平面就是 “平面”;
    • n 维空间中,超平面是 n-1 维的子空间。

二、超平面相关计算

1. 点到超平面的距离

(1)二维空间特例

如果有一个点(坐标用 x 和 y 表示),以及一条直线(方程是 Ax + By + C = 0),那么这个点到这条直线的距离,计算方式是:先算 Ax + By + C 的绝对值,再除以根号下(A 的平方加上 B 的平方)。

(2)n 维空间推广

如果扩展到 n 维空间,有一个点(用 x 表示)和一个超平面(方程是 w 的转置乘以 x,再加上 b,结果等于 0),那么点到超平面的距离,计算方式是:先算 w 的转置乘以 x 再加上 b 的绝对值,再除以根号下(w 的转置乘以 w)。

三、SVM 的优化目标与约束条件

1. 优化目标推导

支持向量机的核心是最大化间隔(Margin)。而间隔的大小和 “样本到超平面的最小距离”(用 d 表示)有关,具体来说,间隔等于 2 乘以 d。所以 “最大化间隔” 其实就等价于 “最大化这个最小距离 d”。

2. 样本标签与决策方程

  • 样本标签:为了方便后续计算,我们给正例样本的标签设为 + 1,负例样本的标签设为 - 1(和传统的 0-1 标签不同,这种设定能简化推导过程)。
  • 决策方程:判断样本类别的方程可以表示为:y (x) 等于 w 的转置乘以 Φ(x),再加上 b。这里的 Φ(x) 是对原始数据做的 “特征变换”—— 后面会讲,它主要用来解决 “低维空间里样本分不开” 的问题。

3. 约束条件与目标函数转化

(1)约束条件

为了保证分类正确,我们要求所有样本都满足:第 i 个样本的标签 y_i,乘以(w 的转置乘以 Φ(x_i) 再加上 b)的结果,大于等于 1。这里的 x_i 是第 i 个样本的数据,这个条件是通过对 w 和 b 进行 “放缩” 得到的,目的是让离超平面最近的样本刚好满足等号。

(2)目标函数转化

前面说过,最大化间隔等价于最大化最小距离 d,而 d 的计算式里有 “根号下(w 的转置乘以 w)” 作为分母,所以 “最大化 d” 其实等价于 “最小化根号下(w 的转置乘以 w)”。为了方便求导计算,我们可以进一步转化为 “最小化(1/2 乘以 w 的转置乘以 w)”—— 这里的 1/2 只是系数,不影响最终找到极值的位置。
综上,支持向量机的优化问题最终变成:在 “所有样本满足 y_i(w 的转置乘以 Φ(x_i) + b)≥1” 这个约束条件下,找到 w 和 b,使得(1/2 乘以 w 的转置乘以 w)的结果最小。

四、SVM 的求解方法(拉格朗日乘子法)

1. 拉格朗日函数构造

对于这种 “带约束的优化问题”,我们可以引入拉格朗日乘子(每个样本对应一个乘子,用 α_i 表示,且 α_i≥0),构造出拉格朗日函数。这个函数的形式是:(1/2 乘以 w 的转置乘以 w),减去求和项(求和项是每个 α_i 乘以(y_i(w 的转置乘以 Φ(x_i) + b) - 1))。

2. 对偶问题转化

利用 “对偶性质”,我们可以把原来 “先对 w 和 b 求最小、再对 α 求最大” 的问题,转化成 “先对 w 和 b 求最小、再对 α 求最大” 的问题(顺序调整后更易求解)。接下来,我们对 w 和 b 分别求偏导数,并让偏导数等于 0,得到两个关键条件:

  • 对 w 求偏导后得到:w 等于求和项(每个 α_i 乘以 y_i 再乘以 Φ(x_i))—— 这说明 w 是由支持向量对应的 α_i、y_i 和 Φ(x_i) 共同决定的;
  • 对 b 求偏导后得到:求和项(每个 α_i 乘以 y_i)等于 0—— 这是求解 b 的重要依据。

3. 代入化简与最终优化问题

把上面两个条件代入原来的拉格朗日函数,化简后可以得到新的优化目标:最大化求和项(每个 α_i),减去(1/2 乘以求和项(每个 α_i 乘以 α_j 乘以 y_i 乘以 y_j 再乘以(Φ(x_i) 的转置乘以 Φ(x_j))))。
同时,还需要满足两个约束条件:一是 “所有 α_i 乘以 y_i 的和等于 0”,二是 “每个 α_i 都大于等于 0”。

五、SVM 的扩展:软间隔与核变换

1. 软间隔(解决噪音样本问题)

(1)问题背景

之前的方法要求 “所有样本都被超平面正确分开”,这个要求太严格了 —— 如果数据里有噪音样本(异常点),强行分开会导致超平面的间隔变小,模型稳定性变差。所以我们需要 “放松约束”,引入 “松弛因子”(用 ξ_i 表示,ξ_i≥0)。

(2)调整后的约束与目标函数
  • 约束条件调整为:y_i(w 的转置乘以 x_i + b)≥1 - ξ_i—— 允许部分样本不满足 “严格分类”,ξ_i 越大,说明该样本偏离理想分类的程度越大。
  • 目标函数调整为:最小化(1/2 乘以 w 的转置乘以 w)加上(C 乘以求和项(每个 ξ_i))。这里的 C 是一个需要人工设定的参数,作用是平衡 “间隔大小” 和 “分类错误率”:
    • 当 C 很大时:意味着对分类错误的容忍度低,几乎不允许有错误样本;
    • 当 C 很小时:意味着对分类错误的容忍度高,可以接受更多错误样本,优先保证间隔大。
(3)软间隔的拉格朗日求解

引入拉格朗日乘子 μ_i(μ_i≥0)后,构造新的拉格朗日函数,求解后会得到调整后的约束:每个 α_i 的取值范围在 0 到 C 之间(原来只是 α_i≥0),其他求解步骤和硬间隔类似。

2. 核变换(解决低维不可分问题)

(1)问题背景

有些样本在低维空间里无法用超平面分开(比如二维空间里的 “环形分布” 样本),这时候需要把数据 “映射到更高维的空间”,让样本在高维空间里变得可分。

(2)核函数的作用

直接把数据映射到高维空间会有 “维度灾难”—— 比如 3 维数据映射到 9 维,计算量会大幅增加。而 “核函数”(用 K (x_i, x_j) 表示)可以避免直接计算高维空间的内积,直接在低维空间里计算出 “高维空间内积的结果”,极大简化计算。

(3)常见核函数示例
  • 线性核函数:适用于本身线性可分的数据,形式是 K (x_i, x_j) 等于 x_i 的转置乘以 x_j(本质就是不做高维映射,直接用原始数据计算)。
  • 高斯核函数:适用于非线性可分的数据,能把数据映射到无穷维空间,灵活性强。它的形式通过指数函数表示,可根据数据分布调整参数,适配不同的非线性场景。
(4)核函数应用示例

比如 3 维数据 x 和 y,若直接映射到 9 维空间计算内积,需要先展开 9 维向量再相乘;但用 “(x 和 y 的内积)的平方” 这个核函数,直接在 3 维空间计算 x 和 y 的内积,再平方,就能得到和 9 维空间内积相同的结果,计算量大幅减少。

六、SVM 求解实例梳理

以简单数据集为例,求解步骤大致如下:

  1. 根据样本数据和标签,列出初始的优化目标(含 α_i 的二次函数);
  2. 利用 “求和项(α_i 乘以 y_i)等于 0” 的约束,化简目标函数(比如用 α_3 表示 α_1 和 α_2);
  3. 对化简后的变量(如 α_1、α_2)求偏导,令偏导数为 0,求解 α_i 的值;
  4. 检查求解结果是否满足 “α_i≥0”(硬间隔)或 “0≤α_i≤C”(软间隔),若不满足则在边界上寻找最优解(如 α_1=0 或 α_2=0);
  5. 把满足条件的 α_i 代入 “w 等于求和项(α_i 乘以 y_i 乘以 Φ(x_i))”,计算 w;
  6. 选择支持向量(α_i>0 的样本),代入 “y_i(w 的转置乘以 x_i + b)=1”,求解 b;
  7. 最终得到超平面方程(含 w 和 b),用于后续分类预测。
http://www.dtcms.com/a/351209.html

相关文章:

  • Java 大视界 -- Java 大数据机器学习模型在金融市场波动预测与资产配置动态调整中的应用
  • 网站开发用什么语言好
  • CentOS扩容非LVM分区
  • PortSwigger靶场之Blind SQL injection with out-of-band interaction通关秘籍
  • Redis--2
  • 在 TencentOS 3 上部署 OpenTenBase:从底层原理到生产级实践的深度指南
  • DBeaver下载安装使用
  • 支持向量机(SVM)算法总结
  • 大数据毕业设计选题:基于大数据的用户贷款行为数据分析系统Spark SQL核心技术
  • 迷你版Shell:源码详解与行为解析
  • 【Linux 34】Linux-主从复制
  • 嵌入式学习日记(34)HTTP协议
  • 支持向量机核心知识总结
  • 读懂支持向量机(SVM)
  • CI/CD 全链路实践:从 Git 基础到 Jenkins + GitLab 企业级部署
  • Flask 之上下文详解:从原理到实战
  • IDEA-Maven和Tomcat乱码问题
  • 2025改版:npm 新淘宝镜像域名地址
  • Uniapp(Vue2)Api请求封装
  • 企业级集群部署gpmall商城:MyCat+ZooKeeper+Kafka 环境部署与商城应用上线流程
  • VxWorks 核心数据结构详解 【消息队列、环形缓冲区、管道、FIFO、双缓冲区、共享内存】
  • Debian Buster 软件源失效问题
  • 在分布式环境下正确使用MyBatis二级缓存
  • 虚拟滚动优化——js技能提升
  • zookeeper-保姆级配置说明
  • http与https配置
  • 使用分流电阻器时的注意事项--PCB 设计对电阻温度系数的影响
  • Ubuntu 虚拟机配置 Git 并推送到Gitee
  • 低代码如何颠覆企业系统集成传统模式?快来一探究竟!
  • 两数之和,leetCode热题100,C++实现