SVM原理详细图文教程来了!一行代码自动选择核函数
点击上方,选择星标或置顶,不定期资源大放送!
阅读大概需要5分钟
Follow小博主,每天更新前沿干货
转载自:量子位
SVM?老分类算法了,轻松拿下。
然而,每一次老板让你讲解SVM,或每一次面试被问到SVM,却总是结结巴巴漏洞百出。
「这些人怎么总能精准发现我的盲点?」
简直让人怀疑自己掌握的是假SVM。
如果你有这样的问题,那这篇SVM数学原理对你会有很大帮助,一起来看看吧。
SVM 由线性分类开始
理解SVM,咱们必须先弄清楚一个概念:线性分类器。
给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。
如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的目标是要在n维的数据空间中找到一个超平面(hyper plane),将x的数据点分成两类,且超平面距离两边的数据的间隔最大。
这个超平面的方程可以表示为( wT中的T代表转置):
△2维坐标系中,超平面是一条直线
当f(x)等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点。
SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。任意超平面可以用下面这个线性方程来描述:
二维空间点(x,y)到直线Ax+By+C=0的距离公式是:
扩展到n维空间后,点x=(x1,x2……xn)到直线wTx+b=0的距离为:
其中 :
根据支持向量的定义,支持向量到超平面的距离为d,其他点到超平面的距离大于d。
于是有:
||w||d是正数,令它为 1(之所以令它等于 1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),于是:
将两个方程合并,有:
至此,就得到了最大间隔超平面的上下两个超平面。
每个支持向量到超平面的距离可以写为:
由 y(wTx+b)>1>0 可以得到 y(wTx+b)=|wTx+b|,所以可以将支持向量到超平面距离改写为:
最大化这个距离:
这里乘上 2 倍是为了后面推导方便,对目标函数没有影响。
带入一个支持向量,可以得到:
所以得到的最优化问题是:
处理异常值
有时,对于某些点(x(i),y(i)),分类器可能会做出错误操作。
尽管在开发实际使用的SVM模型时,会设计冗余,避免过拟合,但仍然需要想办法将误差控制在一个较小的范围。
可以通过在模型中增加惩罚机制(用c表示)解决这个问题。
设SVM输出结果为E,则上图中出现的E=0则没有惩罚。
若果c非常大,则模型分类更加精准,但支持向量到超平面距离小,容易出现过拟合。
若c=1,则支持向量到超平面距离最大化,尽管会出现一些分类误差,但这是一种较好的方案。
约束凸优化问题
为了克服约束凸优化问题,采用PEGASOS算法。
重新构造一个约束独立性方程:
上式表示,如果点远离直线,则误差将为零,否则误差将为(1-t(i))。
我们需要最小化的是:
由于消除了约束,因此可以采用梯度下降来最大程度地减少损失。
梯度下降算法计算损失:
在SVM上应用梯度下降:
非线性分类
使用SVM对非线性数据进行分类,需要将数据投影到更高的维度,即通过增加低维数据的特征向量将其转换为高维数据。
增加数据特征向量需要消耗巨大的计算资源,这里采用核函数。
而这种思路最难的点,是为你自己的模型选择一个合适的核函数。
这里推荐一种自动调参方法GridSearch。
将多种核函数(线性、RBF、多项式、sigmoid等)等标号,依次调用,找到一个最合适自己模型的。
定义一个变量params:
params = [{‘kernel’:[‘linear’, ‘rbf’, ‘poly’, ‘sigmoid’], ‘c’:[0.1, 0.2, 0.5, 1.0, 2.0, 5.0]}
调用:
以上详细介绍了SVM背后的数学原理,并提供了一些使用SVM模型时的问题解决办法。
其中,使用代码自动选择核函数的方法来自外国博主Daksh Trehan。
欢迎添加群助手微信,邀请您加入大佬云集-深度学习技术交流群!
???? 长按识别添加,邀请您进群!
SVM原理详细图文教程来了!一行代码自动选择核函数相关推荐
- SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 贾浩楠 发自 凹非寺 转自 | 量子位 SVM?老分类算法了,轻松拿下. 然而,每一次老板让你 ...
- 人脸检测和识别(中文标记)完整项目源代码(基于深度学习+python3.6+dlib+PIL+CNN+(tensorflow、keras)10分钟实现 区分欢乐颂中人物详细图文教程和完整项目代码)
转载请注明:https://blog.csdn.net/wyx100/article/details/80428424 效果展示 未完待续... 环境配置 win7sp1 python ...
- 人工智能python+dlib+opencv技术10分钟实现抖音人脸变狗头详细图文教程和完整项目代码
效果展示 动态效果 静态效果 未完待续... 素材 项目讲解.代码和素材 https://blog.csdn.net/wyx100/article/details/80428424 开发环境 win7 ...
- python画狗头_人工智能python+dlib+opencv技术10分钟实现抖音人脸变狗头详细图文教程和完整项目代码...
效果展示 动态效果 静态效果 未完待续... 素材 项目讲解.代码和素材 开发环境 win7sp1 python 3.6.3 dlib ...
- 老牌激活工具– Microsoft Toolkit 2.4.3 + 详细图文教程【转】
老牌激活工具-- Microsoft Toolkit 2.4.3 + 详细图文教程 windows Toolkit是一个一键激活MS Office 2010的工具.原理就是利用KMS来激活,不是新的激 ...
- IntelliJ IDEA 下载安装及配置使用超详细图文教程
title: IntelliJ IDEA 下载安装及配置超详细图文教程 date: 2021-03-18 18:20:48 tags: Java IDEA categories: 开发工具及环境 co ...
- 阿里云ECS服务器安装docker教程(超详细图文教程)
文章预览: 阿里云ECS服务器安装docker教程(超详细图文教程) 一.查看服务器信息 二.安装docker 三.卸载docker 四.阿里云镜像加速器 五.篇外 阿里云ECS服务器安装docker ...
- Borland C++ Builder6.0中文破解安装详细图文教程(附注册机)
Borland C++ Builder6.0中文破解安装详细图文教程(附注册机) 互联网 03-20 09:10:25 作者:佚名 我要评论 C++Builder 6.0是一款由Borl ...
- VMware 14 安装 macOS10.13 详细图文教程
VMware 14 安装黑苹果 macOS10.13 详细图文教程 之前就想着装个 macOS 耍耍,看看是不是真的像别人说的那么好用,刚好看到有网友(原文链接见文后)分享安装方法,博主手痒痒也试了一 ...
最新文章
- EffectiveC++ Item11
- usermod 命令、mkpasswd命令及用户密码管理
- Docker渐入佳境
- 【大佬漫谈】数字科技驱动的信贷风险技术——乔杨
- SpringBoot AOP完全讲解二:统一处理请求日志
- ITK:将两个图像加在一起
- 打造轻量级可视化数据爬取工具-菩提
- JConsole的使用手册 JDK1.5(转)
- 上银驱动器使用手册_禾川伺服驱动器说明书
- STM32入门开发: NEC红外线协议解码(超低成本无线传输方案)
- cpu单核性能测试软件,CPU常用跑分软件 你知道那些?
- 【虹科科普】信号发生器分类及任意波形发生器原理
- 国美易卡不需要扩展,国美易卡系统维护复杂
- ADM pro破解百度云限速 ADM pro设置方法 ES文件管理器
- Maya2022和C4D哪个更好用?
- 退出登录清空session
- java 最后的异常_关于java:异常处理尝试没有catch,但最后
- HTML5 自动聚焦 autofocus 属性
- java最简单的代码
- 单片机嵌入式二维码解码识别
热门文章
- 7-22关于agriculture-mvc的理解与完善,通过关键字模糊查询
- nginx基于域名的日志切割脚本
- Color Picker like PhotoShop
- js数组如何按照固定的下标去重_js数组去重的三种常用方法总结
- html调用asp边疆,[求助]怎么实现ASP在HTML中调用
- Java基类共同属性设置_java – 你有一个Hibernate实体的基类吗?
- firefox html5 canvas,html5 Canvas
- pd.read_csv读取txt时整型变成浮点型问题解决
- mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优
- JVM是如何进行多线程并行编程的