SVM(Support Vector Machine)。中文名为 支持向量机。就像自己主动机一样。听起来异常神气。最初总是纠结于不是机器怎么能叫“机”,后来才知道事实上此处的“机”实际上是算法的意思。

支持向量机一般用于分类,基本上,在我的理解范围内。全部的机器学习问题都是分类问题。而据说,SVM是效果最好而成本最低的分类算法。

SVM是从线性可分的情况下最优分类面发展而来的,其基本思想能够用下图表示:

(最优分类面示意图)

图中空心点和实心点代表两类数据样本,H为分类线,H1、H2分别为过各类中离分类线近期的数据样本且平行与分类线的直线。他们之间的距离叫做分类间隔(margin)。

最优分类线,就是要求分类线不但能将两类正确的分开,使训练错误率为0。并且还要使分类间隔最大。

推广到高维空间,最优分类线就叫做最优分类面了。

为两类线性可分的样本集合。

相应的线性判别函数的一般形式为,相应的分类方程为

%5Comega%20%5Ccdot%20x+b%3D0" alt="" style="font-size:18px; margin:10px; text-align:center">。将判别函数进行归一化。使全部样本都满足,此时离分类面近期的样本

f%28x%29%3D%201" alt="" style="margin:10px; text-align:center">,要求分类面对全部样本都能正确分类,即满足 (记为A),

此时分类间隔等于。间隔最大等价于最小。

最优分类线H就是满足式A且使

%5Cfrac%7B1%7D%7B2%7D%5Cleft%20%7C%20%5Cleft%20%7C%20%5Comega%20%5Cright%20%7C%20%5Cright%20%7C%5E%7B2%7D" alt="" style="margin:10px; text-align:center">最小的分类面。

两类数据样本中立分类面近期的样本,且平行于分类面H的超平面上的数据就是式A中使等号成立的那些数据样本。这些数据样本叫做支持向量(support
vector,SV)。

由上可知,最优分类面问题能够表示为约束优化问题。在式A的约束下,求例如以下函数的最小值

%5Cvarphi%20%28%5Comega%20%29%3D%5Cfrac%7B1%7D%7B2%7D%5Cleft%20%5C%7C%20%5Comega%20%5Cright%20%5C%7C%20%5E%7B2%7D" alt="" style="margin:10px; text-align:center">

为此。定义例如以下Lagrange函数

(记为式B)

式中,为拉格朗日函数的乘子(Lagrange
Multiplier) 。

%5Calpha_%7Bi%5Cgeqslant%20%7D0" alt="" style="margin:10px; text-align:center">。要求式B的最小值,对各个參数求偏导数。且偏导数为0。结果例如以下

依据A式和B式的约束条件,能够将上述分类面的求解问题问题转化为例如以下凸优化的问题

式中,

%5Calpha_i" alt="" style="margin:10px; text-align:center">相应的为拉格朗日乘子 ,这是一个二次寻优问题。存在唯一解。若为最优解,则有

式中。为不为0的样本。即为支持向量。

因此。最优分类面的权系数向量是支持向量的线性组合。

为分类阀值,可由约束条件

%5Calpha_i%5By_i%28%5Comega%5Ccdotx+b%29-1%5D%3D0" alt="" style="margin:10px; text-align:center">求解。解上述问题后得到的最优分类面函数为

,x就属于该类,否则不属于。

概括地说,SVM就是首先通过用内积函数定义的非线性变换将输入控件变换到一个高维空间。然后在这个空间中求广义的最优分类面。

机器学习笔记——SVM的更多相关文章

  1. 机器学习笔记—svm算法(上)

    本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的 ...

  2. 吴恩达机器学习笔记(六) —— 支持向量机SVM

    主要内容: 一.损失函数 二.决策边界 三.Kernel 四.使用SVM (有关SVM数学解释:机器学习笔记(八)震惊!支持向量机(SVM)居然是这种机) 一.损失函数 二.决策边界 对于: 当C非常 ...

  3. Python机器学习笔记:SVM(1)——SVM概述

    前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...

  4. Andrew Ng机器学习笔记+Weka相关算法实现(五)SVM最优间隔和核方法

    这一章主要解说Ng的机器学习中SVM的兴许内容.主要包括最优间隔分类器求解.核方法. 最优间隔分类器的求解 利用以一篇讲过的的原始对偶问题求解的思路,我们能够将相似思路运用到SVM的求解上来. 详细的 ...

  5. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  6. Python机器学习笔记:sklearn库的学习

    网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...

  7. Python机器学习笔记:不得不了解的机器学习面试知识点(1)

    机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...

  8. cs229 斯坦福机器学习笔记(一)-- 入门与LR模型

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Dinosoft/article/details/34960693 前言 说到机器学习,非常多人推荐的学习资 ...

  9. Python机器学习笔记 集成学习总结

    集成学习(Ensemble  learning)是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合,从而获得比单个学习器显著优越的泛化性能.它不是一种单独的机器学习算法啊,而更像是一种优 ...

随机推荐

  1. day22-类的封装、property特性以及绑定方法与非绑定方法

    目录 类的封装 两个层面的封装 第一个层面 第二个层面 封装的好处 私有模块 类的propertry特性 setter 和 deleter 类与对象的绑定方法与非绑定方法 类的封装 将类的属性或方法隐 ...

  2. cf536c——思路题

    题目 题目:Lunar New Year and Number Division 题目大意:给定一个数字序列,可以任意分组(可调整顺序),但每组至少两个,求每组内数字和的平方的最小值 思路 首先,易证 ...

  3. Linux内核中TCP SACK机制远程DoS预警通告

    漏洞描述 2019年6月18日,RedHat官网发布报告:安全研究人员在Linux内核处理TCP SACK数据包模块中发现了三个漏洞,CVE编号为CVE-2019-11477.CVE-2019-114 ...

  4. MFC中调用Windows API函数的方式

    windows aoi 函数的调用前面加::

  5. pytorch之Tensor与Variable的区别

    首先在变量的操作上:Tensor对象支持在原对象内存区域上修改数据,通过“+=”或者torch.add()方法而Variable不支持在原对象内存区域上修改数据Variable对象可求梯度,并且对Va ...

  6. MRC转ARC(2)

    春节前抽空花了一天的时间将手头的工程从MRC转成了ARC,然后陆陆续续地修复一部分因为转ARC引起的内存泄漏和崩溃,到目前为止工程也算是比较稳定了,抽空记上一笔.(虽说这种事情这辈子估计都只会做这么一 ...

  7. 06网络通信udp-tcp、正则

    一. udp网络程序 1.    udp网络程序-发送数据 1)创建客户端套接字 2)发送/接收数据 3)关闭套接字 from socket import * # 1. 创建udp套接字 udp_so ...

  8. 字符与数字的转换:sprintf和sscanf

    目录 字符与数字的转换:sprintf和sscanf 简单介绍 实例 运行结果 字符与数字的转换:sprintf和sscanf 简单介绍 sprintf和sscanf都是stdio.h头文件中的函数, ...

  9. Python面试快问快答,理论要的就是速度与精准,Python面试题No2

    今天的面试题 第1题:python2和python3的range(100)的区别 range()函数的含义 range函数是一个用来创建算数级数序列的通用函数,返回一个[start, start + ...

  10. SSM java.lang.NullPointerException

    如上图所示的异常 原来是少了这个东西,加上就好了