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

支持向量机 (Support Vector Machines, SVM)

支持向量机 (Support Vector Machines, SVM)

通俗易懂算法

支持向量机(SVM)是一种用于分类和回归任务的机器学习算法。在最简单的情况下,SVM是一种线性分类器,适用于二分类问题。它的基本思想是找到一个超平面(在二维空间中是直线,在高维空间中是平面)来将数据点分开。

核心思想

  1. 分类超平面

    • 在二维空间中,我们希望找到一条直线将两类数据点分开。对于三维空间,就是一个面;对于更高维空间,就是一个超平面。
    • 这个分隔面的方程可以表示为: w x + b = 0 wx + b = 0 wx+b=0,其中 w w w是权重向量, b b b是偏置。
  2. 最大化间隔

    • SVM的关键是不仅仅将数据点分开,而是要找到能最大化两类之间“间隔”(或“边界”)的超平面。这个间隔被称为“margin”。
    • 理想情况下,SVM选择的超平面会距离最近的数据点(支持向量)最远。
  3. 支持向量

    • 那些离超平面最近的点被称为“支持向量”。它们是计算最大间隔的关键,因为它们决定了超平面的最终位置。

数学表达

我们希望找到能够最大化函数间隔的超平面。假设数据集线性可分,这可以通过以下优化问题实现:

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.21w2yi(wxi+b)1i

其中:

  • 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)=xixj
  • 多项式核: 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)=(xixj+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(γxixj2)

总结

支持向量机是一种功能强大的分类算法,尤其在维度较高的数据集上表现良好。其关键优势在于:

  • 能够处理高维空间。
  • 通过核技巧,能够处理非线性分类任务。
  • 对少量样本和稀疏数据较为有效。

理解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)xiRn,yi{1,1},i=1,2,,m}

我们要找到一个超平面把数据分开。这个超平面可以表示为:
w ⋅ x + b = 0 \mathbf{w} \cdot \mathbf{x} + b = 0 wx+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(wxi+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(wxi+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∣∣w2yi(wxi+b)1,i

4. 拉格朗日对偶问题

通过引入拉格朗日乘子 α i ≥ 0 \alpha_i \geq 0 αi0,可以构建拉格朗日函数:
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∣∣w2i=1mαi[yi(wxi+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=1mαi21i=1mj=1mαiαjyiyj(xixj)i=1mαiyi=0,αi0,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)=(xixj+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∣∣xixj2)

通过这些核函数,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∣∣w2+Ci=1mξiyi(wxi+b)1ξi,ξi0,i

这里的 C C C 是一个超参数,用于控制间隔的宽度和违反间隔的惩罚之间的权衡。

以上是支持向量机的底层数学原理概述,通过这些方法,SVM能够有效地进行分类和回归。

常用面试考点

支持向量机(Support Vector Machines, SVM)是一种常用于分类任务的监督学习模型。SVM的主要目标是找到一个最佳超平面,将数据的不同类别分开。以下是SVM算法的主要概念和公式,从常用面试考点的角度进行讲解:

1. 基本概念

  • 超平面: 在 n n n维空间中,一个超平面是一个 ( n − 1 ) (n-1) (n1)维的子空间,它可以用来分离数据。如在二维空间中,超平面是直线;在三维空间中,超平面是平面。
  • 支持向量: 距离超平面最近的那些数据点,这些点决定了超平面的位置和方向。
  • 间隔(Margin): 支持向量到超平面的最小距离。SVM的目标是最大化这个间隔。

2. 数学公式

SVM算法的目标是找到一个超平面,其方程可表示为:

w ⋅ x + b = 0 w \cdot x + b = 0 wx+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(wxi+b)1

在硬间隔(Hard Margin)情况下,SVM的目标是最大化间隔,可以转化为最小化以下目标函数:

min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 \min \frac{1}{2} ||w||^2 min21∣∣w2

主体约束为上述分类条件。

在软间隔(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∣∣w2+Ci=1nξ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(wxi+b)1ξi,ξi0

其中, ξ 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)=xixj
  • 多项式核: 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)=(xixj+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(γ∣∣xixj2)
  • 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(αxixj+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…...

进程间通信-进程池

目录 理解​ 完整代码 完善代码 回收子进程&#xff1a;​ 不回收子进程&#xff1a; 子进程使用重定向优化 理解 #include <iostream> #include <unistd.h> #include <string> #include <vector> #include <sys/types.h>void work(int rfd) {…...

【PYTHON 基础系列-request 模块介绍】

一、requests库简介 使用requests库能快速构建 HTTP 请求&#xff0c;而无需深入了解底层网络协议细节。其API设计直观&#xff0c;使得发送请求就像调用函数一样简单&#xff0c;同时提供了丰富的选项以满足复杂网络交互的需求。这种设计使得无论是初学者还是经验丰富的开发者…...

springboot 实现策略模式通过id进入不同的服务类service

在Spring Boot中实现策略模式&#xff0c;通常是将不同的算法封装在单独的类中&#xff0c;并使它们可以相互替换。这些类通常都实现同一个接口。在Spring Boot应用中&#xff0c;你可以通过Spring的依赖注入&#xff08;DI&#xff09;来管理这些策略类的实例&#xff0c;并通…...

AUC真的什么情形下都适合吗

AUC(Area Under the ROC Curve)是一个广泛使用的性能评价指标,它衡量了分类模型在不同阈值下区分正类和负类的能力。然而,在某些情况下,AUC可能不是最准确的评价指标,以下是几种可能的情况: 数据极度不均衡:在数据极度不均衡的情况下,即使模型只预测多数类,AUC也可能…...

Flutter基本组件Text使用

Text是一个文本显示控件&#xff0c;用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…...

DDS基本原理--FPGA学习笔记

DDS信号发生器原理&#xff1a; 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表&#xff0c;使用SQL&#xff0c;对B列进行处理&#xff0c;形成C列&#xff0c;按A列顺序&#xff0c;B列值不变&#xff0c;则C列累计技术&#xff0c;B列值变化&#xff0c;则C列重新开始计数 建表语句如下 CREATE TABLE temp(A STRING ,B STRING );INSERT INTO …...

【H2O2|全栈】关于HTML(6)HTML基础(五 · 完结篇)

HTML基础知识 目录 HTML基础知识 前言 准备工作 标签的具体分类&#xff08;五&#xff09; 本文中的标签在什么位置中使用&#xff1f; 表单&#xff08;二&#xff09; 下拉选择菜单 文本域 案例 拓展标签 iframe框架 案例 预告和回顾 后话 前言 本系列博客介…...

2024第三届大学生算法大赛 真题训练一 解题报告 | 珂学家

前言 题解 这是第三届大学生算法大赛(第二届为清华社杯)的赛前练习赛一. 这是上界比赛的体验报告: 2023第二届“清华社杯”大学生算法大赛 解题报告(流水账版) | 珂学家&#xff0c;个人还是非常推荐这个比赛。 难度分布&#xff1a;4 easy/4 mid-hard/2 hard 赛前练习赛一…...

IIS网站允许3D模型类型的文件

参与threejs项目的研发&#xff0c;本地开发完成后&#xff0c;发布后使用时发现模型文件不能正常获取资源&#xff0c;原因是IIS站点默认不支持模型类型。 一开始是通过直接在IIS网站管理中的类型添加来实现网站对类型的支持。 后来发现一段对于后端来说可以直接实现代码上添加…...

Linux 性能调优之CPU上下文切换

写在前面 博文内容为 Linux 性能指标 CPU 上下文切换认知内容涉及&#xff1a; 上下文认知&#xff0c;发生上下文切换的场景有哪些上下文指标信息查看&#xff0c;内核上下文切换事件跟踪&#xff0c;系统上下文切换统计上下文异常场景分析&#xff0c;CPU亲和性配置优化上下文…...

【无标题】符文价值的退化页

我们利用现有的符文体系建立了一个健全的符文扩展空间&#xff0c;可假若符文让我们感到十分困惑&#xff0c;我们不介意毁灭它们&#xff0c;让一切回到没有字迹的蛮荒纪。 如此&#xff0c;眼睛也失去了作用。我们的成GUO也会给后来者提供又是一DUI 令人眼花缭乱的无用符咒。…...

DFS 算法:洛谷B3625迷宫寻路

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法&#xff1a;记忆化搜索DFS 算法&#xf…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...