首页 > 代码库 > SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
因为SVM和统计机器学习内容很多,所以从 http://www.cnblogs.com/charlesblc/p/6188562.html 这篇文章里面分出来,单独写。
为什么说SVM和统计学关系很大。
看统计学的定义:统计学是通过搜索、整理、分析、描述数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学。
通过有限的样本,来预测更多的泛化空间的效果,本身就是机器学习的奋斗目标。
而SVM又是基于统计学理论的基础:
基于数据的机器学习是现代智能技术中的重要方面, 研究从观测数据(样本) 出发寻找规律, 利用这些规律对未来数据或无法观测的数据进行预测.
包括模式识别、神经网络等在内, 现有机器学习方法共同的重要理论基础之一是统计学.
传统统计学研究的是样本数目趋于无穷大时的渐近理论, 现有学习方法也多是基于此假设.
但在实际问题中, 样本数往往是有限的, 因此一些理论上很优秀的学习方法实际中表现却可能不尽人意.
与传统统计学相比, 统计学习理论(Statistical Learning Theory,SLT) 是一种专门研究小样本情况下机器学习规律的理论.
Vapnik 等人从六、七十年代开始致力于此方面研究, 到九十年代中期, 随着其理论的不断发展和成熟,
也由于神经网络等学习方法在理论上缺乏实质性进展, 统计学习理论开始受到越来越广泛的重视.
统计学习理论是建立在一套较坚实的理论基础之上的, 为解决有限样本学习问题提供了一个统一的框架.
它能将很多现有方法纳入其中, 有望帮助解决许多原来难以解决的问题(比如神经网络结构选择问题、局部极小点问题等) ;
同时, 在这一理论基础上发展了一种新的通用学习方法——支持向量机(Support Vector Machine,SVM ) ,
它已初步表现出很多优于已有方法的性能.
V. Vapnik提出的支持向量机理论因其坚实的理论基础和诸多良好特性在近年获得了广泛的关注。已经有许多事实证明,作为支持向量机最基本思想之一的结构化风险最小化原则(Structural Risk Minimization, SRM )要优于传统的经验风险最小化原则(Empirical Risk Minimization, ERM)。不同于ERM试图最小化训练集上的误差的做法,SRM试图最小化VC维的上界,从而使其学习机获得了更好的推广性能,这恰恰是统计学习理论最重要的目标之一。(解决机器学习中的过拟合问题:over-fitting)。支持向量机的主要应用领域有模式识别、函数逼近和概率密度估计等等,本文的讨论重点是使用支持向量机进行多分类的问题。
VC维是Vapnik和Chervonenkis定义的,
看下面的介绍:
(1)SVM的优势:
由于支持向量机方法是建立在统计学习理论的VC维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(Generalizatin Ability)。支持向量机方法的几个主要优点是
可以解决小样本情况下的机器学习问题
可以提高泛化性能
可以解决高维问题
可以解决非线性问题
可以避免神经网络结构选择和局部极小点问题
(2)SVM的研究热点
目前,SVM算法在很多领域都有应用。例如,在模式识别方面,对于手写数字识别、语音识别、人脸图像识别、文章分类等问题,SVM算法在精度上已经超过传统的学习算法或与之不相上下。SVM主要有如下几个研究热点:
模式识别
回归估计
概率密度估计
(3)SVM的主要核函数
多项式核: (gamma*u’*v + coef0)^degree
径向基核(RBF): exp(-gamma*|u-v|^2)
Sigmoid 核: tanh(gamma*u’*v + coef0)
(4)SVM的应用
文本分类,人脸识别
三维物体识别,遥感图像分析
函数逼近,时间序列预测
数据压缩,优化SVM算法
SVM改进方法(多分类扩展,用于多现实中的多分类问题)
SVM硬件实现
(5)SVM的难点
如何在非监督模式识别问题中应用统计学习理论(SLT)
如何用理论或实验的方法计算VC维
经验风险和实际风险之间的关系称之为推广性的界,但是当(h/n)>0.37时(h—VC维,n—样本数),推广性的界是松弛的,如何寻找一个更好地反映学习机器能力的参数和得到更紧的界
实现结构风险最小化(SRM)时,如何选择函数子集结构
(6)应用中的问题
用支持向量机进行数据挖掘,除了上面讨论的一些关键点之外,主要需要解决下面的一些问题:
(1)传统支持向量机是做二元分类的,如何扩展为多类分类,比如预测金融风险,如果风险级别为高和低两类,用传统SVM可以很好地解决,但如果加一个或者几个风险级别,那么就需要扩展成多分类支持向量机,这方面的研究做了很多,应用还很少
(2)海量数据的计算性能问题,这是很多数据挖掘算法都会面临的问题,SVM目前在这方面要做的研究还很多。
支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。
Vapnik是统计机器学习的大牛,这想必都不用说,他出版的《Statistical Learning Theory》是一本完整阐述统计机器学习思想的名著。在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统完全成了一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。
所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。
结构风险最小听上去文绉绉,其实说的也无非是下面这回事。
机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。
这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。
以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险最小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。
统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。
置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大。(注:统计学习就是要降低VC维)
泛化误差界的公式为:
R(w)≤Remp(w)+Ф(n/h)
公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。
SVM正是这样一种努力最小化结构风险的算法。
SVM其他的特点就比较容易理解了。
(下文内容要看一遍,需要记录补充。)
以上文章参考:http://blog.csdn.net/u010140338/article/details/13509897
其实里面写的最好的文章来自:http://www.blogjava.net/zhenandaci/category/31868.html
这里面貌似也有一些机器学习文章:http://leftnoteasy.cnblogs.com/
其中提到了KNN分类算法,参考我的这篇文章:http://www.cnblogs.com/charlesblc/p/6193979.html
SVM(支持向量机)与统计机器学习 & 也说一下KNN算法