人工智能课程项目报告姓名:******班级:**************目录一、实验背景...................................................................................................................................1二、实验目的...................................................................................................................................1三、实验原理...................................................................................................................................13.1线性可分:.........................................................................................................................13.2线性不可分:.....................................................................................................................43.3坐标上升法:.....................................................................................................................73.4SMO算法:.......................................................................................................................8四、实验内容.................................................................................................................................10五、实验结果与分析.....................................................................................................................125.1实验环境与工具..............................................................................................................125.2实验数据集与参数设置..................................................................................................125.3评估标准..........................................................................................................................135.4实验结果与分析..............................................................................................................131一、实验背景本学期学习了高级人工智能课程,对人工智能的各方面知识有了新的认识和了解。为了更好的深入学习人工智能的相关知识,决定以数据挖掘与机器学习的基础算法为研究对象,进行算法的研究与实现。在数据挖掘的各种算法中,有一种分类算法的分类效果,在大多数情况下都非常的好,它就是支持向量机(SVM)算法。这种算法的理论基础强,有着严格的推导论证,是研究和学习数据挖掘算法的很好的切入点。二、实验目的对SVM算法进行研究与实现,掌握理论推导过程,培养严谨治学的科研态度。三、实验原理支持向量机基本上是最好的有监督学习算法。SVM由Vapnik首先提出(Boser,GuyonandVapnik,1992;CortesandVapnik,1995;Vapnik,1995,1998)。它的主要思想是建立一个超平面作为决策曲面,使得正例和反例之间的隔离边缘被最大化。SVM的优点:1.通用性(能够在各种函数集中构造函数)2.鲁棒性(不需要微调)3.有效性(在解决实际问题中属于最好的方法之一)4.计算简单(方法的实现只需要利用简单的优化技术)5.理论上完善(基于VC推广理论的框架)3.1线性可分:首先讨论线性可分的情况,线性不可分可以通过数学的手段变成近似线性可分。基本模型:2这里的裕量是几何间隔。我们的目标是最大化几何间隔,但是看过一些关于SVM的论文的人一定记得什么优化的目标是要最小化||w||这样的说法,这是怎么回事呢?原因来自于对间隔和几何间隔的定义(数学基础):间隔:δ=y(wx+b)=|g(x)|几何间隔:||w||叫做向量w的范数,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的2-范数,范数最一般的表示形式为p-范数,可以写成3如下表达式:另外,注意我们的目标:最大化几何间隔,而不是求出这个间隔。即,在什么情况下间隔最大,我们要得到的是这个“情况”(w和b取什么值,因为所有x和y是已知的)所以,我们可以把目标转换:==》==》在这个问题中,自变量就是w,而目标函数是w的二次函数,所有的约束条件都是w的线性函数(不要把xi当成变量,它代表样本,是已知的)这种规划问题有个很有名气的称呼——二次规划(QuadraticProgramming,QP),而且可以更进一步的说,由于它的可行域是一个凸集,因此它是一个凸二次规划。拉格朗日乘子法可以求解这个问题。问题1:实际上就是目标函数减去,ai乘上约束条件的累加和。将问题转化为拉格朗日乘子待定问题。经过数学计算(求导),可以发现:样本确定了w,用数学的语言描述,就是w可以表示为样本的某种组合:w=α1y1x1+α2y2x2+…+αnynxn式子中的αi是一个一个的数,而xi是样本点,因而是向量,n就是总样本点的个数。w的表达式可以简写如下:4另外可以得到约束条件:把问题1写成其对偶形式,可转化成问题2:这样就可以解了,而且方法很多,如SMO。解出来得到的是a,然后可以得到w和b,进而得到分类超平面。(事实上,不需要求出w,非线性下求出w也无意义)3.2线性不可分:在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。那是否意味着,每当我们解决一个问题,都需要找一个函数,从低维映射到高维?这个函数是什么样子的呢?首先观察一下线性下的目标函数(转化后的)。(注:之所以观察这个公式,是因为转化到高维后,就线性可分了,最后推导得到的还是这个式子)5我们发现它关注的不是函数本身,而是函数结果的内积。即,我不在乎你把x(二维),转化为了x几维,也不在乎转化后的值是多少,我在乎的是转化之后,两个x再求内积(一个数)是多少。幸运的是,数学中有这样一些函数,他们叫核函数,计算效果相当于转化到高维后的内积。百度百科的解释:核函数将m维高维空间的内积运算转化为n维低维输入空间的核函数计算,从而巧妙地解决了在高维特征空间中计算的“维数灾难”等问题,从而为在高维特征空间解决复杂的分类或回归问题奠定了理论基础。几个核函数:多项式核:高斯核:它能将原始空间映射为无穷维空间。不过,如果sita选得很大的话,就相当于一个低维的子空间;反过来,如果选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。同样,经过数学推导,非线性SVM的目标函数为:同样,可以用SMO求解。6如上图:如果转化到高维还是不可分呢?或者转的维数不够,或者存在噪声点?这个时候怎么办?引入松弛变量:其中称为松弛变量,C是一个参数。同样,经过转化:此时,我们发现没有了参数,与之前模型唯一不同在于C的限制条件。为了不失一般性,我们使用引入松弛变量的模型。也就是需要求解的目标问题。7根据KKT条件可以得出目标函数中取值的意义:这里的还是拉格朗日乘子:对第1种情况,表明是正常分类,在边界内部(我们知道正确分类的点);对第2种情况,表明了是支持向量,在边界上;对第3种情况,表明了是在两条边界之间;3.3坐标上升法:在最后讨论W(α)的求解之前,我们先看看坐标上升法的基本原理。假设要求解下面的优化问题:这里W是α向量的函数(也就是前面转化后的目标函数)。求最优解的方法有多种:一种是梯度下降法,一种是牛顿法,还有一种是坐标上升法。方法过程:坐标上升法可以用一张图来表示:83.4SMO算法:SMO算法由MicrosoftResearch的JohnC.Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的论文《SequentialMinimalOptimizationAFastAlgorithmforTrainingSupportVectorMachines》。算法框架:fori=1:itera.根据预先设定的规则,从所有样本中选出两个b.保持其他拉格朗日乘子不变,更新所选样本对应的拉格朗日乘子end样本选取规则:第一个参数是违反kkt条件的。第二个参数:选择使得(实际输出和期望输出的误差)最大的参数。情况比较复杂,原算法分了很多情况。当所有变量都满足kkt条件时,算法结束,求得a。选出了参数就要进行计算。其中一个参数是可以求导等于0然后解出来(不失一般性,记为a2)。另一个参数随之发生变化(记为a1)。解之前要先确定取值范围:根据y1和y2异号或同号,可得出a2的上下界分别为:9如果是极值点,二阶导应该大于0,关于a2的二阶导为:经过数学计算,在二阶导大于0的情况下,结合取值范围:然后得到a1:在一些情况下,二阶导不是正数,这时候需要用到目标函数在取最小值和最大值时候的值:计算出a1和a2后,相应的更新b。更新完a和b,一个周期结束,进入下一次循环。当所有的参数符合kkt条件,循环结束。10四、实验内容SVM算法步骤:1,读入训练数据。2,用SMO算法求解,得到分类预测模型。3,根据预测模型进行预测。我们发现SVM算法的难点和重点是SMO算法。算法流程图:SMO主循环部分:11参数选择:参数更新:12五、实验结果与分析5.1实验环境与工具Windows7旗舰版(ServicePack1)MyEclipse2014。5.2实验数据集与参数设置bigdata.txt==》线性可分(y=x程序产生)cycle.txt==》线性不可分(x^2+y^2=1,程序生成)13cycle2.txt==》线性不可分(x^2+y^2=0~2.5)heart_scale==》线性不可分实际数据testSet.txt==》线性可分不规则图形.txt==》线性不可分(图像数据)人脸.txt==》线性不可分(图像数据)5.3评估标准算法经过训练集的训练之后,