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

SVM算法

支持向量机(SVM)是一种常用于分类和回归的机器学习算法,特别适合处理二分类问题。它的核心思想是通过找到一个超平面来将不同类别的样本分开,并且这个超平面与各个类别之间的间隔最大,也就是最大化分类的边界,从而提高模型的泛化能力。

简单地说,SVM会在数据集中找到一条线(在高维空间里是超平面),使得这条线能够最清楚地把两类数据分开,并尽可能远离两类数据的边界点,称为“支持向量”。

SVM的关键特点:

  1. 最大化分类边界:它通过找到使分类间隔最大的超平面来提高分类的准确性。
  2. 支持非线性分类:通过使用核函数(比如常见的RBF核)将数据映射到高维空间,能够处理非线性分类问题。
  3. 处理高维数据:SVM适合处理维度较高的数据,并且在小样本的情况下表现良好。

一个简单例子:

如果你有两个类别的数据点,SVM会找到一条线(或者高维空间的超平面)把这两类数据分隔开,并且确保这条线离每类数据点最远。这样,当遇到新的数据时,它可以根据位置来决定它属于哪一类。

SVM的应用非常广泛,如图像分类、文本分类、甚至生物信息学等。

SVM的基本思想是通过数学手段找到能够最大化分类间隔的超平面

SVM 算法的基本步骤:

  1. 数据表示
    假设我们有两个类别的数据点。每个数据点可以表示为向量 (x_i),并且有对应的标签 (y_i),标签要么是 1(正类),要么是 -1(负类)。目标是找到一个超平面来将这些数据分成两类。

  2. 超平面方程
    超平面可以写成:
    [
    w \cdot x + b = 0
    ]
    其中:

    • (w) 是超平面的法向量,决定超平面的方向。
    • (b) 是偏置,决定超平面与原点的距离。
    • (x) 是输入数据点。

    这个超平面将数据点分成两类:

    • ( w \cdot x + b > 0 ) 时,属于正类(1类)。
    • ( w \cdot x + b < 0 ) 时,属于负类(-1类)。
  3. 最大化间隔
    我们希望找到一个超平面,使得正类和负类之间的间隔最大。间隔就是从支持向量到超平面的距离。我们要最大化的间隔可以写作:
    [
    \text{间隔} = \frac{2}{|w|}
    ]
    这里 (|w|) 是 (w) 的范数(即长度),所以为了最大化间隔,我们实际上要最小化 (|w|)。

  4. 约束条件
    为了保证数据点被正确分类,我们需要满足以下条件:
    [
    y_i (w \cdot x_i + b) \geq 1
    ]
    这个不等式意思是:

    • 对于正类点,要求 (w \cdot x_i + b \geq 1)。
    • 对于负类点,要求 (w \cdot x_i + b \leq -1)。
  5. 优化问题
    我们的目标就是在满足这些约束条件的情况下,最小化 (\frac{1}{2} |w|^2)。于是,SVM就变成了一个凸优化问题
    [
    \min \frac{1}{2} |w|^2
    ]
    使得对于每一个数据点 (i) 来说,约束 (y_i (w \cdot x_i + b) \geq 1) 成立。

  6. 拉格朗日乘子法
    为了求解这个优化问题,我们引入拉格朗日乘子 (\alpha_i),将约束条件和目标函数合并成一个拉格朗日函数:
    [
    L(w, b, \alpha) = \frac{1}{2} |w|^2 - \sum_{i=1}^{n} \alpha_i [y_i (w \cdot x_i + b) - 1]
    ]
    然后我们通过对 (w) 和 (b) 求偏导,得到优化解。

  7. 决策函数
    最终,当我们求得 (w) 和 (b) 后,新的数据点 (x) 的分类结果可以通过以下公式计算:
    [
    f(x) = \text{sign}(w \cdot x + b)
    ]
    如果 (f(x) > 0),则 (x) 属于正类;如果 (f(x) < 0),则 (x) 属于负类。

核心思想总结:

  • SVM 通过找到一个最大化分类间隔的超平面来区分两类数据。
  • 其优化目标是最小化法向量 (w) 的范数,同时确保数据点在分类时满足某种条件。
  • 手算过程涉及拉格朗日乘子法来求解约束优化问题。

手算 SVM 时,关键在于通过计算优化问题中的 (w)、(b) 来确定超平面位置,从而实现数据分类。


在这里插入图片描述


http://www.kler.cn/news/359684.html

相关文章:

  • VSCode编译器改为中文
  • html全局属性、框架标签
  • npm 加速,命令行修改国内镜像源【附带国内最新几个镜像】超简约版~
  • 最佳副屏串流解决方案:如何低成本打造电脑拓展副屏?
  • HTml + CSS 核心笔记 (八)
  • 【C++刷题】力扣-#119-杨辉三角II
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • React中的Hooks钩子
  • Node + HTML搭建自己的ChatGPT [基础版]
  • 农合生活平台用户量已突破5万人大关。
  • vue中this.$nextTick()方法
  • Prometheus 抓取 nginx 访问日志的指标
  • @MassageMapping和@SendTo注解详解
  • Shell并发执行:提升脚本效率的终极指南
  • 深入理解 Kafka
  • 【Python网络编程】学习Socket编程,打造网络应用!
  • 设计模式(c++)
  • 【数学二】多元函数微积分学-多元函数的微分
  • 代码训练营 day38|LeetCode 62,LeetCode 63
  • 每月洞察:App Store 和 Google Play 的主要更新