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

对于上图,如果采用感知机,可以找到无数条分界线区分正负类,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. django1.6之创建用户

    如何你运行python manager.py syncdb(数据库同步成功) 则运行一下代码 >>> from django.contrib.auth.models import U ...

  2. easyui 汉化问题

    遇到 easyui  需要汉化的 , 1: 找到 汉化文件 ,文件位于 插件的 locale 文件夹 内 easyui-lang-zh_CN.js 2: 将其 加载 与 easyui 之后 <s ...

  3. NGUI系列教程四(自定义Atlas,Font)

    今天我们来看一下怎么自定义NGUIAtlas,制作属于自己风格的UI.第一部分:自定义 Atlas1 . 首先我们要准备一些图标素材,也就是我们的UI素材,将其导入到unity工程中.2. 全选我们需 ...

  4. 批量将MP4 转换为 MP3

    0 需要先下载VLC 软件 1 win+R 运行 "CMD" 2 CD mp4目录 3 复制 并运行下面代码 for %%a in (*.mp4) do "C:\Prog ...

  5. DB天气app冲刺第五天

    今天上了软工的一节课,感觉自己前几天的方向错了,而且基本是在耗时间,因为虽然一直在努力的看书 编代码,但效果不明显.所以今天要好好想一个新的方向重新来过. 明天送上计划.

  6. linux 和 ecos 内核线程创建/信号量/event等对比

    ecos: int gx_thread_create (const char *thread_name, gx_thread_id *thread_id, void(*entry_func)(void ...

  7. ANDROID_MARS学习笔记_S01原始版_005_ProgressBar

    一.代码 1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  8. 坚果云创业团队访谈:我们 DIY 云存储(不要过度关注竞争对手,尤其当我们还是小公司的时候)

    坚果云(http://jianguoyun.com/)是一款用于多平台文件同步.备份和交换的云存储工具,立志于提供“便捷,安全”的服务.坚果云自去年年初启动内测,至今年三月初刚刚正式发布.近日我们拜访 ...

  9. 奇怪的JS

    有的时候发现JS是一门很高深的语言,不是我等俗人可以学会,没有private,没有public不说,居然连Class都没有,这个世界就是这样,有的东西你不一定非要想通,也不一定非要剖根问底,有的时候你 ...

  10. leetcode面试准备: Word Pattern

    leetcode面试准备: Word Pattern 1 题目 Given a pattern and a string str, find if str follows the same patte ...