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

机器学习--支持向量机

目录

一、为什么需要 SVM?先解决 “怎么分才好” 的问题

二、SVM 的核心:什么是 “最好的超平面”?用 “间隔” 说话

1. 先搞懂两个关键概念

2. 目标:把 “间隔” 拉到最大

三、从 “想要最大间隔” 到 “解数学问题”:SVM 的优化逻辑

1. 把目标 “转个弯”:从最大化到最小化

2. 加上约束:不能分错样本

3. 用拉格朗日乘子法:解带约束的优化问题

四、SVM 的 “进阶技巧”:解决实际问题

1. 软间隔:允许少量 “不完美”

2. 核函数:把 “低维不可分” 变成 “高维可分”

五、学完 SVM 的一点小感悟

六、机器学习总结


从 “找一条最好的线” 开始:我理解的支持向量机(SVM)核心逻辑

      今天跟着课程啃完了机器学习里的支持向量机(SVM),一开始光听到 “超平面”“间隔最大化” 这些词还觉得有点绕,但顺着逻辑一步步拆下来,发现它的核心思路其实特别 “朴素”—— 本质就是在样本里找一条 “最稳妥” 的分界线。与其记一堆公式,不如先把背后的道理捋明白,所以想把今天的学习笔记整理出来,也帮自己再顺一遍思路。

一、为什么需要 SVM?先解决 “怎么分才好” 的问题

      最开始老师抛了个问题:如果给你一堆两类样本,比如左边是红色点、右边是蓝色点,你怎么画一条线把它们分开?

      我第一反应是 “随便画一条不就行?”,但老师紧接着举了个例子:如果画的线离某一边的点特别近,万一新进来的样本稍微偏一点,不就分错了?这时候才意识到,划分的关键不是 “能分开”,而是 “分的稳”—— 也就是这条线对样本的 “容错性” 要足够高,哪怕样本稍微有点扰动,也不会轻易分错。

      这就是 SVM 的出发点:在样本空间里找一个 “最优划分超平面”(对二维数据来说是直线,三维是平面,更高维就是超平面),让这个超平面能最大限度地 “远离” 两边的样本,这样容错性自然就高了。

二、SVM 的核心:什么是 “最好的超平面”?用 “间隔” 说话

      既然要找 “最稳” 的超平面,那怎么量化 “稳不稳”?这里就引出了 “间隔(margin)” 的概念 —— 简单说,就是超平面到它两边最近样本的距离之和。

1. 先搞懂两个关键概念

      超平面本身:它不是随便画的,有固定的数学表达。比如 n 维空间里,超平面可以写成w^T x + b = 0,其中w是超平面的法向量(决定超平面的方向),b是偏置(决定超平面的位置)。像我们熟悉的二维直线Ax + By + C = 0,其实就是超平面在二维空间的特殊情况。

      点到超平面的距离:要算 “间隔”,得先知道单个样本到超平面的距离。这个公式是从二维直线的距离公式拓展开的 —— 二维里点(x,y)Ax+By+C=0的距离是|Ax+By+C|/√(A²+B²),推广到 n 维,就是|w^T x + b| / ||w||||w||w的范数,类似二维里的√(A²+B²))。

2. 目标:把 “间隔” 拉到最大

      SVM 里的 “最优超平面”,就是能让 “间隔” 最大的那个。为什么是最大间隔?因为间隔越大,超平面离两边样本越远,后续新样本进来时,不小心分错的概率就越小 —— 这就像走马路,走中间比走路边更不容易被车碰到,一个道理。

      不过这里有个小细节:间隔其实是 “超平面到两边最近样本的距离之和”,我们把这两个最近的样本叫做 “支持向量”—— 没错,SVM 的名字就是从这来的!因为这两个点直接决定了超平面的位置和间隔大小,其他样本哪怕再多,只要不影响这两个支持向量,对超平面就没影响。这一点我觉得特别妙,相当于 SVM 只 “关注” 最关键的样本,不被冗余信息干扰。

三、从 “想要最大间隔” 到 “解数学问题”:SVM 的优化逻辑

      想清楚 “要最大化间隔” 之后,接下来就是把这个目标变成数学问题来解。这一步一开始有点绕,但跟着老师拆步骤,其实也没那么难。

1. 把目标 “转个弯”:从最大化到最小化

      首先,我们已经知道间隔的核心是 “超平面到支持向量的距离”,假设这个距离是d,那间隔就是2d(两边各d)。要最大化间隔,其实就是最大化d

      而d的公式是|w^T x + b| / ||w||,这里有个小技巧:我们可以通过调整wb的尺度,让支持向量满足|w^T x + b| = 1(因为wb成比例缩放时,超平面位置不变,只是|w^T x + b|的数值变了,所以可以固定这个值)。这样一来,d就变成了1/||w||

      所以 “最大化d” 就等价于 “最小化||w||”—— 不过为了计算方便(比如求导时更简单),我们通常会最小化(1/2)||w||²(平方不影响最小值的位置,系数 1/2 是为了求导后抵消)。

2. 加上约束:不能分错样本

      当然,优化不能没有约束 —— 我们得保证所有样本都被超平面正确分类。怎么表达?如果用y表示样本类别(正例y=+1,负例y=-1),那么对于所有样本,必须满足y*(w^T x + b) ≥ 1。这个式子的意思是:正例的w^T x + b得是正的,负例的得是负的,而且它们的绝对值都至少是 1(也就是都在支持向量的外侧),这样才能保证分类正确,且间隔是1/||w||

3. 用拉格朗日乘子法:解带约束的优化问题

      到这里,问题就变成了 “在y*(w^T x + b) ≥ 1的约束下,最小化(1/2)||w||²”—— 这是一个带不等式约束的优化问题,老师说这种问题通常用 “拉格朗日乘子法” 来解。

      具体的推导过程我就不写太细了(怕自己记混),核心是把 “带约束的最小化问题” 转换成 “无约束的对偶问题”—— 简单说,就是引入拉格朗日乘子α,把约束条件融入到目标函数里,然后通过对wb求偏导,找到最优解的条件。

      最后解出来的结果里,有两个关键结论:

      (1)最优的w是所有支持向量乘以其类别和拉格朗日乘子后的总和(w = Σα_i y_i x_i);

      (2)所有非支持向量的α_i都是 0—— 再次印证了 “只有支持向量影响超平面”。

四、SVM 的 “进阶技巧”:解决实际问题

      理论上的 SVM 要求样本 “完全线性可分”,但实际数据里难免有噪音(比如个别样本放错了类别),或者样本本身就不是线性可分的(比如像螺旋线一样绕在一起)。这时候就需要 SVM 的两个 “进阶技能”。

1. 软间隔:允许少量 “不完美”

      如果数据里有噪音,硬要求所有样本都满足y*(w^T x + b) ≥ 1,反而会让超平面 “拐个弯” 去迁就噪音,导致泛化能力变差(也就是过拟合)。这时候就需要 “软间隔”—— 允许少数样本不满足约束,但要对这些 “不满足” 的样本罚分。

      具体来说,就是引入一个 “松弛因子”ξ_iξ_i ≥ 0),把约束条件改成y*(w^T x + b) ≥ 1 - ξ_iξ_i越大,说明这个样本离 “理想位置” 越远,罚分也越重。然后目标函数就变成了(1/2)||w||² + C*Σξ_i,其中C是惩罚系数:

C越大,说明越不能容忍错误,超平面会尽量把所有样本分对,但可能过拟合;

C越小,说明可以容忍更多错误,超平面更 “平缓”,但可能欠拟合。

2. 核函数:把 “低维不可分” 变成 “高维可分”

      如果样本在低维空间里根本没法用直线(或超平面)分开,比如二维空间里的 “同心圆” 样本,怎么办?老师举了个特别形象的例子:把二维平面 “掰弯” 成三维的圆锥面,原本的同心圆在三维空间里就变成了两个平行的圆,这时候用一个平面就能分开了。

      这个 “掰弯” 的过程,就是 “特征映射”—— 把低维空间的样本映射到高维空间。但高维空间的计算量太大了(比如二维映射到 100 维,计算量会爆炸),这时候 “核函数” 就派上用场了。

      核函数的神奇之处在于:它能直接计算两个样本在高维空间里的内积,而不用真的把样本映射到高维空间。比如常用的 “高斯核”,就能把低维不可分的数据,在无形中映射到无穷维空间,从而实现线性可分。这一步我目前还没完全吃透,但记住了核心结论:遇到非线性问题,试试用核函数,比如线性核(适合线性可分)、高斯核(适合非线性)。

五、学完 SVM 的一点小感悟

      今天学完 SVM,最大的感受是 “数学是为解决问题服务的”。一开始看到w^T x + b、拉格朗日乘子这些公式会有点怵,但顺着 “找最稳的超平面” 这个核心目标往下拆,每一步推导都有它的道理 —— 不是为了复杂而复杂,而是为了把 “稳” 这个模糊的需求,变成能计算、能求解的数学问题。

      另外,SVM 的 “极简主义” 也很打动我:它只关注支持向量,忽略冗余样本,既保证了模型的简洁性,又能有很好的泛化能力。难怪老师说,在小样本、高维数据(比如文本分类)里,SVM 至今还是很常用的模型。

      当然,现在只是搞懂了 SVM 的核心逻辑,后面还需要多做实验(比如用真实数据集跑一跑,调调C和核函数的参数),才能真正掌握。不过今天能把 “从找线到解公式” 的逻辑串起来,已经很有成就感啦~

六、机器学习总结

      今天这篇文章发完,机器学习的内容我们就告一段落啦,从机器学习的概论描述到KNN、决策树、随机森林、逻辑回归、线性回归、无监督学习、朴素贝叶斯、支持向量机这些算法学完之后相对于你对机器学习会有进一步的了解,可以用机器学习的算法对数据集完成基本的操作模型任务啦,接下来我会通过之前学习过的东西完成一个大任务哦,尽请期待吧!!!

http://www.xdnf.cn/news/18757.html

相关文章:

  • 数据结构(一):算法的时间复杂度和空间复杂度
  • 在使用spring ai进行llm处理的rag的时候,选择milvus还是neo4j呢?
  • 固定资产管理系统核心模块拆解:全流程管理逻辑
  • 30.LSTM-长短时记忆单元
  • 视频号存在争议了...
  • 从零开始的 Docker 之旅
  • 嵌入式系统学习Day23(进程)
  • 今日分享:C++ string 类模拟实现
  • 【Linux系统】线程概念
  • 【51单片机】萌新持续学习中《矩阵 密码锁 点阵屏》
  • 抽象能力的重要性
  • 使用 flutter_tts 的配置项
  • MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术
  • 移动应用渗透测试:API 接口漏洞的识别与利用技巧
  • 五自由度磁悬浮轴承同频振动抑制:从机理拆解到传递函数验证的核心方案
  • ICBC_TDR_UShield2_Install.exe [ICBC UKEY]
  • CSDN博客:中文技术社区的知识生产与生态演进
  • 项目设计文档——爬虫项目(爬取天气预报)
  • linux、window java程序导出pdf\word、excel文字字体显示异常、字体样式不一样
  • SOME/IP服务发现PRS_SOMEIPSD_00277的解析
  • 【贪心算法】day3
  • 高教杯数学建模2021-C 生产企业原材料的订购与运输
  • 5G 三卡图传终端:应急救援管理的 “可视化指挥核心”
  • 【无标题】计数组合学7.21(有界部分大小的平面分拆)
  • 支持向量机(SVM)
  • Linux 内核 Workqueue 原理与实现及其在 KFD SVM功能的应用
  • Linux--seLinux的概述
  • 数据结构07(Java)-- (堆,大根堆,堆排序)
  • 常见的设计模式
  • 博士招生 | 南洋理工大学 PINE Lab 招收全奖博士