机器学习实训实验报告(三)专业班级学号姓名实验项目名称:支持向量机:以SOM算法优化求解实验内容:1、理解支持向量机的概念,以及相关理论知识2、了解SMO算法概念,及在支持向量机上的应用3、理解核函数概念,理解核函数将数据映射到高维空间实验过程:算法分析:SMO算法:1、概述SMO算法在支持向量机中用来求解“对偶问题,即iEL询碣卿时-a,在这个问题中,变量是拉格朗日乘子a,—个ai对应一个样本点(xi,yi),变量总数等于样本数量NoSMO算法是一个启发式的算法,它的基本思路是:如果所有变量的解都满足KKT条件,即:f>0阳吊J一1亠£上0J6伽九巧)—1十£)=01W>0&>0-o如果所有变量的解都慢着KKT条件,那么这个最优化问题的解就得到了,因为KKT条件是这个最优化问题的充分必要条件。否则选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,这个二次规划问题的关于这两个变量的解应该更接近原始二次规划问题的解,重要的是,这两个变量可以通过解析方法来求解。整个SMO算法有两大部分组成,第一部分就是选择这两个变量的启发式的方法,第二部分是求解这两个变量的解析方法。源程序代码:fromtimeimportsleepimportmatplotlib.pyplotaspitimportnumpyasnpimportrandomimporttypesfromnumpyimport*#函数说明:读取数据defloadDataSet(fileName):dataMat=[];labelMat=[]fr=open(fileName)forlineinfr.readlines():#逐行读取,滤除空格等lineArr=line.strip().split('\t')dataMat.append([float(lineArr[0]),float(lineArr[1])])#添加数据labelMat.append(float(lineArr[2]))#添加标签returndataMat,labelMat#函数说明:随机选择alphadefselectJrand(i,m):j=i#选择一个不等于i的jwhile(j==i):j=int(random.uniform(0,m))returnj#函数说明:修剪alphadefclipAlpha(aj,H,L):#选取大于H小于L的ajifaj>H:aj=HifL>aj:aj=Lreturnaj#函数说明:简化版SMO算法defsmoSimple(dataMatIn,classLabels,C,toler,maxIter):#转换为numpydataMatrix=np.mat(dataMatIn);labelMat=np.mat(classLabels).transpose()#初始化b参数,统计dataMatrix的维度,m为个数,n为维数b=0;m,n=np.shape(dataMatrix)2、第一个变量选择SMO称第一个变量的选择过程为外层循环,外层循环要选择一个违反KKT条件的变量,具体来说,若ai=O,那么由ai+yi=C可知yi=C又因为yigi=O,所以gi=gi=O也就是说要满足KKT条件要满足yif(xi)三1同样的推导过程可以得到0<场五)=1Qi=Ct<1若变量违反了KKT条件,我们就选择它为第一个变量,在检验过程中,外层循环首先在所有变量中遍历,遇到违反KKT条件的变量就接着选择第二个变量,然后在整个集合上遍历一次后,然后在所有非边界变量上遍历所谓非边界变量,就是指满足0
toler)and(alphas[i]>0)):#随机选择另一个与alph...