欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:15135720       资源大小:394.50KB        全文页数:14页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    精选优质文档-倾情为你奉上HUNAN UNIVERSITY人工智能实验报告题 目 实验三:分类算法实验学生姓名 蒙寿伟 学生学号 0 专业班级 智能科学与技术1401班 指导老师 袁进 日 期 2017年5月15日 一实验目的1.了解朴素贝叶斯算法和决策树算法的基本原理;2.能够使用朴素贝叶斯算法或者决策树算法对数据进行分类3.学会对于分类器的性能评估方法二、实验的硬件、软件平台硬件:计算机软件:操作系统:WINDOWS 2000 应用软件:C,Java或者Matlab三、 实验相关知识贝叶斯定理:P(A)是 A 的先验概率,之所以称为“先验”是因为它不考虑任何 B 方面的因素。P(A|B)是已知 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)的值相同,可以不算出来。If(P(B|A)最大 = 测试样例.ClassValues) return true;Else return false;四、 实验内容及步骤实验内容:利用贝叶斯算法或者决策树算法进行数据分类操作数据集:汽车评估数据集(见附录)实验步骤: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>计算(四个里面取最大)<4>实验结果四、思考题:1. 两种算法在训练数据集和测试数据集上的性能一致吗?哪个比较好? 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。      不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。决策树的成功率为: 61.80372% ,贝叶斯成功率为:68.7831% (贝叶斯更好一点)相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。2. 提出一种提高分类器性能的方法并通过实验验证。五、 实验心得通过这次实验加深了我对朴素贝叶斯的认识,学会了用朴素贝叶斯算法解决具体的问题。朴素贝叶斯分类是一种十分简单的分类算法,对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就觉得此待分类项属于哪个类别。朴素贝叶斯的原理决定了其成功率不可能太高,但是朴素贝叶斯的简单易用性使得其在一些日常生活中应用广泛。附件(代码)#include<iostream>#include<cstdlib>#include<cstring>#include<vector>#include<fstream>#include<stdio.h>using namespace std;int countTrain = 0;/训练样本数目int countTest = 0;/测试样本数目int countTestSuc = 0;/测试样本正确的数目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. 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,string c,string d,string e,string f,string g)/cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f<<" "<<g<<endl;for(int i=0;i<4;i+)if(g=CVnamei)ClassValuesi+;/buying: vhigh, high, med, low.if(a="vhigh") buying0i+;else if(a="high") buying1i+;else if(a="med") buying2i+;else if(a="low") buying3i+;/maint: vhigh, high, med, low. if(b="vhigh") maint0i+;else if(b="high") maint1i+;else if(b="med") maint2i+;else if(b="low") maint3i+;/doors: 2, 3, 4, 5more.if(c="2") doors0i+;else if(c="3") doors1i+;else if(c="4") doors2i+;else doors3i+;/persons: 2, 4, more. if(d="2") persons0i+;else if(d="4") persons1i+;else persons2i+;/lug_boot: small, med, big.if(e="small") lug_boot0i+;else if(e="med") lug_boot1i+;else if(e="big") lug_boot2i+;/safety: low, med, high. if(f="low") safety0i+;else if(f="med") safety1i+;else if(f="high") safety2i+;break;/读取文件 void ReadFileTrain()ifstream fin("CarDatas.txt");string a,b,c,d,e,f,g;int i = countF;while(i-)>0 && fin>>a && fin>>b&& fin>>c && fin>>d && fin>>e && fin>>f && fin>>g)countTrain+;Tonji(a,b,c,d,e,f,g); fin.close();cout<<"训练样本countTrain="<<countTrain<<endl;/统计得到在各类别下各个特征属性的条件概率估计void CalAP() /概率P(yi)for(int i=0;i<4;i+)ClassValuesLi = (float) ClassValuesi/countTrain;/特别注意的是P(ai|yi)=ai/0的情况!,会使 P(ai|yi)等于nan; for(int i=0;i<4;i+) /概率P(ai|yi)for(int j=0;j<4;j+)buyingLij = (float) buyingij/ClassValuesj; if(buyingLij<0 | buyingLij>1) buyingLij=0;maintLij = (float) maintij/ClassValuesj; if(maintLij<0 | maintLij>1) maintLij=0;doorsLij = (float) doorsij/ClassValuesj; if(doorsLij<0 | doorsLij>1) doorsLij=0;for(int i=0;i<3;i+) /概率P(ai|yi)for(int j=0;j<4;j+)personsLij = (float) personsij/ClassValuesj; if(personsLij<0 | personsLij>1) personsLij=0;lug_bootLij = (float) lug_bootij/ClassValuesj; if(lug_bootLij<0 | lug_bootLij>1) lug_bootLij=0;safetyLij = (float) safetyij/ClassValuesj; if(safetyLij<0 | safetyLij>1) safetyLij=0;/一行数据的准确与否,P(Bi|A)=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;else 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(Bi|A)的概率取最大的 for(int i=0;i<4;i+)Bi=buyingLbi * maintLmi * doorsLdi * personsLpi * lug_bootLli * safetyLsi * ClassValuesLi;if(MaxB < Bi && Bi<=1)MaxB = Bi;t = i;/判断预测和事实是否相等 if(CVnamet=gi) return true;else return false; /读取并测试文件 void ReadFileTest()ifstream fin("CarDatas.txt");string a,b,c,d,e,f,g;bool t=false;int i=0;while(+i && fin>>a && fin>>b&& fin>>c && fin>>d && fin>>e && fin>>f && fin>>g)if(i>countF) 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,1350;for(int i=0;i<5;i+)setZero();countF=ai; /训练和测试的分界 ReadFileTrain(); /读取文件并且统计个数CalAP(); /计算条件概率 ReadFileTest(); /测试样本 cout<<"预测正确countTestSuc="<<countTestSuc<<endl;cout<<"测试样本countTest="<<countTest<<endl;cout<<"准确率为:"<<100.0*(float)countTestSuc/(float)countTest)<<"%"<<endl<<endl;return 0; void setZero()countTrain = 0;/训练样本数目countTest = 0;/测试样本数目countTestSuc = 0;/测试样本正确的数目for(int i=0;i<4;i+)for(int j=0;j<4;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. 专心-专注-专业

    注意事项

    本文(实验三:分类算法实验(共14页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开