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

对于上图,如果采用感知机,可以找到无数条分界线区分正负类,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. 【Ubuntu12.04】安装搜狗输入法

    我的系统版本是Ubuntu12.04 32位 卸载Ibus输入法 sudo apt-get remove ibus 注意: 安装ibus的命令是  sudo apt-get install fcitx ...

  2. makefile的简单写法

    makefile 使用方法: vi 一个Makefile文件 CC = g++   // 指的是用什么编译器RM = rm -rf   // 定义一个删除的指令(变量)CFLAGS = -c -Wal ...

  3. windows下常用快捷键

    windows下常用快捷键: 显示桌面: win徽标+D 打开资源管理器: win徽标+E 打开任务管理器: Ctrl+Alt+delete 任务切换: Alt+Tab 应用程序中窗口之间的切换: C ...

  4. ASP.NET MVC 3 Razor Views in SharePoint

    http://tqcblog.com/2011/01/22/asp-net-mvc-3-razor-views-in-sharepoint/ ASP.NET MVC 3 has just been r ...

  5. 安装ubuntu12.04LTS卡住以及花屏问题

    昨天在XP下用grub4dos安装了ubuntu12.04LTS,总体上还算比较顺利,中途有碰到两个异常问题,解决了记录一下. 问题一:安装过程中读取ISO镜像文件时,卡在"checking ...

  6. C++ 数据类型及相关问题 及输出精度控制

    1.有哪些数据类型? 2.数据类型在不同的编译器会有不同的位宽,如何得知? 使用如下命令: cout<<sizeof(int)<<endl; cout<<sizeo ...

  7. Oracle数据库的下载和安装

    那天分享一下Oracle的下载和安装的过程,有需要的朋友可以借鉴参考一下.如有雷同不胜感激! 首先可以到Oracle的官网下载Oracle的最次年版本的Oracle数据库.一下是个人下载的数据库版本百 ...

  8. jQuery中的一些正则匹配表达式

    jQuery常用正则匹配表达式 落雨 //整数 "^-?[1-9]\\d*$", //正整数 "^[1-9]\\d*$", //负整数 intege2: &qu ...

  9. How to steal any developer's local database

    原文链接: http://bouk.co/blog/hacking-developers/ If you’re reading this and you’re a software developer ...

  10. hdu 4800 Josephina and RPG

    简单dp #include<cstdio> #define maxn 10005 #include<cstring> #include<algorithm> usi ...