[机器学习与scikit-learn-34]:算法-分类-支持向量机SVM的基本简介与基本原理-线性分类

2023-10-31

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123778715


目录

第1章 支持向量机概述

1.1 什么是支持向量机

1.2 为什么称为支持向量机

1.3 支持向量机功能的强大

1.4 支持向量机性能的强大

1.5 支持向量机应用广泛

1.6 SVM是最接近深度学习的机器学习算法。

第2章 支持向量机的基本思想(以平面二分类为例)

2.1 分类目标与基本思想

2.2 不适宜问题

2.3 支持向量机的基本思想

2.4 支持向量机基于思想的进一步说明

第3章 隔离带Hard Margin的数学表达式与最优化

第4章 Soft margin SVC的基本原理

4.1 Hard margin面临的困难与soft margin的几何图形

4.2 Soft margin的解决之道

4.3 Soft margin的数学表达式=》把现实问题转换最优化问题

4.4 soft margin的参数求解:最优化求解过程=》梯度下降。

第5章 数据的正则化/规范化

5.1 为什么要正则化Normalization

5.2 什么是正则化Normalization

5.3 如何正则化Normalization

后记:

参考:


第1章 支持向量机概述

1.1 什么是支持向量机

支持向量机SVM(Support Vector Machine),是机器学习中获得关注最多的算法,是scikit-learn中功能最全面的机器学习算法,没有之一。

它是利用1个决策边界(二维直线或三维平面)和2个支撑边界(二维直线或三维平面)共同协作,完成对线性和非线性数据的分类, 以及线性与线性数据的拟合。

在上图中,实线称为决策或分类边界线,2个虚线称为支撑边界。

1.2 为什么称为支持向量机

支持向量机=》“支持”、“向量”、“机”,这3个词。

“机”:机器,机器自动完成某种算法功能。

向量:是指样本,每个样本都是多维数据,因此称为向量。

那什么是“支持/支撑”向量呢?也就是说,并非所有的向量都可以称为支持向量。

在支持向量机中,一定存在这样的向量点,它们离决策边界线的距离最近,通过这些点,可以画出2个平行于决策边界线的平行线,这2个平行线就是支撑线(在上图中的虚线部分),用于隔离不同类型的数据。在左侧虚线的上方是一类数据,在右侧虚线的下方的数据就是另一类数据。而虚线的中间是没有数据的。虚线通过的点,称为支持/支撑向量!!!

这就是支持向量机名称的由来!!!。

1.3 支持向量机功能的强大

支持向量机能够完成线性分类、线性拟合、非线性分类、非线性拟合、无监督学习等。

上面的这些功能,基本上通过支持向量机都可以完成。

  • 线性分类:Linear SVC
  • 线性拟合:  Linear SVR
  • 非线性分类: SVC
  • 非线性拟合: SVR
  • 其他: SVM.......

1.4 支持向量机性能的强大

SVM不仅仅功能强大,性能还很优越。

在相同的数据集上,支持向量机RBF SVM的性能在各种功能上,性能都超过决策树、随机深林、AdaBoorst和朴素贝叶斯。

1.5 支持向量机应用广泛

从实际应用来看,SVM在各种实际问题中都表现非常优秀。

它在手写识别数字和人脸识别中应用广泛,在文本和超文本分类中举足轻重,因为SVM可以大量减少标准归纳(standard inductive)和转换设置(transductivesettings)中对标记训练实例的需求。

同时,SVM也被用来执行图像的分类,并用于图像分割系统。实验结果表明,在仅仅三到四轮相关反馈之后,SVM就能实现比传统的查询细化方案(query refinement schemes)高出一大截的搜索精度。

除此之外,生物学和许多其他科学都是SVM的青睐者,SVM现在已经广泛被用于蛋白质分类,现在化合物分类的业界平均水平可以达到90%以上的准确率。在生物科学的尖端研究中,人们还使用支持向量机来识别用于模型预测的各种特征,以找出各种基因表现结果的影响因素。 

1.6 SVM是最接近深度学习的机器学习算法

(1)相似点(网络结构相似)

线性SVM可以看成是神经网络的单个神经元

非线性的SVM则与两层的神经网络相当,非线性的SVM中如果添加多个核函数,则可以模仿多层的神经网络。

而从数学的角度来看,SVM的数学原理是公认的对初学者来说难于上青天的水平,对于没有数学基础和数学逻辑熏陶的人来说,探究SVM的数学原理本身宛如在知识的荒原上跋涉。

(2)不同点(网络的使用不同)

  • 损失函数不同
  • 网络的输出含义不同

第2章 支持向量机的基本思想(以平面二分类为例)

2.1 分类目标与基本思想

数据符合上述分布,如何进行分类了?很多方法可以实现上述目标的分类: 决策树、随机森林,贝叶斯分类,它们通过一个决策边界把两个的数据分开。

2.2 不适宜问题

 通过直线边界进行分类问题:在现有样本一定的情况下,中间可分的直线很多种,虽然这些直线在测试样本上,都可以保证测试数据分布在直线的两端,但如何确保决策边界的泛化能力比较好呢?

 对边界线的不同的界定方案或方法,即不同的不适应问题的解决办法,就衍生出不同的算法。

(1)普通的逻辑回归与神经网络的基本思想

逻辑回归数据分为0和1,并通过sigmod函数(这是核心)把样本点到直线的距离转换成【0,1】之间的数值。

转换后的效果:

  • 直线下方离直线的的距离越远,经过sigmod转换后的Ypred数值越接近于0,越接近该类样本的标签值0.
  • 直线上方离直线的的距离越远,经过sigmod转换后的Ypred数值越接近于1,越接近该类样本的标签值1.
  • 越靠近直线,经过simod转换后,数值越模糊,接近于0.5.
  • 下方数据的标签定义为0, 上方数据标签定义为1.

Loss函数与最优化

  • 每个样本点到拟合函数的距离Ypred 与标签Yi的差,即是样本的loss = |Ypred - Yi| 或 (Ypred - Yi)^2.
  • Loss函数:目标就是所有样本的loss之和最小,
  • 最优化:找到合适的直线,使得上述的loss最小,loss最优化问题,找到合适的a,b。使得尽可能多的点离直线的距离远,即 |Ypred - Yi|尽可能接近0.

(2)支持向量机

支持向量机,并没有经过sigmod函数转换,它采用了根据直观的、更加直接、更加简单的方法来分离标签数据。

2.3 支持向量机的基本思想

支持向量机并没有采用什么sigmod函数,对样本点到直线的距离进行映射,而直接采用了原始的距离,在上图中,支持向量机定义了新的名称:

(1)定义了3条直线

 0号直线:

它能够将样本数据完全分开,这个直线称为决策边界线(隔离线),用 y = wx + b表示,也可以用 wx - y + b = 0表示。

1号直线:

红色样本点中,存在这样的样本点,它离直线的距离最近,这样的点称为支持向量点。

1号直线就会穿过支持向量点,且1号直线平行于决策边界线,距离为d。

-1号直线:

蓝色样本点中,存在这样的样本点,它离直线的距离最近,这样的点称为支持向量点。

-1号直线就会穿过支持向量点,且-1号直线也平行于决策边界线,距离为d。

平行:三条直线平行,构成隔离带

(2)定义支撑向量/支持向量点到直线的距离d

(3)margin:样本点之间的矩形(线性)隔离带

  • margin = 2*d
  • 支持向量机的目标:就是找到一个直线,使得margin尽可能的大。

上述就是支持向量机的基本思想,

margin越大,样本点之间的矩形(线性)隔离带空间越多,决策边界的隔离效果越好。

当满足上述条件的margin最大时的决策线wx - y + b = 0,就是要找的直线,对应的w,b的参数就是根据模型训练的参数。

提示:

我们可以发现,参数w、b的参数值,与总的样本点数量无关,只与靠近直线最近的样本点相关!!!

支持向量机,只需要少量的典型的样本点,就可以进行学习。

2.4 支持向量机基于思想的进一步说明

(1)隔离带Margin不仅仅要考虑了现在(训练集),还考虑了未来(测试集)

隔离带Margin边界越近,越容易混淆,类别越模糊,越容易出错。

隔离带Margin边界越远,类别越明确,确定性越好。

隔离带Margin的所围成的面积越大越好(而不是越小越好)

在上述的探讨中个,隔离带Margin中间是没有样本数据点的,所有的样本数据分布隔离带的两边,这样的隔离带称为:Hard Margin SVM.

第3章 隔离带Hard Margin的数学表达式与最优化

3.1 Hard margin的几何图形

(1)Hard margin的几何图形

(2)点到直线的距离公式

点到直线的距离,即过这一点做目标直线的垂线,由这一点至垂足的距离。

3.2 Hard margin的数学表达式=》把现实问题转换最优化问题

(1)决策边界线的数学表达式

消去常数分母得到:

 

 

 

 (2)定义最小化目标

由于margin的上下边界线会穿过支撑向量,因此|WX+B|的值=1.

因此,我们的直线的参数满足如下条件:

   对于支撑向量点:

   直线|WX+B| = 1 

 

3.3 Hard margin的参数求解:最优化求解过程

这是有有条件下的最优化数值求解,即有条件下求loss函数最小化问题,需要用到拉普拉斯变换。

本文不做进一步的探讨。

一定能够找到这样的一个W权重向量,使得WX+B =0构建的margin最大且要确保所有的样本点都落在margin外部(这个限制条件非常重要,这是SVC的重点与难点,也是SVC相对于梯度下降法最重的特点)

第4章 Soft margin SVC的基本原理

4.1 Hard margin面临的困难与soft margin的几何图形

如果按照Hard margin的判断规则,找到一个中间严格不包含任何任何数据点的隔离带的话,会导致两类数据之间边界处的误差较大的点,对最终的结果产生较大的影响。

Hard margin算法求W,B参数时,最主要的依赖是离决策边界最近的点,其中最重要的就是支持向量点,而不是所有的样本的点,通过W,B参数的调整,找到一个直线,使得支持向量点到决策边界线的距离最短。

这种算法效率高,但缺点和尴尬也是很明显的:

越是中间的点,出错的可能性就越大,越是中间的点,误差的可能性就越大,我们完全依赖个别的误差较大的点或甚至可能以及出错的样本的点,而计算出来的决策边界线和隔离带,那准确吗?万一其中的最近的样本点的标签出错了怎么办?这就会导致计算出来的决策边界线和隔离带是基于错误信息得到的,那决策边界和隔离带难准确吗?很显然,答案是否定的。

Hard margin算法最大的优点是依赖少量的样本点,效率高,当样本点非常精确,且边界处没有误差时,这种算法的优势就非常明显。

然后,当边界处的样本点误差较大,甚至有错误时,优点也就变成了缺点,依据局部错误的信息,而不是依据全局的宏观信息得到的决策边界的准确性就大打折扣了。

一句话,Hard margin容错的能力太小了,soft margin就是在Hard margin算法的基础之上,为之增加容错能力进一步的优化算法,而不是完全推翻Hard margin的算法。

4.2 Soft margin的解决之道

(1)依然保留原先的隔离区

(2)在决策边界和隔离区边界中间增加一个缓冲地带,通过虚线表示,这里称为缓冲线,在缓冲区,允许出现部分的样本的点。

(3)在非缓冲地带隔离区,亦然不允许出现任何样本点。 

(4)当缓冲线越接近边界线的时候,容错能力越强,但决策边界需要的信息越多。

如何用数学表达上述的缓冲线呢?

4.3 Soft margin的数学表达式=》把现实问题转换最优化问题

4.4 soft margin的参数求解:最优化求解过程=》梯度下降。

 

通过上述方法计算得到的W, B参数,具备了一定的容错能力。

 可以通过超参数C来控制缓冲带的权重和影响能力。

C越小,缓冲区越小

C越大,缓冲区越大。 

上图允许隔离带中包含一定的样本。 

第5章 数据的正则化/规范化

5.1 为什么要正则化Normalization

在机器学习不同,不同维度的特征值,其量纲是不同的,导致不同维度的特征值,其数值范围相差非常大,有些数值空间在【0,1】之间,有些维度的数值范围在几万,甚至几十万之间。

这些不同量纲不同数值范围的数据放到一起Y=F(X1,X2,X3...), 导致大范围的数据,很容易把小数值数据吞并掉,这种吞并是负面的,因为他们的量纲不同,大数值不代表真的影响大。

如1公里与100毫米,并不能说明100毫米,就比1公里大。

不同量纲的不同数值范围,还带来一个严重的问题,就是大数值的一个微小的误差,都会导致小数值数据失效。

这就是大数字吃掉小数字问题。

为了解决上述问题,需要把不同维度的特征数据,全部正则化到【0,1】区间。

Normalization虽然解决了自身的输入数据不同维度的规范化,但他没有解决如何规范的问题。

5.2 什么是正则化Normalization

Normalization的中文翻译一般叫做“规范化”,是一种对数值的特殊函数变换方法,也就是说假设原始的某个数值是x,套上一个起到规范化作用的函数,对规范化之前的数值x进行转换,形成一个规范化后的数值。

规范化,完成了不同维度数据的规范和统一,但并没有对如何规范作出规定。就拿考试来讲,是规范到100制度,还是规范到150制上,并不要求,只要所有的输入都规范到相同的空间就行了。

5.3 如何正则化Normalization

[人工智能-深度学习-43]:输入预处理 - 规范化Normalization、标准化Standardization、正态分布、算术平均、方差_文火冰糖的硅基工坊的博客-CSDN博客


后记:

上述的探讨的是线性可分的数据集,对于线性不可分的数据集,SVM是如何处理的呢?

升维,转换成高纬度的线性可分,还是有其他方法?

参考:

独家首播!Python机器学习+算法+人工智能+项目实战【建议收藏】_哔哩哔哩_bilibili

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[机器学习与scikit-learn-34]:算法-分类-支持向量机SVM的基本简介与基本原理-线性分类 的相关文章

随机推荐

  • 畅玩mt3单机游戏服务器维护,【梦幻西游】MT3仿端手工游戏服务端源码[教程+授权物品后台]...

    梦幻西游 MT3仿端手工游戏服务端源码 教程 授权物品后台 架设教程 系统 CentOS 6 8 64位 1 关闭防火墙 chkconfig iptables off service iptables stop 2 安装宝塔 yum ins
  • python2E 之构建series

    构建全为零 空值的series a pd Series data 0 index overview index a pd Series data np nan index fund overview index 自定义空的series pd
  • 【c++报错】无法打开自己的工程项目(C++ 无法打开文件“xxx.lib”)

    问题 C 无法打开文件 xxx lib 问题分析 在进行单个生成的时候 可以生成成功 也可以运行程序 但是点击全部重新生成时 就显示无法打开文件 xxx lib 观察生成顺序 发现exe的程序 调用自己项目的dll 先进行生成 然后才生成d
  • leetcode 困难 —— 戳气球(超详细思路)

    题目 有 n 个气球 编号为 0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 戳破第 i 个气球 你可以获得 nums i 1 nums i nums i 1 枚硬币 这里的 i 1 和
  • c++学习之多继承

    1 多继承语法 class Son public Base1 public Base2 2 当base1和base2出项同名成员时 子类使用时要加作用域区分 Son s s Base1 m A s Base2 m B
  • 计算机网络——网络层之路由选择协议

    参考链接 CSKAOYAN COM 路由选择协议 自治系统AS 由于 1 因特网规模很大 2 许多单位不想让外界知道自己的路由选择协议 但还想连入因特网 于是产生了自治系统AS 在单一的技术管理下的一组路由器 而这些路由器使用一种AS内部的
  • 前段后端项目放在不同服务器上,将后端和前端服务放在开发中的同一个Web服务器后面...

    我做了一个具有相同堆栈的项目 就我而言 整个前端位于Django项目目录中的一个名为static的文件夹中 这个静态文件夹被定义为Django项目的settings py文件中的静态根目录 那么 什么情况是 第一个HTML文件 说的inde
  • Spring Boot2.0配置Druid数据库连接池(单数据源、多数据源、数据监控)

    我这里使用的开发环境是 IDEA 2017 JDK 1 8 Maven 3 3 9 SpringBoot 使用的是2 0 3版本 详细创建过程可以参考 https blog csdn net qq 38455201 article deta
  • C语言(C++)作业

    一 指针和内存泄露 1 malloc函数 malloc的全称是memory allocation 中文叫动态内存分配 用于申请一块连续的指定大小的内存块区域以void 类型返回分配的内存区域地址 当无法知道内存具体位置的时候 想要绑定真正的
  • 最长公共前后缀

    最长公共前后缀 字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串 后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串 例如对于字符串 abacaba 其前缀有 a ab aba abac abacab 后缀有bac
  • tf2.2和tf2.4默认的cuda版本

    tf2 2和tf2 4默认的cuda版本 tf2 4默认适配cuda11 tf2 2默认适配cuda10 1 实测清华源可以直接 conda install cudatoolkit 11 0 cudnn 8
  • Scrum认证Scrum Master(CSM)认证课

    课程简介 Scrum是目前运用最为广泛的敏捷开发方法 是一个轻量级的项目管理和产品研发管理框架 旨在最短时间内交付最大价值 根据2021年全球敏捷状态报告 Scrum及Scrum衍生方法的应用占比达到81 在企业的敏捷转型历程中 Scrum
  • Mock.js 前端数据模拟工具

    什么是Mock js Mock js是一个功能强大的模拟数据生成器 它可以帮助开发者在前端开发过程中模拟后端数据 使得前端开发者可以在后端接口尚未完成的情况下进行开发 这极大地提高了开发效率 为什么要使用Mock js 在传统的前后端协同开
  • 【Linux】高级IO和多路转接

    多路转接和高级IO 咳咳 写的时候出了点问题 标点符号全乱了 批量替换了几次 干脆就把全文的逗号和句号都改成英文的了 不然代码块里面的代码都是中文标点就跑不动了 1 高级IO 1 1 五种IO模型 用钓鱼佬的栗子 来看看五种不同的IO模型吧
  • 新一代烧写工具—STM32CubeProgrammer!

    STM32CubeProgrammer STM32CubeProg 是STM32微控制器的专用编程工具 STM32用户都知道 当完成程序调试 需要对芯片进行程序代码烧录编程 一般会有三个选择 通过调试接口 JTAG SWD 来烧写程序 一般
  • 漏洞扫描服务内容、方式以及流程一篇了解

    漏洞扫描是指基于漏洞数据库 通过扫描工具 人工的方式对客户信息系统的资产 包含网络设备 安全设备 主机系统 web应用 数据库系统等 进行全面 深入的安全脆弱性检测 检测完成后为客户输出可参考的分析报告及修复方案 具体服务内容 方式以及流程
  • C语言,实现字符串移动,例如char str[]=“AGAB%Sr67gs5ffwt+%“ 得到结果是“AABGS567grstw%%+“

    实现字符串移动 例如char str AGAB Sr67gs5ffwt 得到结果是 AABGS567grstw 1 1 先对字符串实现升序排序 voidSort char p int n 1 2 从字符串中挑出大写 char DaXie c
  • boot-admin整合Quartz实现动态管理定时任务

    淄博烧烤爆红出了圈 当你坐在八大局的烧烤摊 面前是火炉 烤串 小饼和蘸料 音乐响起 啤酒倒满 烧烤灵魂的party即将开场的时候 你系统中的Scheduler 调试器 也自动根据设定的Trigger 触发器 从容优雅的启动了一系列的Job
  • Taro转支付宝小程序问题总结

    1 ios系统出现跳转两次的问题 解决 新建project alipay json 中设置 enableAppxNg true enableNodeModuleBabelTransform true 2 二级页面 页面凹陷进顶部 导航栏透明
  • [机器学习与scikit-learn-34]:算法-分类-支持向量机SVM的基本简介与基本原理-线性分类

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123778715 目录 第1章 支持向