实验三:分类算法实验(共14页).doc

上传人:飞****2 文档编号:15135720 上传时间:2022-05-11 格式:DOC 页数:14 大小:394.50KB
返回 下载 相关 举报
实验三:分类算法实验(共14页).doc_第1页
第1页 / 共14页
实验三:分类算法实验(共14页).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《实验三:分类算法实验(共14页).doc》由会员分享,可在线阅读,更多相关《实验三:分类算法实验(共14页).doc(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

2、 B 发生后 A 的条件概率,也由于得自 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)的值

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

4、进行性能评估;5统计分析实验结果并上交实验报告;定义和初始化变量统计并计算条件概率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. 提出一种提高分类器性能的方法并通过实验验证。五、 实验心得通过这次实验加深了我对朴素贝叶斯

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

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

8、. float ClassValuesL4; /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,s

9、tring c,string 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) Clas

10、sValuesi/countTrain;/特别注意的是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

11、) doorsLij=0;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

12、)=P(A|Bi)P(Bi)/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;els

13、e if(bi=low) 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

14、(Bi|A)的概率取最大的 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,2

15、00,500,700,1350;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 =

16、 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; /low, med, high. ClassValuesLi=0; /unacc, acc, good, vgood buyingLij=0; /vhigh, high, med, low.maintLij=0; / vhigh, high, med, low. doorsLij=0; /2, 3, 4, 5more. personsLij=0; /2, 4, more. lug_bootLij=0; /small, med, big. safetyLij=0; /low, med, high. 专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com