学习策略:间隔最大化(解凸二次规划的问题)

对于上图,如果采用感知机,可以找到无数条分界线区分正负类,SVM目的就是找到一个margin 最大的 classifier,因此这个分界线(超平面)一定是固定。

假设a是正类,b是负类,那么a和b直接的距离就是ob-oa在直线l上的映射。

我们假设a,b所在的那条直线的方程为:

     a:   WTX+b=1      b:   WTX+b=1

       那么根据两条平行线之间的距离公式,我们可以算出,平行线之间的间隔为:2/||w||。那么SVM便可以变为求解约束的最优化问题,如下:

       对于这种约束问题,作为一个凸优化问题(二次优化问题,目标函数时二次的,约束条件是线性的),我们可以使用现成的QP优化包进行求解。但是呢,由于这个优化问题的特殊结构,我们可以通过

Lagrange Duality 变换到对偶变量 (dual variable) 的优化问题,这样就可以更加方便进行求解了。

   原始问题为求解如下的优化问题:

假设y(wx+b)-1!=0,那么我们可以通过调节相应的a使得L趋于负无穷。显然这不是我们要的情况,因此我们定义如下一个函数:

我们可以观察到当a>=0时,该函数等于L。因此求解问题可以写成如下形式:

一般来说:

但是假设满足传说中的KTT条件,那么:

正好,我们的问题符合这个条件(这边不做说明)。这时候我们就可以固定ª,ß对w,b进行求偏导(注意原始形式是不可以这么直接求偏倒的,但是通过这么转换便可以了)

将求出的代入到L函数,

最后我们的原始问题变转化成求解如下问题:

这时候通过求解这些a就可以了,可以使用SMO算法。

SMO:是SVM的一个实现方法,用到坐标递增法,就是固定两个参数。就是不断地将原二次规划问题分解为只有两个变量的二次规划子问题。

线性分类器也叫感知机,就是在N维的数据空间找到一个分类超平面。然后svm其实就是寻找间隔最大化的线性分类器。

首先说他在线性可分的数据集上的:

超平面就是在n维空间上可以将数据线性分类的平面。

超平面: WTX+b=0  W为向量,b是截距 ,这样就通过寻找最大间隔,确定W和b。把求f(x)=WTX+b转化为求w与b的最优化问题。

函数间隔:人为定义的,就是yf(x)

几何间隔:点到超平面的距离,f(x)/||w||

由于我们可以通过缩放w的倍数,设置函数间隔为1,这样就变成求max 1/||w||,也就是求min 1/2w2问题当然还有约束条件st。变成就凸二元问题。

还有可以通过对偶方法求解。

但是由于数据有时候不能够线性可分,但是通过将他们映射到高维空间,就可以线性可分。所以这样svm就可以处理线性不可分的问题。但是由于维数的增加,这样会导致“维数灾难”,

导致计算复杂,这时候就可以使用核函数,核函数就我目前理解就是通过使用它可以在数据原来的维度上计算内积,之后在分类,而不用计算高维。具体原理,看不懂。

核函数有好几个以及对应的参数,这个上网查吧。

最近又琢磨了一下:

核函数:就是当我们数据是线性可分的时候,求出来的决策函数是一个关于实例之间的内积<X1,X2>,那么当我们数据不可分的时候,就想把X映射到高维去f(x),这样可能就可以

线性可分了,然后决策函数就是<f(x1),f(x2)>,按道理我们是应该把点映射到高维之后,再去求内积,但是有时候映射的维数很大,很多情况下还是无限维的,所以计算量太大。

这时候我们就应该采用核函数。我们不用显示的去构造说明原来的点如何映射到高维的函数,就是不用去定义f(x),反正就是不用去想着把点如何去映射到高维。只要找到一个核函数

就可以,让核函数自己去映射,我们只要计算核函数就ok了。

常用核函数:

1)多项式核函数K(x,z)=(x*z+1)p,对应的支持向量机是一个p多项式分类器。

2)高斯核函数(有参数)

3)字符串核函数

对于参数的选择,一般都是拿出1/3用来选择最优参数。就有点自动参数优化的样子,比如像weka里的cvparamter一样。

还有就是当有时候数据是近线性可分的时候,有一些点可能会在不对劲的地方,就是没在他应该在的地方,这时候我们引入松弛变量和惩罚因子。

smo:是svm的一个实现方法,用到坐标递增法,就是固定两个参数。就是不断地将原二次规划问题分解为只有两个变量的二次规划子问题。

SVM 支持向量机的更多相关文章

  1. 机器学习实战 - 读书笔记(06) – SVM支持向量机

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...

  2. Python实现SVM(支持向量机)

    Python实现SVM(支持向量机) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end ...

  3. SVM支持向量机的基本原理

    SVM支持向量机的基本原理 对于很多分类问题,例如最简单的,一个平面上的两类不同的点,如何将它用一条直线分开?在平面上我们可能无法实现,但是如果通过某种映射,将这些点映射到其它空间(比如说球面上等), ...

  4. 6-11 SVM支持向量机2

    SVM支持向量机的核:线性核.进行预测的时候我们需要把正负样本的数据装载在一起,同时我们label标签也要把正负样本的数据全部打上一个label. 第四步,开始训练和预测.ml(machine lea ...

  5. 6-10 SVM支持向量机1

    都是特征加上分类器.还将为大家介绍如何对这个数据进行训练.如何训练得到这样一组数据. 其实SVM支持向量机,它的本质仍然是一个分类器.既然是一个分类器,它就具有分类的功能.我们可以使用一条直线来完成分 ...

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

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

  7. [分类算法] :SVM支持向量机

    Support vector machines 支持向量机,简称SVM 分类算法的目的是学会一个分类函数或者分类模型(分类器),能够把数据库中的数据项映射给定类别中的某一个,从而可以预测未知类别. S ...

  8. paper 25 :SVM支持向量机是什么意思?

    转载来源:https://www.zhihu.com/question/21094489 作者:余洋链接:https://www.zhihu.com/question/21094489/answer/ ...

  9. 【机器学习算法-python实现】svm支持向量机(1)—理论知识介绍

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      强烈推荐阅读(http://www.cnblogs.com/jerrylead/archiv ...

随机推荐

  1. poj 3013 Big Christmas Tree Djistra

    Big Christmas Tree 题意:图中每个节点和边都有权值,图中找出一颗树,树根为1使得 Σ(树中的节点到树根的距离)*(以该节点为子树的所有节点的权值之和) 结果最小: 分析:直接求出每个 ...

  2. 2014年度辛星css教程夏季版第六节

    这一节我们就要讲到布局了,其实布局本身特别简单,但是要合理的布好局就不那么简单了,就像我们写文章一样,写一篇文章非常简单,但是要写一篇名著就很难了,这需要我们扎实的功底和对文学的理解,但是,千里之行, ...

  3. bootstrap form

    http://getbootstrap.com/examples/starter-template/ <form class="form-horizontal" role=& ...

  4. Catch Application Exceptions in a Windows Forms Application

    You need to handle the System.Windows.Forms.Application.ThreadException event for Windows Forms. Thi ...

  5. 搭建 Win CE6.0 设备开发环境

    1.操作系统最好基于Windows XP.Vista.Win7 或以上的版本对ActiveSync软件不支持  2.安装VS2008,以及SP1 (一定要装SP1) 3.安装ActiveSync 4. ...

  6. CSS3制作下拉菜单

    导航菜单其实是没有什么可说的,制作方法到处可见,今天这个案例本来不只是一个导 航,还有一个搜索表单的,可是为了偷懒,把搜索表单部分去掉了,就变成了一个CSS3 制作的下拉菜单.在这个导航中主要两点,一 ...

  7. w3c subscribe

    http://www.w3.org/html/ig/zh/ http://blog.csdn.net/spring21st/article/details/6126537 http://www.w3c ...

  8. PYTHON多进程编码结束之进程池POOL

    结束昨晚开始的测试. 最后一个POOL. A,使用POOL的返回结果 #coding: utf-8 import multiprocessing import time def func(msg): ...

  9. CF192div2-C - Purification

    题意: 从给定的图中找出某些点,这些点能够消除同一行和同一列的“怪物”.求使得最少的点的位置. 关键:要想消除整张的图的妖怪,必须选中n个点(对于n行n列来说)!!!!!!!!!!! 做法:对于每一行 ...

  10. UVA 10801 Lift Hopping

    算是一道需要动脑筋的最短路问题了,关键在于建图部分,对于n个电梯中每一个都要经过cnt个楼层,a[0],a[1],a[2],a[3],a[4],......a[cnt-1],那么对于任意两个楼层a[j ...