朴素贝叶斯分类器_第1页
朴素贝叶斯分类器_第2页
朴素贝叶斯分类器_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、朴素贝叶斯分类器Naive Bayesia n ClassifierC语言实现信息电气工程学院 计算本1102班20112212465马 振磊1.贝叶斯公式p(C|几宇耳)讥0)列耳凡|C)通过贝叶斯公式,我们可以的知在属性F1-Fn成立的情况下,该样本属于分类C的概率。而概率越大,说明样本属于分类C的可能性越大。若某样本可以分为 2种分类A, B。要比较P(A | F1,F2)与P(B | F1,F2)的大小只需比较,P(A)P(F1,F2| A),与P(B)P(F1,F2| B)因为两式分母一致。而 P(A)P(F1,F2| A)可以采用缩放为 P(A)P(F1|A)P(F2|A)(Fn|

2、A)因此,在分类时,只需比较每个属性在分类下的概率累乘,再乘该分类的概率即可。分类属性 outlook属性 temperature属性 humidity属性windnosunnyhothighweaknosunnyhothighstro ngyesovercasthothighweakyesrainmildhighweakyesraincoolno rmalweaknoraincoolno rmalstro ngyesovercastcoolno rmalstro ngnosunnymildhighweakyessunnycoolno rmalweakyesrainmildno rmalwea

3、kyessunnymildno rmalstro ngyesovercastmildhighstro ngyesovercasthotno rmalweaknorainmildhighstro ng以上是根据天气的 4种属性,某人外出活动的记录。 若要根据以上信息判断(Outlook = sunny ,Temprature = cool,Humidity = high,Wi nd = strong) 所属分类。P(yes| sunny ,cool ,high ,str ong )=P(yes)P(s unny |yes)P(cool |yes)P(high|yes)P(stro ng|yes)

4、/KP(no| sunny ,cool ,high ,str ong )=P( no )P(s unny|no )P(coo I |no )P(high| no )P(str ong|no)/KK为缩放因子,我们只需要知道两个概率哪个大,所以可以忽略K。P(yes)=9/14P(n o)=5/14P(su nn y|yes)=2/9 P(cool|yes)=1/3P(high|yes)=1/3 P(stro ng|yes)=1/3P(su nn y| no)=3/5P(cool| no)=1/5P(high |n o)=4/5P(stro ng|n o)=3/5P(yes| sunny ,co

5、ol ,high ,strong)=9/14*2/9*1/3*1/3*1/3=0.00529P(no| sunny ,cool ,high ,strong )=5/14*3/5*1/5*4/5*3/5=0.20571No的概率大,所以该样本实例属于no分类。2.数据结构及代码实现1属性及分类我们限定分类器的属性不大于 9个,每个属性拥有不大于 9个值。于是,我们考虑采用一个9X9的表格存储属性及其值。属性1值1值2值3值4值5值6值7值8值9属性2值1值2值3值4值5值6值7值8值9属性3值1值2值3值4值5值6值7值8值9属性4值1值2值3值4值5值6值7值8值9属性5值1值2值3值4值5值

6、6值7值8值9属性6值1值2值3值4值5值6值7值8值9属性7值1值2值3值4值5值6值7值8值9属性8值1值2值3值4值5值6值7值8值9属性9值1值2值3值4值5值6值7值8值9为了调用数据方便,我们把数据从第一行开始储存。为了充分利用存储空间,我们把第零行储存分类数据。分类1分类2分类3分类4分类5分类6分类7分类8分类9属性1值1值2值3值4值5值6值7值8值9属性2值1值2值3值4值5值6值7值8值9属性3值1值2值3值4值5值6值7值8值9属性4值1值2值3值4值5值6值7值8值9属性5值1值2值3值4值5值6值7值8值9属性6值1值2值3值4值5值6值7值8值9属性7值1值2值3

7、值4值5值6值7值8值9属性8值1值2值3值4值5值6值7值8值9属性9值1值2值3值4值5值6值7值8值9现在,我们可以采用一个10 X 10的表格来储存数据了。而每个单元格的内容需要占用一定的储存空间,我们可以用一个三维数组 char feature101010 来表示这种结构的数据。用来容纳 9个属性的9个值。第0行, 我们用来储存分类数据。而第一行的第一列没有被使用,而其中含有10个char类型的数据我们可以用它来储存 属性值的多少。如图:分类的个数属性1值的个数属性2值的个数属性9值的个数前一段的数据:分类:yesno属性 outlook:sunnyovercastrain属性 te

8、mperature :hotmildcool属性 humidity :highno rmal属性wind :stro ngweak如下图yesnooutlooksunnyovercastrainTemperahotmildcoolhumidityhighnormalwindstrongweak第0行,第0列233T2T223322代码如下:int x=1,y;printf(”请输入属性名称(小于9个字符):");gets(featurex0);printf("该属性有几种值(不多于9个值):");/把属性值储存入feature00x;feature00x是由字符格

9、式输入的-48根据 feature00x循环输入,将属性的值存入scan f("%c",& feature00x);feature00x-=48;变为数字getchar(); system("cls");for(y=1;y<=feature00x;y+) /数组printf("请输入第%d个值:",y);gets(featurexy);x+;feature 数组。通过这段代码的循环,输入属性及其值进入通过以下代码将分类数据存入数组第0行。prin tf("该事物可以被分为几种类别:”);scanf("

10、%c",&feature000);/ 分类数目存入 feature000feature000-=48;getchar();system("cls");for(y=1;y<=feature000;y+)/ 通过循环将分类存入第0 行printf("请输入第%d种类别的名称:",y);gets(feature0y);2. 训练样本每个训练样本的属性最多有9个值,再加上分类一个值,所以,我们采用一个10列的表格储存训练样本数据。nosunnyhothighweaknosunnyhothighstro ngyesovercasthothi

11、ghweakyesrainmildhighweakyesraincoolno rmalweaknoraincoolno rmalstro ngyesovercastcoolno rmalstro ngnosunnymildhighweakyessunnycoolno rmalweakyesrainmildno rmalweakyessunnymildno rmalstro ngyesovercastmildhighstro ngyesovercasthotno rmalweaknorainmildhighstro ng同样,每个单元格里限制最多有9个字符,加上一个0 '终止符,共十个。

12、而样本数量,也就是行数,可以适当的多一点,暂设为30。因此我们采用三维数组char sample301010来容纳样本数据。X的初始值为1for(y=1;y<=FeatureNum;y+)printf("特征 %s 的取值:",featurey0);gets(samplex-1y);printf(”该样本归于哪一种分类:");gets(samplex-10);x+;SampleNum+;/统计样本的数量3. 计算概率class probabilitypublic:int id;/给每个概率值一个定位ID,方便查找double p;probability()p

13、=0;probability prob729;采用一 729个类来存放每个属性值在不同分类下的概率。至多有 9种属性,每个属性至多拥有 9个值,而要计 算这9个属性的9种值在9种不同分类下的概率,所以我们用了729个类。并且在构造函数里面初始化概率p为0.接下来,统计各种分类出现的个数。9种分类出现的数目,分别储存在SampleClassNum9的不同单元格里。int SampleClassNum9=0,0,0,0,0,0,0,0,0;for(c=1;c<=feature000;c+)for(x=0;x<SampleNum;x+)if(strcmp(featureOc,sample

14、xO)=O)SampleClassNumc-1+;然后,我们可以开始计算概率了。for(c=1;c<=feature000;c+)for(x=1;x<=FeatureNum;x+)for(y=1;y<=feature00x;y+)probcou nter.id=c*100+x*10+y;for(i=0;i<SampleNum;i+)if(strcmp(featurexy,sampleix)=O&&strcmp(featureOc,sampleiO)=O)probcounter.p+;/统计某一值在某一分类下的出现个数probco un ter.p=pro

15、bco un ter.p/SampleClassNumc-1; /出现个数除以分类出 算出概率coun ter+;/现总数,计每个概率的ID为3位整数,百位记录了分类信息,个位十位分别是,其属性值在表格中的X,Y坐标。然后,进行比较,统计出出现个数,接着除以分类的出现总数,计算出概率。4. 对新的实例进行分类输入该新的实例。char in sta nce910;double Pi nsta nce9=1,1,1,1,1,1,1,1,1;int PID9;printf(”贝叶斯分类器 Sept 5n");printf(”请输入要分类的样本属性n");for(i=1;i<

16、=FeatureNum;i+)printf(" 特征 %s 的取值 ”,featureiO); gets(i nsta ncei-1);然后,计算出不含分类信息的值在表格中的X,Y坐标。for(x=1;x<=FeatureNum;x+) for(y=1;y<=feature00x;y+)if(strcmp(featurexy,i nsta ncex-1)=0) PIDx-1=x*10+y;break;根据X,Y坐标加上分类坐标,组成完整的3位数坐标。在概率表prob中查找即可找到。通过累乘,然后乘上某一分类的概率,即可求出最终的概率。for(c=1;c<=feature000;c+) for(y=0;y<FeatureNum;y+)for(i=0;i<729;i+)/累乘求概率if(probi.id=PIDy+c*100) break;Pin sta ncec-1=P in sta ncec-1*probi.p; Pi nsta ncec-1=Pi nsta ncec-1*(SampleClassNumc-1/(double)SampleNum);/最后乘上这一分类的概率,即可求出最终概率system(&quo

温馨提示

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

评论

0/150

提交评论