支持向量机 (Support Vector Machines, SVM)
支持向量机 (Support Vector Machines, SVM)
通俗易懂算法
支持向量机(SVM)是一种用于分类和回归任务的机器学习算法。在最简单的情况下,SVM是一种线性分类器,适用于二分类问题。它的基本思想是找到一个超平面(在二维空间中是直线,在高维空间中是平面)来将数据点分开。
核心思想
-
分类超平面:
- 在二维空间中,我们希望找到一条直线将两类数据点分开。对于三维空间,就是一个面;对于更高维空间,就是一个超平面。
- 这个分隔面的方程可以表示为: w x + b = 0 wx + b = 0 wx+b=0,其中 w w w是权重向量, b b b是偏置。
-
最大化间隔:
- SVM的关键是不仅仅将数据点分开,而是要找到能最大化两类之间“间隔”(或“边界”)的超平面。这个间隔被称为“margin”。
- 理想情况下,SVM选择的超平面会距离最近的数据点(支持向量)最远。
-
支持向量:
- 那些离超平面最近的点被称为“支持向量”。它们是计算最大间隔的关键,因为它们决定了超平面的最终位置。
数学表达
我们希望找到能够最大化函数间隔的超平面。假设数据集线性可分,这可以通过以下优化问题实现:
min w , b 1 2 ∥ w ∥ 2 s.t. y i ( w x i + b ) ≥ 1 ∀ i \begin{align*} \min_{w, b} & \quad \frac{1}{2} \|w\|^2 \\ \text{s.t.} & \quad y_i(wx_i + b) \geq 1 \quad \forall i \end{align*} w,bmins.t.21∥w∥2yi(wxi+b)≥1∀i
其中:
- w w w 是权重向量。
- b b b 是偏置。
- y i y_i yi 是数据点 x i x_i xi 的标签,通常 y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} yi∈{−1,1}。
此优化问题的目标是最小化向量 w w w的范数,同时保证所有数据点都在间隔之外。
核技巧
当数据集不是线性可分时,SVM可以通过“核技巧”来处理非线性分类问题。核技巧的核心是在较高维度空间中寻找线性分割面,而不需要显式地转换数据。
常用的核函数包括:
- 线性核: K ( x i , x j ) = x i ⋅ x j K(x_i, x_j) = x_i \cdot x_j K(xi,xj)=xi⋅xj
- 多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i, x_j) = (x_i \cdot x_j + c)^d K(xi,xj)=(xi⋅xj+c)d
- 高斯核(RBF核): K ( x i , x j ) = exp ( − γ ∥ x i − x j ∥ 2 ) K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(−γ∥xi−xj∥2)
总结
支持向量机是一种功能强大的分类算法,尤其在维度较高的数据集上表现良好。其关键优势在于:
- 能够处理高维空间。
- 通过核技巧,能够处理非线性分类任务。
- 对少量样本和稀疏数据较为有效。
理解SVM的核心,在于理解它是如何通过最大化间隔来实现分类以及如何利用支持向量来影响模型的最终决策。
底层原理
支持向量机(SVM)是一种用于分类和回归的监督学习模型。其核心思想是寻找一个最优的超平面,把不同类别的数据分开,同时最大化类别之间的间隔。以下是SVM的数学原理:
1. 问题定义
对于给定的训练数据集:
{ ( x i , y i ) ∣ x i ∈ R n , y i ∈ { − 1 , 1 } , i = 1 , 2 , … , m } \{(\mathbf{x}_i, y_i) \mid \mathbf{x}_i \in \mathbb{R}^n, y_i \in \{-1, 1\}, i = 1, 2, \ldots, m\} {(xi,yi)∣xi∈Rn,yi∈{−1,1},i=1,2,…,m}
我们要找到一个超平面把数据分开。这个超平面可以表示为:
w ⋅ x + b = 0 \mathbf{w} \cdot \mathbf{x} + b = 0 w⋅x+b=0
2. 几何间隔和函数间隔
-
函数间隔:
函数间隔是超平面对点 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi) 的这一形式的产品:
γ i = y i ( w ⋅ x i + b ) \gamma_i = y_i (\mathbf{w} \cdot \mathbf{x}_i + b) γi=yi(w⋅xi+b) -
几何间隔:
几何间隔通过归一化权重向量 w \mathbf{w} w 来计算,定义为:
γ ^ i = γ i ∣ ∣ w ∣ ∣ = y i ( w ⋅ x i + b ) ∣ ∣ w ∣ ∣ \hat{\gamma}_i = \frac{\gamma_i}{||\mathbf{w}||} = \frac{y_i (\mathbf{w} \cdot \mathbf{x}_i + b)}{||\mathbf{w}||} γ^i=∣∣w∣∣γi=∣∣w∣∣yi(w⋅xi+b)
对于SVM,我们希望最大化几何间隔。
3. 最优化问题
为了最大化间隔,SVM把最大化问题转化为以下约束的二次优化问题:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 subject to y i ( w ⋅ x i + b ) ≥ 1 , ∀ i \begin{align*} \min_{\mathbf{w}, b} \quad & \frac{1}{2} ||\mathbf{w}||^2 \\ \text{subject to} \quad & y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1, \quad \forall i \end{align*} w,bminsubject to21∣∣w∣∣2yi(w⋅xi+b)≥1,∀i
4. 拉格朗日对偶问题
通过引入拉格朗日乘子 α i ≥ 0 \alpha_i \geq 0 αi≥0,可以构建拉格朗日函数:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 m α i [ y i ( w ⋅ x i + b ) − 1 ] L(\mathbf{w}, b, \alpha) = \frac{1}{2} ||\mathbf{w}||^2 - \sum_{i=1}^{m} \alpha_i [y_i(\mathbf{w} \cdot \mathbf{x}_i + b) - 1] L(w,b,α)=21∣∣w∣∣2−i=1∑mαi[yi(w⋅xi+b)−1]
通过对 w \mathbf{w} w 和 b b b 求导并设为零,可以得到对偶问题:
max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ( x i ⋅ x j ) subject to ∑ i = 1 m α i y i = 0 , α i ≥ 0 , ∀ i \begin{align*} \max_{\alpha} \quad & \sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j (\mathbf{x}_i \cdot \mathbf{x}_j) \\ \text{subject to} \quad & \sum_{i=1}^{m} \alpha_i y_i = 0, \\ & \alpha_i \geq 0, \quad \forall i \end{align*} αmaxsubject toi=1∑mαi−21i=1∑mj=1∑mαiαjyiyj(xi⋅xj)i=1∑mαiyi=0,αi≥0,∀i
5. 核函数方法
在高维空间中,数据很难线性分开;我们通过核函数引入非线性映射 ϕ ( x ) \phi(\mathbf{x}) ϕ(x),使问题在特征空间中线性可分。常用的核函数包括:
- 多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i \cdot \mathbf{x}_j + c)^d K(xi,xj)=(xi⋅xj+c)d
- 高斯核(RBF核): K ( x i , x j ) = exp ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{||\mathbf{x}_i - \mathbf{x}_j||^2}{2\sigma^2}\right) K(xi,xj)=exp(−2σ2∣∣xi−xj∣∣2)
通过这些核函数,SVM可以在高维空间中找到超平面对原数据进行分类。
6. 软间隔SVM
对于不可完全分的情况,引入松弛变量 ξ i \xi_i ξi 允许部分数据点越过分隔边界,最优化问题变成:
min w , b , ξ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ξ i subject to y i ( w ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 , ∀ i \begin{align*} \min_{\mathbf{w}, b, \xi} \quad & \frac{1}{2} ||\mathbf{w}||^2 + C \sum_{i=1}^{m} \xi_i \\ \text{subject to} \quad & y_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 - \xi_i, \\ & \xi_i \geq 0, \quad \forall i \end{align*} w,b,ξminsubject to21∣∣w∣∣2+Ci=1∑mξiyi(w⋅xi+b)≥1−ξi,ξi≥0,∀i
这里的 C C C 是一个超参数,用于控制间隔的宽度和违反间隔的惩罚之间的权衡。
以上是支持向量机的底层数学原理概述,通过这些方法,SVM能够有效地进行分类和回归。
常用面试考点
支持向量机(Support Vector Machines, SVM)是一种常用于分类任务的监督学习模型。SVM的主要目标是找到一个最佳超平面,将数据的不同类别分开。以下是SVM算法的主要概念和公式,从常用面试考点的角度进行讲解:
1. 基本概念
- 超平面: 在 n n n维空间中,一个超平面是一个 ( n − 1 ) (n-1) (n−1)维的子空间,它可以用来分离数据。如在二维空间中,超平面是直线;在三维空间中,超平面是平面。
- 支持向量: 距离超平面最近的那些数据点,这些点决定了超平面的位置和方向。
- 间隔(Margin): 支持向量到超平面的最小距离。SVM的目标是最大化这个间隔。
2. 数学公式
SVM算法的目标是找到一个超平面,其方程可表示为:
w ⋅ x + b = 0 w \cdot x + b = 0 w⋅x+b=0
其中, w w w是法向量, b b b是偏置项。
对于每个数据点 ( x i , y i ) (x_i, y_i) (xi,yi),分类要求满足:
y i ( w ⋅ x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi(w⋅xi+b)≥1
在硬间隔(Hard Margin)情况下,SVM的目标是最大化间隔,可以转化为最小化以下目标函数:
min 1 2 ∣ ∣ w ∣ ∣ 2 \min \frac{1}{2} ||w||^2 min21∣∣w∣∣2
主体约束为上述分类条件。
在软间隔(Soft Margin)情况下,为了允许一些数据点在错误侧,目标变为:
min 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ i \min \frac{1}{2} ||w||^2 + C \sum_{i=1}^{n} \xi_i min21∣∣w∣∣2+Ci=1∑nξi
约束为:
y i ( w ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 y_i(w \cdot x_i + b) \geq 1 - \xi_i, \, \xi_i \geq 0 yi(w⋅xi+b)≥1−ξi,ξi≥0
其中, ξ i \xi_i ξi是松弛变量, C C C是惩罚参数,控制对错误分类的惩罚程度。
3. 核函数(Kernel Trick)
为了处理非线性分类问题,SVM采用核技巧,通过一种映射将原始数据从输入空间映射到高维特征空间。在高维特征空间中,数据变得线性可分。常用的核函数包括:
- 线性核: K ( x i , x j ) = x i ⋅ x j K(x_i, x_j) = x_i \cdot x_j K(xi,xj)=xi⋅xj
- 多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i, x_j) = (x_i \cdot x_j + c)^d K(xi,xj)=(xi⋅xj+c)d
- 高斯核(RBF): K ( x i , x j ) = exp ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2) K(xi,xj)=exp(−γ∣∣xi−xj∣∣2)
- sigmoid核: K ( x i , x j ) = tanh ( α x i ⋅ x j + c ) K(x_i, x_j) = \tanh(\alpha x_i \cdot x_j + c) K(xi,xj)=tanh(αxi⋅xj+c)
4. 优点与局限
-
优点:
- 有效处理高维数据。
- 在特征数大于样本数的情况下依然表现良好。
- 可通过核函数处理非线性问题。
-
局限:
- 对大规模数据集效率不高。
- 在参数选择和核函数选择上较复杂。
面试中的常见问题包括解释间隔的概念、核函数的作用、如何选择参数C和核函数的参数等,以及如何将SVM应用于具体的分类任务。
相关文章:
支持向量机 (Support Vector Machines, SVM)
支持向量机 (Support Vector Machines, SVM) 通俗易懂算法 支持向量机(SVM)是一种用于分类和回归任务的机器学习算法。在最简单的情况下,SVM是一种线性分类器,适用于二分类问题。它的基本思想是找到一个超平面(在二维…...
上海市计算机学会竞赛平台2024年8月月赛丙组调和级数
题目描述 给定一个整数 nn,记 ⌊x⌋⌊x⌋ 表示不超过实数 xx 的最大整数,请求出 ⌊n1⌋⌊n2⌋⌊n3⌋⋯⌊nn−1⌋⌊nn⌋⌊1n⌋⌊2n⌋⌊3n⌋⋯⌊n−1n⌋⌊nn⌋ 输入格式 单个整数:表示 nn 输出格式 单个整数:表示答…...
【重学 MySQL】二十、运算符的优先级
【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级(由高到低)注意事项示例 在 MySQL 中,运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…...
十种优化MySQL数据库的最佳建议
优化MySQL数据库可以提高查询性能和系统响应能力,以下是一些MySQL数据库优化的建议: 优化查询语句:避免使用SELECT *,只选择需要的字段;使用索引来加快查询速度;避免使用慢查询。 优化表结构:使…...
springboot组件使用-mybatis组件使用
文章目录 springboot使用mybatis组件1. 添加依赖2. 配置数据源3. 创建实体类4. 创建Mapper接口5. 创建Mapper XML文件6. 使用Mapper7. 启动类配置 mybtis 动态SQL1. Mapper 注解2. Select 注解3. Insert 注解4. Update 注解5. Delete 注解6. Results 注解7. Param 注解8. Cache…...
Ribbon 源码分析【Ribbon 负载均衡】
前言 在 Spring Cloud 2020 版本以后,移除了对 Netflix 的依赖,也就移除了负载均衡器 Ribbon,Spring Cloud 官方推荐使用 Loadbalancer 替换 Ribbon,而在 LoadBalancer 之前 Spring Cloud 一直使用的是 Ribbon 来做负载[均衡器的…...
Python | Leetcode Python题解之第385题迷你语法分析器
题目: 题解: class Solution:def deserialize(self, s: str) -> NestedInteger:if s[0] ! [:return NestedInteger(int(s))stack, num, negative [], 0, Falsefor i, c in enumerate(s):if c -:negative Trueelif c.isdigit():num num * 10 int…...
进程间通信-进程池
目录 理解 完整代码 完善代码 回收子进程: 不回收子进程: 子进程使用重定向优化 理解 #include <iostream> #include <unistd.h> #include <string> #include <vector> #include <sys/types.h>void work(int rfd) {…...
【PYTHON 基础系列-request 模块介绍】
一、requests库简介 使用requests库能快速构建 HTTP 请求,而无需深入了解底层网络协议细节。其API设计直观,使得发送请求就像调用函数一样简单,同时提供了丰富的选项以满足复杂网络交互的需求。这种设计使得无论是初学者还是经验丰富的开发者…...
springboot 实现策略模式通过id进入不同的服务类service
在Spring Boot中实现策略模式,通常是将不同的算法封装在单独的类中,并使它们可以相互替换。这些类通常都实现同一个接口。在Spring Boot应用中,你可以通过Spring的依赖注入(DI)来管理这些策略类的实例,并通…...
AUC真的什么情形下都适合吗
AUC(Area Under the ROC Curve)是一个广泛使用的性能评价指标,它衡量了分类模型在不同阈值下区分正类和负类的能力。然而,在某些情况下,AUC可能不是最准确的评价指标,以下是几种可能的情况: 数据极度不均衡:在数据极度不均衡的情况下,即使模型只预测多数类,AUC也可能…...
Flutter基本组件Text使用
Text是一个文本显示控件,用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…...
DDS基本原理--FPGA学习笔记
DDS信号发生器原理: timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2024/09/04 15:20:30 // Design Name: hilary // Module Name: DDS_Module //module DDS_Module(Clk,Reset_n,Fword,Pword,Data);input Clk;input Reset_n;input [31:0]…...
有temp表包含A,B两列,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数
有temp表,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数 建表语句如下 CREATE TABLE temp(A STRING ,B STRING );INSERT INTO …...
【H2O2|全栈】关于HTML(6)HTML基础(五 · 完结篇)
HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类(五) 本文中的标签在什么位置中使用? 表单(二) 下拉选择菜单 文本域 案例 拓展标签 iframe框架 案例 预告和回顾 后话 前言 本系列博客介…...
2024第三届大学生算法大赛 真题训练一 解题报告 | 珂学家
前言 题解 这是第三届大学生算法大赛(第二届为清华社杯)的赛前练习赛一. 这是上界比赛的体验报告: 2023第二届“清华社杯”大学生算法大赛 解题报告(流水账版) | 珂学家,个人还是非常推荐这个比赛。 难度分布:4 easy/4 mid-hard/2 hard 赛前练习赛一…...
IIS网站允许3D模型类型的文件
参与threejs项目的研发,本地开发完成后,发布后使用时发现模型文件不能正常获取资源,原因是IIS站点默认不支持模型类型。 一开始是通过直接在IIS网站管理中的类型添加来实现网站对类型的支持。 后来发现一段对于后端来说可以直接实现代码上添加…...
Linux 性能调优之CPU上下文切换
写在前面 博文内容为 Linux 性能指标 CPU 上下文切换认知内容涉及: 上下文认知,发生上下文切换的场景有哪些上下文指标信息查看,内核上下文切换事件跟踪,系统上下文切换统计上下文异常场景分析,CPU亲和性配置优化上下文…...
【无标题】符文价值的退化页
我们利用现有的符文体系建立了一个健全的符文扩展空间,可假若符文让我们感到十分困惑,我们不介意毁灭它们,让一切回到没有字迹的蛮荒纪。 如此,眼睛也失去了作用。我们的成GUO也会给后来者提供又是一DUI 令人眼花缭乱的无用符咒。…...
DFS 算法:洛谷B3625迷宫寻路
我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
