SVM——支持向量机的学习入门

news2025/1/12 20:43:52

1、推荐文章

1、一文看懂SVM算法
2、图解机器学习|支持向量机模型详解
3、支持向量机的直观理解

2、分类问题

假设你的大学开设了一门机器学习(ML)课程。课程导师发现数学或统计学好的学生表现最佳。随着时间的推移,积累了一些数据,包括参加课程的学生的数学成绩和统计学成绩,以及在ML课程上的表现(使用两个标签描述,“优”、“差”)。

现在,课程导师想要判定数学、统计学分数和ML课程表现之间的关系。也许,基于这一发现,可以指定参加课程的前提条件。

这一问题如何求解?让我们从表示已有数据开始。我们可以绘制一张二维图形,其中一根轴表示数学成绩,另一根表示统计学成绩。这样每个学生就成了图上的一个点。

点的颜色——绿或红——表示学生在ML课程上的词表现:“优”或“差”。

当一名学生申请加入课程时,会被要求提供数学成绩和统计学成绩。基于现有的数据,可以对学生在ML课程上的表现进行有根据的猜测。

基本上我们想要的是某种“算法”,接受“评分元组”(math_score, stats_score)输入,预测学生在图中是红点还是绿点(绿/红也称为分类标签)。当然,这一算法某种程度上包括了已有数据中的模式,已有数据也称为训练数据

在这个例子中,找到一条红聚类和绿聚类之间的直线,然后判断成绩元组位于线的哪一边,是一个好算法。

这里的直线是我们的分界(separating boundary)(因为它分离了标签)或者**分类器(classifier)**(我们使用它分类数据点)。上图显示了两种可能的分类器。

好 vs 差的分类器

这里有一个有趣的问题:上面的两条线都分开了红色聚类和绿色聚类。是否有很好的理由选择一条,不选择另一条呢?

别忘了,分类器的价值不在于它多么擅长分离训练数据。我们最终想要用它分类未见数据点(称为**测试数据)。因此,我们想要选择一条捕捉了训练集中的通用模式(general pattern)**的线,这样的线在测试集上表现出色的几率很大。

上面的第一条线看起来有点“歪斜”。下半部分看起来太接近红聚类,而上半部分则过于接近绿聚类。是的,它完美地分割了训练数据,但是如果它看到略微远离其聚类的测试数据点,它很有可能会弄错标签。

第二条线没有这个问题。

我们来看一个例子。下图中两个方形的测试数据点,两条线分配了不同的标签。显然,第二条线的分类更合理。

第二条线在正确分割训练数据的前提下,尽可能地同时远离两个聚类。保持在两个聚类的正中间,让第二条线的“风险”更小,为每个分类的数据分布留出了一些摇动的空间,因而能在测试集上取得更好的概括性。

SVM试图找到第二条线。上面我们通过可视化方法挑选了更好的分类器,但我们需要更准确一点地定义其中的理念,以便在一般情形下加以应用。下面是一个简化版本的SVM:

  1. 找到正确分类训练数据的一组直线。
  2. 在找到的所有直线中,选择那条离最接近的数据点距离最远的直线。

距离最接近的数据点称为支持向量(support vector)。支持向量定义的沿着分隔线的区域称为间隔(margin)

下图显示了之前的第二条线,以及相应的支持向量(黑边数据点)和间隔(阴影区域)。

尽管上图显示的是直线和二维数据,SVM实际上适用于任何维度;在不同维度下,SVM寻找类似二维直线的东西。

例如,在三维情形下,SVM寻找一个平面(plane),而在更高维度下,SVM寻找一个超平面(hyperplane)——二维直线和三维平面在任意维度上的推广。这也正是支持向量得名的由来。在高维下,数据点是多维向量,间隔的边界也是超平面。支持向量位于间隔的边缘,“支撑”起间隔边界超平面。

可以被一条直线(更一般的,一个超平面)分割的数据称为**线性可分(linearly separable)数据。超平面起到线性分类器(linear classifier)**的作用。

允许误差

在上一节中,我们查看的是简单的情形,完美的线性可分数据。然而,现实世界通常是乱糟糟的。你几乎总是会碰到一些线性分类器无法正确分类的实例。

下图就是一个例子。

显然,如果我们使用一个线性分类器,我们将永远不能完美地分割数据点。我们同样不想干脆抛弃线性分类器,因为除了一些出轨数据点,线性分类器确实看起来很适合这个问题。

SVM允许我们通过参数C指定愿意接受多少误差。C让我们可以指定以下两者的折衷:

  1. 较宽的间隔。
  2. 正确分类训练数据。C值较高,意味着训练数据上容许的误差较少。

再重复一下,这是一个折衷。以间隔的宽度为代价得到训练数据上更好的分类。

下图展示了随着C值的增加,分类器和间隔的变化(图中没有画出支持向量):

上图中,随着C值的增加,分割线逐渐“翘起”。在高C值下,分割线试图容纳右下角大部分的红点。这大概不是我们想要的结果。而C=0.01的图像看起来更好的捕捉了一般的趋势,尽管和高C值情形相比,他在训练数据上的精确度较低。

同时,别忘了这是折衷,注意间隔是如何随着C值的增加而收窄的。

在上一节的例子中,间隔曾经是数据点的“无人区”。正如我们所见,这里再也无法同时得到良好的分割边界相应的不包含数据点的间隔。总有一些数据点蔓延到了间隔地带。

由于现实世界的数据几乎从来都不是整洁的,因此决定较优的C值很重要。我们通常使用**交叉验证(cross-validation)**之类的技术选定较优的C值。

非线性可分数据

我们已经看到,支持向量机有条不紊地处理完美线性可分或基本上线性可分的数据。但是,如果数据完全线性不可分,SVM的表现如何呢?毕竟,很多现实世界数据是线性不可分的。当然,寻找超平面没法奏效了。这看起来可不妙,因为SVM很擅长找超平面。

下面是一个非线性可分数据的例子(这是知名的XOR数据集的一个变体),其中的斜线是SVM找到的线性分类器:

显然这结果不能让人满意。我们需要做得更好。

注意,关键的地方来了!我们已经有了一项非常擅长寻找超平面的技术,但是我们的数据却是非线性可分的。所以我们该怎么办?将数据投影到一个线性可分的空间,然后在那个空间寻找超平面!

下面我们将逐步讲解这一想法。

我们将上图中的数据投影到一个三维空间:

下面是投影到三维空间的数据。你是不是看到了一个可以悄悄放入一个平面的地方?

动图封面

让我们在其上运行SVM:

动图封面

太棒了!我们完美地分割了标签!现在让我们将这个平面投影到原本的二维空间:

训练集上精确度100%,同时没有过于接近数据!耶!

原空间的分割边界的形状由投影决定。在投影空间中,分割边界总是一个超平面。

别忘了,投影数据的主要目标是为了利用SVM寻找超平面的强大能力。

映射回原始空间后,分割边界不再是线性的了。不过,我们关于线性分割、间隔、支持向量的直觉在投影空间仍然成立。

动图封面

我们可以看到,在左侧的投影空间中,三维的间隔是超平面之上的平面和之下的平面中间的区域(为了避免影响视觉效果,没有加上阴影),总共有4个支持向量,分别位于标识间隔的上平面和下平面。

而在右侧的原始空间中,分割边界和间隔都不再是线性的了。支持向量仍然在间隔的边缘,但单从原始空间的二维情形来看,支持向量好像缺了几个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询: 定义:关联查询又叫连接查询 常见:内连接/外连接/自连接 1.内连接(无存在主从表) 语法:inner join ...on 定义:组合两个表的记录,返回关联字段相符的记录,也就是返…

【LeetCode】每日一题 2024_9_15 与车相交的点(差分)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 今天的题目曾经的我做过了 . . . 又是复习的一天 题目:与车相交的点 代码与解题思路 func numberOfPoints(nums [][]int) (ans int) { diff : [102]int{}for _, p : range nums {diff[p[0]]d…

Orchestrator 与 Mysql 8.0 的兼容性

一、看图识别问题 二、Mysql 8.0 从 MySQL 8.0.22 开始,使用SHOW REPLICA STATUS代替SHOW SLAVE STATUS,该语句从该版本开始已弃用。 所以:Mysql 8.0.22前可以用Orchestartor

InternStudio大模型之路(十七):销冠大模型案例实战

一、📢 简介 Streamer-Sales 销冠 —— 卖货主播大模型 是一个能够根据给定的商品特点从激发用户购买意愿角度出发进行商品解说的卖货主播大模型。以其独特的智能魅力,将彻底改变您的购物体验。该模型能深度理解商品特点,以生动、精准的语言…

NC输出二叉树的右视图

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 请根据二叉树…

QXDM 如何更新软件?

如何更新QXDM等高通软件?之前做过这个事情,但过几个月给别人讲的时候就忘记了,特做如下记录。 一. 背景知识: 1. QXDM 依赖于Qualcomm package Managers 3(QPM in short)。 目前的时间是2024年9月15日,但不知从何…

华为OD机试 - 找出作弊的人(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

门店引流神器异形创意LED圆形(饼/盘)显示屏使商业广告更有吸引力

在当今这个信息爆炸的时代,商业竞争日益激烈,如何在众多商家中脱颖而出,吸引顾客的注意力,成为了每个商家亟待解决的问题。而在这个视觉为王的时代,一种创新的门店引流神器——异形创意LED圆形(饼/盘&#…

【案例72】Apache检测到目标 URL 存在 http host 头攻击漏洞的解决方案

在网络安全中,我们经常会遇到各种漏洞和攻击,其中 http host 头攻击漏洞是一种比较常见的安全问题。最近,我在处理一个项目时,检测到目标 URL 存在 http host 头攻击漏洞,下面我将分享两种Apache解决这个问题的方法。 …

强烈建议!所有Python基础差的同学,死磕这本64页的背记手册

关于Python书籍的推荐,特别是针对Python背记手册这一类别,虽然直接名为“Python背记手册”的书籍可能不常见,但存在多本详尽的Python学习资料,旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能,这些书籍或资料…

【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目

使用rtt-studio与stm32CubeMx联合创建项目 创建rt-thread项目 设置项目信息 在项目资源管理器中“右击“,创建RRT studio 项目 双击“RT-Thread 项目“。 选择MCU,设置UART,以及调试方式。添加项目名称,点击“完成“按钮。 …

python画图|极坐标下的3D surface

前述学习过程中,我们已经掌握了3D surface的基本绘制技巧,详见链接: python画图|3D surface基础教程-CSDN博客 基础教程中的3D surface绘制位于笛卡尔坐标系,但有时候会用到极坐标绘图。虽然我们已经学过简单的极坐标绘图技巧&a…

C++: 二叉树进阶面试题

做每件事之前都心存诚意, 就会事半功倍. 目录 前言1. 根据二叉树创建字符串2. 二叉树的层序遍历Ⅰ3. 二叉树的层序遍历Ⅱ4. 二叉树的最近公共祖先5. 二叉搜索树与双向链表6. 根据一棵树的前序遍历与中序遍历构造二叉树7. 根据一棵树的中序遍历与后序遍历构造二叉树8. 二叉树的…

AMD FSR 4已秘密开发1年 支持AI帧生成

作为当今三大超分技术之一,AMD FSR曾经在第二代一度紧紧咬住NVIDIA DLSS,但是进入第三代之后反而差距拉大了,尤其是帧生成技术差了很多。AMD高级副总裁、计算与图形业务事业部总经理Jack Huynh近日透露,FSR 2/3并不是AMD真正想要的…

学习使用在windows系统上安装vue前端框架以及环境配置图文教程

学习使用在windows系统上安装vue前端框架以及环境配置图文教程 1、安装nodejs2、安装vue3、安装Vue-cli脚手架4、安装高版本5、创建vue项目6、启动项目7、配置开发环境8、发布项目 1、安装nodejs 点我查看教程 2、安装vue winR,打开cmd cnpm install vue -g表示安…

Golang数据流处理:掌握Reader和Writer接口的技巧

Golang数据流处理:掌握Reader和Writer接口的技巧 引言理解Reader和Writer接口Reader接口的定义和基本方法Writer接口的定义和基本方法 Reader接口的深入探讨Reader接口的实现示例使用io.Reader读取文件内容从网络连接中读取数据 常用Reader类型及其应用场景strings.…

vue之 package.json和package-lock.json

一、package.json 定义了当前项目所需要引用的各个模块,可以手工修改配置,也可以删除后,使用npm init命令重新自动生成。 但是该文件只锁定大版本号,也就是版本号的第一位,所以你会发现两个文件中同一个包的版本号不一…

【Pycharm】Pycharm创建Django提示pip版本需要升级

目录 1、现象 2、分析 3、本质 前言:经常使用pycharm创建django、flask等项目时候提示pip版本需要升级,解决方案 1、现象 使用Pycharm创建Django项目提示安装Django超时,报错建议pip升级22升级到24 2、分析 之前使用命令升级了pip到了24…

数据库连接池与Druid【后端 16】

数据库连接池与Druid 在现代软件开发中,数据库连接池作为一种关键的技术手段,被广泛用于提升数据库访问的效率和稳定性。本文将深入探讨数据库连接池的概念、常见实现,并重点介绍我国阿里集团开源的数据库连接池——Druid,以及如何…

五星级可视化页面(24):管线管路流程图可视化大屏。

本期分享管线、管路方向可视化大屏,一般用在供水、能源、交通等领域。