实验三:分类算法实验_第1页
实验三:分类算法实验_第2页
实验三:分类算法实验_第3页
实验三:分类算法实验_第4页
实验三:分类算法实验_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HUNAN UNIVERSITY人工智能实验报告题 目 实验三:分类算法实验学生姓名 蒙寿伟 学生学号 0 专业班级 智能科学与技术1401班 指导老师 袁进 日 期 2017年5月15日 一实验目的1.了解朴素贝叶斯算法和决策树算法的基本原理;2.能够使用朴素贝叶斯算法或者决策树算法对数据进行分类3.学会对于分类器的性能评估方法二、实验的硬件、软件平台硬件:计算机软件:操作系统:WINDOWS2000应用软件:C,Java或者Matlab3、 实验相关知识贝叶斯定理:P(A)是 A 的先验概率,之所以称为“先验”是因为它不考虑任何 B 方面的因素。P(A|B)是已知 B 发生后 A 的条件概

2、率,也由于得自 B 的取值而被称作 A 的后验概率。P(B|A)是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。P(B)是 B 的先验概率,也作标淮化常量(normalizing constant)。以第一条数据为例:vhigh,vhigh,2,2,small,low,unaccClassValues: unacc, acc, good, vgood 对应P(Bi)。(i=0,1,2,3)P(Ai)六个属性相互独立:P(A0|B0)*P(A1|B0)*.P(A5|B0) =P(A|B0)。分别算出 取其中的最大值,其中,P(A)的值相同,可以不算出来。If(

3、P(B|A)最大 = 测试样例.ClassValues) return true;Else return false;4、 实验内容及步骤实验内容:利用贝叶斯算法或者决策树算法进行数据分类操作数据集:汽车评估数据集(见附录)实验步骤:1仔细阅读并了解实验数据集;2使用任何一种熟悉的计算机语言(比如C,Java或者matlab)实现朴素贝叶斯算法或者决策树算法;3利用朴素贝叶斯算法或者决策树算法在训练数据上学习分类器,训练数据的大小分别设置为:前100个数据,前200个数据,前500个数据,前700个数据,前1000个数据,前1350个数据;4利用测试数据对学习的分类器进行性能评估;5统计分析实

4、验结果并上交实验报告;定义和初始化变量统计并计算条件概率P(Ai|Bi),(i=0,1,2,3),当训练数据比较小时会出现Bi等于0的情况,这时P(Ai|Bi)=nan,所以可以加一个判断,当P(Ai|Bi)1时,让P(Ai|Bi)=0.计算(四个里面取最大)实验结果四、思考题:1. 两种算法在训练数据集和测试数据集上的性能一致吗?哪个比较好?决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属

5、性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。 不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。决策树的成功率为: 61.80372% ,贝叶斯成功率为:68.7831% (贝叶斯更好一点)相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。2. 提出一种提高分类器性能的方法并通过实验验证。5、 实验心得通过这次实验加深了我对朴素贝叶斯的认识,学会了用朴素贝叶斯

6、算法解决具体的问题。朴素贝叶斯分类是一种十分简单的分类算法,对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就觉得此待分类项属于哪个类别。朴素贝叶斯的原理决定了其成功率不可能太高,但是朴素贝叶斯的简单易用性使得其在一些日常生活中应用广泛。附件(代码)#include#include#include#include#include#includeusing namespace std;int countTrain = 0;/训练样本数目int countTest = 0;/测试样本数目int countTestSuc = 0;/测试样本正确的数目int countF=10

7、0; /训练和测试的分界 string CVname4=unacc,acc,good,vgood;int ClassValues4; /unacc, acc, good, vgood int buying44; /vhigh, high, med, maint44; / vhigh, high, med, low. int doors44; /2, 3, 4, 5more. int persons44; /2, 4, more. int lug_boot44; /small, med, safety44; /low, med, high. float Class

8、ValuesL4; /unacc, acc, good, vgood float buyingL44; /vhigh, high, med, low.float maintL44; / vhigh, high, med, low. float doorsL44; /2, 3, 4, 5more. float personsL44; /2, 4, more. float lug_bootL44; /small, med, big.float safetyL44; /low, med, high. */统计个数 void Tonji(string a,string b,string c,strin

9、g d,string e,string f,string g)/couta b c d e f gendl;for(int i=0;i0 & fina & finb& finc & find & fine & finf & fing)countTrain+;Tonji(a,b,c,d,e,f,g); fin.close();cout训练样本countTrain=countTrainendl;/统计得到在各类别下各个特征属性的条件概率估计void CalAP() /概率P(yi)for(int i=0;i4;i+)ClassValuesLi = (float) ClassValuesi/coun

10、tTrain;/特别注意的是P(ai|yi)=ai/0的情况!,会使 P(ai|yi)等于nan; for(int i=0;i4;i+) /概率P(ai|yi)for(int j=0;j4;j+)buyingLij = (float) buyingij/ClassValuesj; if(buyingLij1) buyingLij=0;maintLij = (float) maintij/ClassValuesj; if(maintLij1) maintLij=0;doorsLij = (float) doorsij/ClassValuesj; if(doorsLij1) doorsLij=0;

11、for(int i=0;i3;i+) /概率P(ai|yi)for(int j=0;j4;j+)personsLij = (float) personsij/ClassValuesj; if(personsLij1) personsLij=0;lug_bootLij = (float) lug_bootij/ClassValuesj; if(lug_bootLij1) lug_bootLij=0;safetyLij = (float) safetyij/ClassValuesj; if(safetyLij1) safetyLij=0;/一行数据的准确与否,P(Bi|A)=P(A|Bi)P(Bi

12、)/P(A),其中P(A)相同,只需比较分子的大小即可 bool TestLine(string ai,string bi,string ci,string di,string ei,string fi,string gi)int b, m, d, p, l, s;/buying:if(ai=vhigh) b=0;else if(ai=high) b=1;else if(ai=med) b=2;else if(ai=low) b=3;/maint:if(bi=vhigh) m=0;else if(bi=high) m=1;else if(bi=med) m=2;else if(bi=low)

13、m=3;/doors:if(ci=2) d=0;else if(ci=3) d=1;else if(ci=4) d=2;else d=3;/persons:if(di=2) p=0;else if(di=4) p=1;else p=2;/lug_boot:if(ei=small) l=0;else if(ei=med) l=1;else if(ei=big) l=2;/safety: if(fi=low) s=0;else if(fi=med) s=1;else if(fi=high) s=2;float Bi; float MaxB=0;int t=0;/计算四个P(Bi|A)的概率取最大的

14、 for(int i=0;i4;i+)Bi=buyingLbi * maintLmi * doorsLdi * personsLpi * lug_bootLli * safetyLsi * ClassValuesLi;if(MaxB Bi & Bia & finb& finc & find & fine & finf & fing)if(icountF) countTest+;t=TestLine(a,b,c,d,e,f,g); if(t) countTestSuc+; fin.close();void setZero();int main()int a5=100,200,500,700,13

15、50;for(int i=0;i5;i+)setZero();countF=ai; /训练和测试的分界 ReadFileTrain(); /读取文件并且统计个数CalAP(); /计算条件概率 ReadFileTest(); /测试样本 cout预测正确countTestSuc=countTestSucendl;cout测试样本countTest=countTestendl;cout准确率为:100.0*(float)countTestSuc/(float)countTest)%endlendl;return 0; void setZero()countTrain = 0;/训练样本数目countTest = 0;/测试样本数目countTestSuc = 0;/测试样本正确的数目for(int i=0;i4;i+)for(int j=0;j4;j+)ClassValuesi=0; /unacc, acc, good, vgood buyingij=0; /vhigh, high, med, low.maintij=0; / vhigh, high, med, low. doorsij=0; /2, 3, 4, 5more. personsij=0; /2, 4, more. lug_bootij=0; /small, med, big.safetyij=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论