您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 实验三:分类算法实验
HUNANUNIVERSITY人工智能实验报告题目实验三:分类算法实验学生姓名蒙寿伟学生学号201408070120专业班级智能科学与技术1401班指导老师袁进日期2017年5月15日一.实验目的1.了解朴素贝叶斯算法和决策树算法的基本原理;2.能够使用朴素贝叶斯算法或者决策树算法对数据进行分类3.学会对于分类器的性能评估方法二、实验的硬件、软件平台硬件:计算机软件:操作系统:WINDOWS2000应用软件:C,Java或者Matlab三、实验相关知识贝叶斯定理:)()()|()|(PAPBPBAPABP(A)是A的先验概率,之所以称为“先验”是因为它不考虑任何B方面的因素。P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。P(B)是B的先验概率,也作标淮化常量(normalizingconstant)。以第一条数据为例:vhigh,vhigh,2,2,small,low,unaccClassValues:unacc,acc,good,vgood对应P(Bi)。(i=0,1,2,3)分别算出取其中的最大值,其中,P(A)的值相同,可以不算出来。If(P(B|A)最大==测试样例.ClassValues)returntrue;Elsereturnfalse;buying:vhigh,high,med,low.maint:vhigh,high,med,low.doors:2,3,4,5more.Persons:2,4,more.lug_boot:small,med,big.safety:low,med,high.P(Ai)(i=0,1,2,3)六个属性相互独立:P(A0|B0)*P(A1|B0)*......P(A5|B0)=P(A|B0)。。。。。。)()0()0|()|0(PAPBPBAPAB)()1()1|()|1(PAPBPBAPAB)()2()2|()|2(PAPBPBAPAB)()3()3|()|3(PAPBPBAPAB四、实验内容及步骤实验内容:利用贝叶斯算法或者决策树算法进行数据分类操作数据集:汽车评估数据集(见附录)实验步骤:1.仔细阅读并了解实验数据集;2.使用任何一种熟悉的计算机语言(比如C,Java或者matlab)实现朴素贝叶斯算法或者决策树算法;3.利用朴素贝叶斯算法或者决策树算法在训练数据上学习分类器,训练数据的大小分别设置为:前100个数据,前200个数据,前500个数据,前700个数据,前1000个数据,前1350个数据;4.利用测试数据对学习的分类器进行性能评估;5.统计分析实验结果并上交实验报告;1定义和初始化变量2统计并计算条件概率P(Ai|Bi),(i=0,1,2,3),当训练数据比较小时会出现Bi等于0的情况,这时P(Ai|Bi)=nan,所以可以加一个判断,当P(Ai|Bi)0或P(Ai|Bi)1时,让P(Ai|Bi)=0.3计算)()()|()|(PAPBiPBiAPABi(四个里面取最大)4实验结果四、思考题:1.两种算法在训练数据集和测试数据集上的性能一致吗?哪个比较好?决策树(decisiontree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。决策树的成功率为:61.80372%,贝叶斯成功率为:68.7831%(贝叶斯更好一点)相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。2.提出一种提高分类器性能的方法并通过实验验证。五、实验心得通过这次实验加深了我对朴素贝叶斯的认识,学会了用朴素贝叶斯算法解决具体的问题。朴素贝叶斯分类是一种十分简单的分类算法,对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就觉得此待分类项属于哪个类别。朴素贝叶斯的原理决定了其成功率不可能太高,但是朴素贝叶斯的简单易用性使得其在一些日常生活中应用广泛。附件(代码)#includeiostream#includecstdlib#includecstring#includevector#includefstream#includestdio.husingnamespacestd;intcountTrain=0;//训练样本数目intcountTest=0;//测试样本数目intcountTestSuc=0;//测试样本正确的数目intcountF=100;//训练和测试的分界stringCVname[4]={unacc,acc,good,vgood};intClassValues[4];//unacc,acc,good,vgoodintbuying[4][4];//vhigh,high,med,low.intmaint[4][4];//vhigh,high,med,low.intdoors[4][4];//2,3,4,5more.intpersons[4][4];//2,4,more.intlug_boot[4][4];//small,med,big.intsafety[4][4];//low,med,high.floatClassValuesL[4];//unacc,acc,good,vgoodfloatbuyingL[4][4];//vhigh,high,med,low.floatmaintL[4][4];//vhigh,high,med,low.floatdoorsL[4][4];//2,3,4,5more.floatpersonsL[4][4];//2,4,more.floatlug_bootL[4][4];//small,med,big.floatsafetyL[4][4];//low,med,high.**///统计个数voidTonji(stringa,stringb,stringc,stringd,stringe,stringf,stringg){//coutabcdefgendl;for(inti=0;i4;i++)if(g==CVname[i]){ClassValues[i]++;//buying:vhigh,high,med,low.if(a==vhigh)buying[0][i]++;elseif(a==high)buying[1][i]++;elseif(a==med)buying[2][i]++;elseif(a==low)buying[3][i]++;//maint:vhigh,high,med,low.if(b==vhigh)maint[0][i]++;elseif(b==high)maint[1][i]++;elseif(b==med)maint[2][i]++;elseif(b==low)maint[3][i]++;//doors:2,3,4,5more.if(c==2)doors[0][i]++;elseif(c==3)doors[1][i]++;elseif(c==4)doors[2][i]++;elsedoors[3][i]++;//persons:2,4,more.if(d==2)persons[0][i]++;elseif(d==4)persons[1][i]++;elsepersons[2][i]++;//lug_boot:small,med,big.if(e==small)lug_boot[0][i]++;elseif(e==med)lug_boot[1][i]++;elseif(e==big)lug_boot[2][i]++;//safety:low,med,high.if(f==low)safety[0][i]++;elseif(f==med)safety[1][i]++;elseif(f==high)safety[2][i]++;break;}}//读取文件voidReadFileTrain(){ifstreamfin(CarDatas.txt);stringa,b,c,d,e,f,g;inti=countF;while((i--)0&&fina&&finb&&finc&&find&&fine&&finf&&fing){countTrain++;Tonji(a,b,c,d,e,f,g);}fin.close();cout训练样本countTrain=countTrainendl;}//统计得到在各类别下各个特征属性的条件概率估计voidCalAP(){//概率P(yi)for(inti=0;i4;i++){ClassValuesL[i]=(float)ClassValues[i]/countTrain;}//特别注意的是P(ai|yi)=ai/0的情况!!!,会使P(ai|yi)等于nan;for(inti=0;i4;i++){//概率P(ai|yi)for(intj=0;j4;j++){buyingL[i][j]=(float)buying[i][j]/ClassValues[j];if(buyingL[i][j]0||buyingL[i][j]1)buyingL[i][j]=0;maintL[i][j]=(float)maint[i][j]/ClassValues[j];if(maintL[i][j]0||maintL[i][j]1)maintL[i][j]=0;doorsL[i][j]=(float)doors[i][j]/ClassValues[j];if(doorsL[i][j]0||doorsL[i][j]1)doorsL[i][j]=0;}}for(inti=0;i3;i++){//概率P(ai|yi)for(intj=0;j4;j++){personsL[i][j]=(float)persons[i][j]/ClassValues[j];if(personsL[i][j]0||personsL[i][j]1)personsL[i][j]=0;lug_bootL[i][j]=(float)lug_boot[i][j]/ClassValues[j];if(lug_bootL[i][j]0||lug_bootL[i][j]1)lug_bootL[i][j]=0;safetyL[i][j]=(float)safety[i][j]/ClassValues[j];if(safetyL[i][j]0||safetyL[i][j]1)safetyL[i][j]=0;}}}//一行数据的准确与否,P(Bi|A)=P(A|Bi)P(Bi)/P(A),其中P(A)相同,只需比较分子的大小即可boolTestLine(stringai,stringbi,stringci,stringdi,stringei,stringfi,stringgi){intb,m,d,p,l,s;//buying:if(ai==vhigh)b=0;elseif(ai==high)b=1;elseif(ai==med)b=2;elseif(ai==low)b=3;//maint:if(bi==vhigh)m=0;elseif(bi==high)m=1;elseif(bi==med)m=2;elseif(bi==low)m=3;//doors:if(c
本文标题:实验三:分类算法实验
链接地址:https://www.777doc.com/doc-5442138 .html