【Video Tracking & Detection】系列二之Algorithm SVM

算法:

一:Random Forest

二:SVM

三:Adaboost

 

第一层面. 会用,input, output

第二层面. 基本原理

第三层面. 优缺点,与其它算法比较

第四层面. 为什么能够work

第五层面. 创造一个类似的算法

 

Next:

算法框架

 

SVM - Support Vector Machine - 支持向量机

From Wikipedia: In Machine Learning, support vector machine (SVM) are supervised learning models with associated learning algorithms that analyze data and recognize patterns, used for classification and regression analysis.

来自Wiki上的定义,SVM是Support Vector  Machine的缩写,在机器学习中,SVM和相关的学习算法构成了监督学习(supervised learning)模块,学习算法用于分析数据和辨别图案,以及分类和回归分析。这里的supervised learning,wiki上的定义是:

Supevised learning is the machine learning task of inferring a function from labeled trainning data. The training data consist of a set of training examples. In supervised learning, each example is a pair consisting of an input object (typically a vector) and a desired output value (also called the supervisory signal). A supervised learning algorithm analyzes the training data and produces an inferred function, which is called a classifier (if the output is discrete; see classification) or a regression function (if the output is continuous; see regression) The inferred function should predict the correct output value for any valid input object. This requires the learning algorithm to generalize from the training data to unseen situations in a "reasonalbe" way.

简单来讲的话,supervised learning(监督学习)是一种机器学习的工作,用于从标记的训练集合trainning data中推断函数,trainning data包含了一组训练样本。每个样本就是一对映射:输入物体(一个vector向量)和一个期望中的输出值(也叫做监督信号)。一种监督学习算法用于分析训练集合,产生一个推断函数,如果输出结果是离散的,称之为分类器,如果输出结果是连续的,称之为回归函数。

The basic SVM takes a set of input data and predicts, for each given input, which of two possible calsses forms the output, making it a non-probabilistic binary linear classifier. 

最基本的SVM接受一组输入然后对每个给定的输入预测,每两个可能的类别构成输出,使之成为一个非概率性的二次线性分类器。

 

基本从wiki了解了SVM和supervised learning之后,以下是一些整理:

1. 简介

支持向量机 (Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原则基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别人意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。

机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),我们选择的假设与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。

 

2. 主要思想,两点

(1)SVM是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法,将低维输入空间线性不可分的样本,转化为高维特征空间,使其线性可分,从而使得,对样本的非线性特征进行线性分析成为可能(转化为高维特征空间后采用线性算法)。

举例来说,非常典型!

如上图,将1维的“线性不可分” 上升到2维后就成为线性可分了。

(2)SVM基于结构风险最小化理论之上,在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。(这句话好比天书,以后再慢慢琢磨!)

 

3. 线性分类器

线性分类器(一定意义上,也可以叫做感知机)是最简单也很有效的分类器形式。在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念。

用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示:

C1 和 C2是要区分的两个类别,在二维平面中它们的样本如上图所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。

什么是线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,折衷线性函数还有一个统一的名称——超平面(Hyper Plane)

实际上,一个线性函数是一个实值函数(即函数的值是连续的实数),而我们的分类问题(例如这里的二元分类问题——回答一个样本属于还是不属于一个类别的问题)需要离散的输出值,例如用1表示某个样本属于类别C1,而用0表示不属于(不属于C1也就意味着属于C2),这时候只需要简单的在实值函数的基础上附加一个阀值即可,通过分类函数执行得到的值大于还是小于这个阀值来确定类别归属。例如我们有一个线性函数

g(x) = wx + b

我们可以去阀值为0,这样当有一个样本xi需要判别的时候,我们就看g(xi)的值。若g(xi) > 0,就判别为类别C1,若g(xi) < 0,就判别为类别C2,等于的话就拒绝判断。由于这种判断等价于正负判断,即给函数g(x)附加一个符号函数sgn(),即f(x) = sgn [ g(x) ]是我们真正的判别函数。

关于g(x) = wx + b这个表达式要注意三点:一,式中的x不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8),而不是x = 3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置);二,这个形式并不局限于二维的情况,在n维空间中仍然可以使用这个表达式,只是式中的w成为了n维向量(在二维的这个例子中,w是二维向量,注意这里的w严格的说也应该是转置的形式,为了表示起来方便简介,以下均不区别列向量和它的转置);三,g(x)不是中间那条直线的表达式,中间那条之间的表达式是g(x) = 0,即wx + b = 0,我们也把这个函数叫做分类面。

实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。

========================== 请叫我 分割线 ==========================

 

在学习这种方法时,首先要弄清楚这种方法考虑问题的特点,这就要从线性可分的最简单情况讨论起,在没有弄懂其原理之前,不要急于学习线性不可分等较复杂的情况,支持向量机在设计时,需要用到条件极值问题的求解,因此需要用到拉格朗日乘子理论,接下来继续了解~!

 

 

 

posted @ 2012-12-11 15:22  Harrison_  阅读(847)  评论(0编辑  收藏  举报