知行编程网知行编程网  2022-06-11 20:00 知行编程网 隐藏边栏 |   抢沙发  11 
文章评分 0 次,平均分 0.0

SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具

贾浩楠 发自 凹非寺

转自 | 量子位 

SVM?老分类算法了,轻松拿下。
然而,每一次老板让你讲解SVM,或每一次面试被问到SVM,却总是结结巴巴漏洞百出。
「这些人怎么总能精准发现我的盲点?」
简直让人怀疑自己掌握的是假SVM。
如果你有这样的问题,那这篇SVM数学原理对你会有很大帮助,一起来看看吧。

   SVM 由线性分类开始


理解SVM,咱们必须先弄清楚一个概念:线性分类器

给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。
如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的目标是要在n维的数据空间中找到一个超平面(hyper plane),将x的数据点分成两类,且超平面距离两边的数据的间隔最大。
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
这个超平面的方程可以表示为( wT中的T代表转置):
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具2维坐标系中,超平面是一条直线
当f(x)等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点。
SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。任意超平面可以用下面这个线性方程来描述:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
二维空间点(x,y)到直线Ax+By+C=0的距离公式是:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
扩展到n维空间后,点x=(x1,x2……xn)到直线wTx+b=0的距离为:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
其中  :
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
根据支持向量的定义,支持向量到超平面的距离为d,其他点到超平面的距离大于d。
于是有:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
||w||d是正数,令它为 1(之所以令它等于 1,是为了方便推导和优化,且这样做对目标函数的优化没有影响),于是:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
将两个方程合并,有:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
至此,就得到了最大间隔超平面的上下两个超平面。
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
每个支持向量到超平面的距离可以写为:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
y(wTx+b)>1>0 可以得到 y(wTx+b)=|wTx+b|,所以可以将支持向量到超平面距离改写为:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
最大化这个距离:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
这里乘上 2 倍是为了后面推导方便,对目标函数没有影响。
带入一个支持向量,可以得到:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
所以得到的最优化问题是:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具


   处理异常值


有时,对于某些点(x(i),y(i)),分类器可能会做出错误操作。

尽管在开发实际使用的SVM模型时,会设计冗余,避免过拟合,但仍然需要想办法将误差控制在一个较小的范围。
可以通过在模型中增加惩罚机制(用c表示)解决这个问题。
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
设SVM输出结果为E,则上图中出现的E=0则没有惩罚。
若果c非常大,则模型分类更加精准,但支持向量到超平面距离小,容易出现过拟合。
若c=1,则支持向量到超平面距离最大化,尽管会出现一些分类误差,但这是一种较好的方案。

   约束凸优化问题


为了克服约束凸优化问题,采用PEGASOS算法。

重新构造一个约束独立性方程:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
上式表示,如果点远离直线,则误差将为零,否则误差将为(1-t(i))。
我们需要最小化的是:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
由于消除了约束,因此可以采用梯度下降来最大程度地减少损失。
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
梯度下降算法计算损失:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
在SVM上应用梯度下降:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具

   非线性分类

使用SVM对非线性数据进行分类,需要将数据投影到更高的维度,即通过增加低维数据的特征向量将其转换为高维数据
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
增加数据特征向量需要消耗巨大的计算资源,这里采用核函数。
而这种思路最难的点,是为你自己的模型选择一个合适的核函数。
这里推荐一种自动调参方法GridSearch
将多种核函数(线性、RBF、多项式、sigmoid等)等标号,依次调用,找到一个最合适自己模型的。
定义一个变量params:


调用:
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具
以上详细介绍了SVM背后的数学原理,并提供了一些使用SVM模型时的问题解决办法。
其中,使用代码自动选择核函数的方法来自外国博主Daksh Trehan
如果你对SVM的原理有更深刻的理解,或有其他实用的技巧,请留言分享给大家吧。

参考链接

https://medium.com/@dakshtrehan?source=post_page-----d46e94b23b9d----------------------
本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。


<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><p style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">MIT校长评中美科技竞赛:胜利不是期盼对手的失利</p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">美国官宣117000名 IT 人失业,真是史无前例!</span><br  /></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">数据分析入门常用的23个牛逼Pandas代码</p><section style="margin: 5px 8px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">特朗普拿H1B签证开刀,LeCun吴恩达等实名谴责!<br  /></section></section></section></section></section></section></section></section></section>
SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享