支持向量机(Support Vector Machine, SVM)本身是一个二元分类算法,是对感知器算法模型的一种扩展。

1. 铺垫 感知器算法模型

什么是感知器算法模型?

感知器算法是最古老的分类算法之一,原理比较简单,不过模型的分类泛化能力比较弱,不过感知器模型是SVM、神经网络、深度学习等算法的基础。

感知器的思想很简单:在任意空间中,感知器模型寻找的就是一个超平面,能够把所有的二元类别分割开。感知器模型的前提是:数据是线性可分的。



找到这样的参数θ: 让一个类别的样本满足:θx>0 ;另外一个类别的满足:θx<0

正确分类:yθx>0,

错误分类:yθx<0

所以我们可以定义我们的损失函数为:期望使分类错误的所有样本到超平面的距离之和最小。

参考下逻辑回归:

逻辑回归的几何意义,又何尝不是向量空间找到一个超平面,超平面一侧的点计算分数结果为负,另一侧结果分数为正(感知器算法模型),只不过最后不直接看sign符号,而是根据sigmoid函数将分数映射到0-1之间通过最大似然来赋予概率意义。

感知器算法模型:向量空间找到一个超平面,超平面一侧的点计算分数结果为负,另一侧结果分数为正, sign(θx)

几何距离:

高维空间中,任意一个点 X0 其对应标签为 y0,到某平面的距离



对于那些正确分类的点,将距离表示为:

分子部分

称为函数距离

损失函, 对于分类错误的点,

要想使得损失函数是大于 0 的,所以分类错误的点距离在前面加个负号



当分子扩大 N 倍的时候,分母也会随之扩大,也就是说分子和分母之间存在倍数关系,所以可以固定分子或者分母为 1, 我们固定分母为1;



不过由于这里的 m 是分类错误的样本点集合,不是固定的,所以我们不能使用批量梯度下降法(BGD)求解

2. SVM 算法思想

SVM 也是通过寻找超平面,用于解决二分类问题的分类算法

超平面一侧的点计算分数结果为负是负例,另一侧结果分数为正是正例

与感知机相同,通过 sign 给出预测标签,正例为+1,负例为-1,模型判别式同样:

不同点:

感知器 是通过 判断错误的点 寻找超平面

逻辑回归 是通过 输出概率的 最大似然 来求解参数

SVM是通过寻找 支撑向量 来寻找 超平面

通过寻找支撑向量来寻找超平面??? 什么意思? 不太懂?后文 还回继续讲解

感知器算法模型 寻找 超平面 将 正例 负例 区分开来即可 所以新来的样本泛华能力 表现一般。

这些分界线哪个更好,这便是 SVM 要解决的问题

实际上离超平面足够远的点基本上都是被正确分类的,

所以这个是没有意义的;反而比较关心那些离超平面很近的点,这些点比较容易分错



假设未来拿到的数据含有一部分噪声,那么不同的超平面对于噪声的容忍度是不同的,

最右边的线是最 robust 的。

换一种角度考虑,找到最胖的超平面--换句话说 就是:只要让离超平面比较近的点尽可能的远离这个超平面, 那么我们的模型分类

效果应该就会比较不错。离超平面比较近的点 就是需要寻找的支撑向量

距离超平面最近的且满足一定条件的几个训练样本点被称为支持向量

一句话总结:SVM 尝试找到一个决策边界,距离两个类别最近的样本最远, 这样的超平面 则是符合条件的 超平面!!

需要找到一个超平面:

  1. 能够完美分类正负例
  2. 距离最近的点越远越好

    正确分类的平面中,距离越近的点越远越好

    也就是说,找到一组最好的 w 和 b 固定一个超平面,使这个超平面在能完美区分正负例的

    基础上,距离最近的点间隔最大

转化成数学描述:



一个超平面对应无数个 w,b,只要找到其中任意一个 w 符合条件的 w 就可以了选择最好求的



等价于:



本质上这里 不就是L2范数最小

铺垫 拉格朗日函数

原始问题:

约束条件表述为 k 个不等式约束条件,和 L 个等式约束条件

转化成拉格朗日函数:



其中 ci 是第 i 个不等式约束函数(需要整理),bj 是第 j 个等式约束函数αi 和βi 是拉格朗日乘子

原始问题:

构建拉个朗日函数:



对偶原理:

转化成:

下面就开始求解对偶函数的第一步

拉格朗日函数分别求 w 和 b 的偏导:

将 w 反代回原来的拉格朗日函数中就可

以进行第二步求关于α的极大了

第二步对对偶函数的优化问题

去掉负号转换为求极小问题

只要解决了这个问题,svm 的学习问题就完成了

通常使用 SMO 算法进行求解,可以求得一组α* 使得函数最优化

smo算法 后面再讲, 假设我们已经得到α*

将xi yi带入就能求得w*

b*怎么求解?对于支持向量 上的点 满足:

如何寻找 支持向量?

ktt条件:

那么所有α>0 时后面一项需要=0 也就是

支持向量

求 b 的过程:找到所有个支持向量带进去求出所有个 b,然后求平均这样我们就得到了分割超平面

这样我们就得到了分割超平面

3. 硬分割SVM总结

1:目标: 求得一组 w 和 b 使得分隔 margin 最大

2. 通过拉格朗日函数构造目标函数,问题由求得 n 个 w 和 1 个 b 转换为求得

m 个α



3. 利用 smo 算法求得 m 个α*

4. 利用求得的 m 个α求得 w和 b*

机器学习-线性分类-SVM支持向量机算法-12的更多相关文章

  1. SVM 支持向量机算法-实战篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 上一篇介绍了 SVM 的原理和一些基本概念,本篇来介绍如何用 SVM 处理实际问题. 1,SVM 的实现 SV ...

  2. 机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类

    实验2 感知机算法与支持向量机算法 一.预备知识 1.感知机算法 二.实验目的 掌握感知机算法的原理及设计: 掌握利用感知机算法解决分类问题. 三.实验内容 设计感知机算法求解, 设计SVM算法求解( ...

  3. SVM(支持向量机)算法

    第一步.初步了解SVM 1.0.什么是支持向量机SVM 要明白什么是SVM,便得从分类说起. 分类作为数据挖掘领域中一项非常重要的任务,它的目的是学会一个分类函数或分类模型(或者叫做分类器),而支持向 ...

  4. 深入浅出理解SVM支持向量机算法

      支持向量机是Vapnik等人于1995年首先提出的,它是基于VC维理论和结构风险最小化原则的学习机器.它在解决小样本.非线性和高维模式识别问题中表现出许多特有的优势,并在一定程度上克服了" ...

  5. SVM 支持向量机算法介绍

    转自:https://zhuanlan.zhihu.com/p/21932911?refer=baina 参考:http://www.cnblogs.com/LeftNotEasy/archive/2 ...

  6. SVM 支持向量机算法-原理篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇来介绍SVM 算法,它的英文全称是 Support Vector Machine,中文翻译为支持向量机. ...

  7. SVM支持向量机算法

    支持向量机(SVM)是另一类的学习系统,其众多的优点使得他成为最流行的算法之一.其不仅有扎实的理论基础,而且在许多应用领域比大多数其他算法更准确.  1.线性支持向量机:可分情况 根据公式(1)< ...

  8. 跟我学算法-svm支持向量机算法推导

    Svm算法又称为支持向量机,是一种有监督的学习分类算法,目的是为了找到两个支持点,用来使得平面到达这两个支持点的距离最近. 通俗的说:找到一条直线,使得离该线最近的点与该线的距离最远. 我使用手写进行 ...

  9. 机器学习(Machine Learning)算法总结-决策树

    一.机器学习基本概念总结 分类(classification):目标标记为类别型的数据(离散型数据)回归(regression):目标标记为连续型数据 有监督学习(supervised learnin ...

  10. 支持向量机 (一): 线性可分类 svm

    支持向量机(support vector machine, 以下简称 svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本系列力图展现 svm 的核心思想和完整推导过 ...

随机推荐

  1. 使用 Taro 开发鸿蒙原生应用 —— 当 Taro 遇到纯血鸿蒙

    纯血鸿蒙即将到来 在今年 8 月的「2023年华为开发者大会(HDC.Together)」上,华为正式官宣「鸿蒙Next」,这个更新的版本将移除所有的 AOSP 代码,彻底与 Android 切割,使 ...

  2. cocos2d-Js 各类碰撞检测

    这里总结一下点.圆.矩形之间的简单碰撞检测算法(矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半径 isCollision: function(p ...

  3. 如何将Swagger接口导入ApiFox

    先按照如下图操作 在apifox创建一个新项目,点击项目 点击导入数据(可以选择手动或者自动) 复制刚才的url,然后立即导入,保存

  4. Python——第二章:列表的概念

    在编程中,列表(List)是一种常用的数据结构,用于存储一组有序的元素.列表是Python中的内置数据类型之一,它允许你在一个变量中存储多个值,并且这些值可以是不同的数据类型,包括整数.浮点数.字符串 ...

  5. 如何在GitHub正确提PR(Pull Requests),给喜欢的开源项目贡献代码

    最好的中文TTS项目Bert-vits2更新了中文特化分支,但可能由于时间仓促,代码中存在不少的bug,作为普通用户,有的时候也想为自己喜欢的开源项目做一点点贡献,帮助作者修改一些简单的bug,那么该 ...

  6. Android 事件分发介绍

    目录 一.目的 二.环境 三.相关概念 3.1 事件分发 四.详细设计 4.1应用布局 4.1.1 应用布局结构 4.1.2 LayoutInspector 4.2 关键View&方法 4.2 ...

  7. 25、Flutter中基本路由

    Flutter 路由介绍 Flutter中的路由通俗的讲就是页面跳转.在Flutter中通过Navigator组件管理路由导航. 并提供了管理堆栈的方法.如:Navigator.push和Naviga ...

  8. SignalR:React + ASP.NET Core Api

    一. 后台WebApi配置: 注:Vision为业务名称,以此为例,可随意修改 1. 安装包:Microsoft.AspNetCore.SignalR 2. 注入 Startup.cs Configu ...

  9. MySQL基础篇:第七章_详解mysql存储过程&函数

    存储过程 含义:一组经过预先编译的sql语句的集合 好处: 1.提高了sql语句的重用性,减少了开发程序员的压力 2.提高了效率 3.减少了传输次数 分类: 1.无返回无参 2.仅仅带in类型,无返回 ...

  10. 【华为云技术分享】40%性能提升,华为云推出PostgreSQL 12 商用版

    摘要:日前,华为云数据库正式推出了RDS for PostgreSQL 12版本,并开始商用.本文将从华为云RDS for PostgreSQL 12的4大特性和架构图等多方面来解读华为云Postgr ...