支持向量机原理推导(一)

简介:

用python进行数据挖掘和机器学习一直很火,所以近段时间就在自学《机器学习实战》这本书,发现里面讲支持向量机时对原理公式的推导讲得并不详细,上网查资料发现讲得并不很系统,有点零碎的感觉,导致对于我这种小白的童鞋来说颇为艰难,因此经过长时间的资料查询后准备综合各路大神的思路和我自己的理解来写一波关于公式原理推导的文章。文章以《机器学习实战书》为进度进行步步拆解(大神可以略过啦~正在奋斗的小白也可以私下交流共同学习)。
SVM指的是支持向量机(外文名Support Vector Machine),在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。
我们这里以二维图线性分类为例进行讲解,在对如下图A进行分类时,可得到很多个分割超平面,然而我们要从中选择最优的分割超平面,这便是SVM的要做的,选出最优的分割超平面。

6c1f231f442a86b40dc847531cdf138a2d6c17e0

那么什么样的平面为最优的分割超平面呢?就像上图D一样,使距离分割超平面最近的点与超平面的间隔最大便是我们要寻找的,这里距离分割线最近的点就叫做支持向量,分割线就叫做分割超平面,支持向量与分割超平面就叫做”间隔”。我们所要做的就是最大化这个间隔。

0cdb49682f564e2602ac248143330f5a609e8921

书上给出坐标点A与分割超平面W^tX+b=0间隔的公式为:m=|W^t A+b|/||W|| 
其中W为分割线的系数向量,X为参数向量(此处代表x1,x2),A为A点的坐标向量。 
那么我们现在就推导一下这个公式。

一、首先我们得简单推导一下坐标点A到过原点直线L的距离。我们有过原点的直线L:W^tX=0(它的法向量为W),坐标向量A,求A向量在W向量上投影P向量的模长(即A点到直线L的距离)

7169ddce3fb299a851adfb79fc5b5ca83d3f042d

W的方向向量u为u=W/(||W||),其中||W||代表W向量的模长,||u||=1。 
P的模长|(|P| )|=|(|A| )| cosθ(1) 
又因为u•A=||u||||A||*cosθ=|(|A| )|*cosθ(2) 
由(1),(2)可得||P||=u•A=(W•A)/(||W||)

二、下面我们推导一下A点到不过原点的直线L的距离:我们有直线L:W^tX+b=0,坐标向量A。

23800018a6ab98ee9ce6c5ec81044403daf5aa69

设W(m,n),X(x1,x2),直线L为m*x1+n*x2+b=0,截距-b/n,K向量为(0, - b/n) 
所以根据上一条结论可得 
||P2||=(W•K)/(||W||)=((0,(-b)⁄n)•(m,n))/(||W||)=(-b)/(||W||) 
||P2||=(W•A)/(||W||) 
||P||=||P2||-||P2||=(W•A)/(||W||)-(-b)/|(|W| )| =(W•A+b)/(||W||) 
所以间隔 m=|W^t A+b|/||W||

原文发布时间为:2017-08-14
本文作者:exploit
本文来自云栖社区合作伙伴“ Python中文社区”,了解相关信息可以关注“ Python中文社区”微信公众号
相关文章
|
语音技术 Android开发 开发工具
讯飞离线语音合成(离线资源包)
讯飞离线语音合成(离线资源包) 讯飞的语音合成有三种方式 在线语音合成(免费) 离线使用语记语音合成(免费,需要本地装一个语记App并且下载离线资源) 使用讯飞离线语音包(付费) 这里使用离线资源包实现离线语音合成,因为正式版是要付费的,所以这里使用试用的离线包(35天试用期、3个装机量)。
4213 0
|
小程序 开发者 安全
福利!支付宝小程序开发必备的7款开源DEMO
相比于APP,小程序已经大大降低了开发者们的学习和开发的门槛。而如何进一步提高小程序开发者的学习和开发效率,一直是支付宝小程序团队非常重视的课题。对于开发者而言, 文档可以提供基础的引导,而针对性的、基于常见场景的DEMO则更为直观清晰易懂,可以大大节约上手的成本。
7908 0
福利!支付宝小程序开发必备的7款开源DEMO
|
10月前
|
监控 算法 Java
JVM—垃圾收集算法和HotSpot算法实现细节
JVM的垃圾收集算法和HotSpot的实现细节复杂但至关重要,通过理解和掌握这些算法,可以为Java应用程序选择合适的垃圾收集器,并进行有效的性能调优。选择适当的垃圾收集策略,结合合理的内存配置和日志分析,能够显著提升应用的运行效率和稳定性。
242 15
|
机器学习/深度学习 算法 数据挖掘
【机器学习算法】5、支持向量机算法(一)
【机器学习算法】5、支持向量机算法(一)
1156 104
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的口腔牙科预约管理系统
基于Python+Vue开发的口腔牙科预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的口腔牙科诊所预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
1595 4
|
缓存 负载均衡 网络协议
CDN负载均衡技术
【10月更文挑战第26天】内容分发网络(CDN)是一种通过将数据缓存至全球各地的节点,以提高用户访问速度和数据传输稳定性的技术。CDN负载均衡技术是其核心,通过智能分配用户请求至最近最稳定的节点,确保高效稳定的网络体验。该技术分为全局负载均衡和本地负载均衡,前者实现用户请求的初步定向,后者则根据节点状态进行精细化管理。
471 2
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
Qt下载(使用国内镜像)
Qt下载(使用国内镜像)
7890 2
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版操作报错合集之在尝试触发checkpoint时遇到了报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
225 0