简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx

上传人:b****3 文档编号:6369312 上传时间:2023-05-06 格式:DOCX 页数:29 大小:54.12KB
下载 相关 举报
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第1页
第1页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第2页
第2页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第3页
第3页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第4页
第4页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第5页
第5页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第6页
第6页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第7页
第7页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第8页
第8页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第9页
第9页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第10页
第10页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第11页
第11页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第12页
第12页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第13页
第13页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第14页
第14页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第15页
第15页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第16页
第16页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第17页
第17页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第18页
第18页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第19页
第19页 / 共29页
简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx

《简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx》由会员分享,可在线阅读,更多相关《简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx(29页珍藏版)》请在冰点文库上搜索。

简单朴素贝叶斯分类器的思想与算法分析教学提纲Word文件下载.docx

P(Cj/X)其中1≤j≤m,j≠i.

也可通过求百分比percent(Ci)=P(Ci/X)/∑P(Ck/X),百分比最大值对应的类标就位样本X的类别.

下面就以有关天气问题的数据为例仔细介绍一下朴素贝叶斯分类器进行分类的过程.有关天气的数据如下表所示:

outlook

(类型)

temperature

(温度)

humidity

(湿度)

windy

(风)

play

(玩)

sunny

85

False

No

80

90

True

overcast

83

86

Yes

rainy

70

96

68

65

64

72

95

69

yes

75

81

71

91

no

概率的表示方法:

P(yes/sunny,80,76,false)=0.25就表示在outlook=sunny,temperature=80,humidity=76,windy=false的条件下paly=yes条件概率为0.25.

1.求得名称型属性的后验概率

以P(sunny/yes)为例进行详细说明.首先,计算类标为yes的实例个数为9个,然后计算类标为yes并且outlook属性为sunny的实例个数为2,所以P(sunny/yes)=2/9,这是很自然的事情,为了避免有时该概率值为0,需要对该概率值进行标准化:

即分子加上属性outlook值的个数,也就是3(因为outlook的值有sunny,rainy,overcast三个),分母加上1,标准化后的条件概率P(sunny/yes)=(2+1)/(9+3)=3/12.重复上述步骤,可得属性outlook的后验概率为:

P(sunny/yes)=3/12P(overcast/yes)=5/12P(rainy/yes)=4/12

P(sunny/no)=4/8P(overcast/no)=1/8P(rainy/no)=3/8

属性windy的后验概率为:

P(false/yes)=7/11P(false/yes)=4/11

P(false/no)=3/7P(false/no)=4/7

2.求得数值型属性的均值

数值型属性的均值计算公式为:

xmean=(x1+x2+……+xn)/n,其中x1,x2,……,xn表示数值型属性的值,n表示实例个数.下面就以求在play=yes的条件下数值型属性temperature的均值为例详细说明求解过程:

mean-temperature(yes)=(83+70+68+64+69+75+75+72+81)/9=73同理:

mean-temperature(no)=(85+80+65+72+71)/5=74.6

mean-humidity(yes)=(86+96+80+65+70+80+70+90+75)/9=79.1

mean-humidity(no)=(85+90+70+95+91/5=86.2

3.求得数值型属性的方差

数值型属性的方差计算公式为:

(6)

其中x1,x2,……,xn表示数值型属性的值,xmean表示方差,n表示实例个数.下面就以求在play=yes的条件下数值型属性temperature的方差为例详细说明求解过程.

Devs-temperature(yes)

=((83-73)2+(70-73)2+(68-73)2+(64-73)2+(69-73)2+(75-73)2+(75-73)2+(72-73)2+(81-73)2)/9

=6.2

同理,可求得

Devs-temperature(no)=7.9

Devs-humidity(no)=10.2

Devs-humidity(no)=9.7

4.求得类属性的先验概率

以P(yes)为例进行详细说明.首先计算数据集的实例总数为14,然后计算类标为yes的实例总数为9,所以P(yes)=9/14,为避免有时该概率值为0,需要对该概率值进行标准化:

即分子加上类属性play值的个数,也就是2(因为play的值有yes,no二个),分母加上1,标准化后的条件概率P(yes)=(9+1)/(14+2)=10/16,同理可求得P(no)=(5+1)/(14+2)=6/16.

5.根据上述参数计算待分类实例属于每个类的概率,选择概率值最大的类作为待分类实例的类标.下面以实例(sunny,66,90,true)为例说明一下其分类过程:

首先求P(yes/sunny,66,90,true),根据bayes定理和条件独立性假设,

P(yes/sunny,66,90,true)=(P(yes)P(sunny/yes)P(true/yes)f(66/yes)f(90/yes))/P(sunny,66,90,true)

由于P(sunny,66,90,true)为常数,最后求类的百分比的时候可以抵消,可以不加考虑,而P(66/yes)可用概率密度f(66/yes)来代替,这对最后的求类的百分比也没有影响,所以我们只需求P(yes)P(sunny/yes)P(true/yes)f(66/yes)f(90/yes).而P(yes),P(sunny/yes),P(true/yes)已经求得,根据正态分布假设,f(66/yes),f(90/yes)也很容易求得.

同理可求得f(90/yes)=0.0221,所以:

P(yes)P(sunny/yes)P(true/yes)f(66/yes)f(90/yes)=10/16×

3/12×

0.034×

0.0221×

4/11=0.000043.

重复上述步骤可得:

f(66/no)=0.0291,f(90/no)=0.0380,因而有:

P(no)P(sunny/no)P(true/no)f(66/no)f(90/no)=6/16×

4/8×

4/7×

0.0291×

0.0380=0.00018

所以,待分类实例属于类yes的百分比为

probability-of-yes=0.000043/(0.000043+0.000118)=26.7%

probability-of-no=0.000118/(0.000043+0.000118)=73.3%

因此,待分类实例的类属性值为no.

基于本文所述ID3的基本思想,ID3的具体算法是:

下面我们介绍一下其算法实现的有关细节.我们所介绍的ID3程序是在weka系统下利用java语言编写的分类器程序.该程序主要包括以下几个方法:

globalInfo()

返回该分类器的描述字符串.

BuildClassifier(Instancesinstances)

BuildClassifier()方法从一个训练数据集合instances构造一个分类器.求出所有名称型属性的后验概率,类属性的先验概率,数值属性的均值和方差,为后来的分类工作做准备.

distributionForInstance(Instanceinstance)

该方法计算待分类实例instance属于各个类标的百分比,并且将各个百分比数值存于一个数组中,最后返回该数组.

toString()

把分类器的参数(均值,方差,各先验概率,各后验概率)以字符串的形式返回.

normalDens(doublex,doublemean,doublestdDev)

该方法用于根据正态分布(均值为mean,方差为stdDev)计算数值型属性当属性值为x时的概率密度.

Main()

当类从命令行被执行时,就会调用main()方法.它只是用所给的命令行选项告诉Weka的Evaluation类来评估朴素贝叶斯,并且打印所得到的数组.完成这个功能的一行表达式包括在try-catch声明中.try-catch声明用于发现Weka例程或其它Java方法中抛出的各种异常.

附一:

朴素贝叶斯源程序及其注解:

/*

*Thisprogramisfreesoftware;

youcanredistributeitand/ormodify

*itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby

*theFreeSoftwareFoundation;

eitherversion2oftheLicense,or

*(atyouroption)anylaterversion.

*

*Thisprogramisdistributedinthehopethatitwillbeuseful,

*butWITHOUTANYWARRANTY;

withouteventheimpliedwarrantyof

*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe

*GNUGeneralPublicLicenseformoredetails.

*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense

*alongwiththisprogram;

ifnot,writetotheFreeSoftware

*Foundation,Inc.,675MassAve,Cambridge,MA02139,USA.

/*本程序为免费软件;

你可以通过免费软件中心的发布的GNU公共许可的任何版本下下重写或者修改它.

*开发本程序的目的是是希望它是有用的,但没有任何授权,甚至没有潜在的商用或其它特殊目的的授权.

*想要了解更多细节,请参阅GNU公共许可.

*在拿到程序的同时,你应该收到GNU公共许可;

假如没有的话,请致函免费软件中心Inc.,675Mass

Ave,Cambridge,MA02139,USA.

*NaiveBayesSimple.java

*Copyright(C)1999EibeFrank

*/

packageweka.classifiers.bayes;

importweka.classifiers.Classifier;

importweka.classifiers.Evaluation;

importjava.io.*;

importjava.util.*;

importweka.core.*;

/**

*ClassforbuildingandusingasimpleNaiveBayesclassifier.

*Numericattributesaremodelledbyanormaldistribution.Formore

*information,see<

p>

*RichardDudaandPeterHart(1973).<

i>

Pattern

*ClassificationandSceneAnalysis<

/i>

.Wiley,NewYork.

*@authorEibeFrank(eibe@cs.waikato.ac.nz)

*@version$Revision:

1.15$

*创建和使用NaiveBayes分类器的类

*数值型属性均符合正态分布

publicclassNaiveBayesSimpleeXtendsClassifier{//分类器的构造函数

publicNaiveBayesSimple(){

try{

jbInit();

//分类器初始化

}catch(EXceptioneX){

eX.printStackTrace();

//创建分类器对象时若出现异常则输出堆栈信息

}

/**Allthecountsfornominalattributes.所有名称型属性的计数数组*/

protecteddouble[][][]m_Counts;

/*属于每个类每个名称型属性的每个取值的个数数组,其中第一维表示类名,第二维表示属性名,第三维表示属性值,比如m_Counts[yes][outlook][sunny]*/

/**Themeansfornumericattributes.数值型属性的均值数组*/

protecteddouble[][]m_Means;

/*数值型属性的均值数组,其中第一维表示类名,第二维表示属性名,比如m_Means[no][temperature],公式为:

(7)

/**Thestandarddeviationsfornumericattributes.数值型属性的标准差数组*/

protecteddouble[][]m_Devs;

/*数值型属性的标准差数组,其中第一维表示类名,

第二维表示属性名,比如m_Devs[no][temperature],公式为:

(8)

/**Thepriorprobabilitiesoftheclasses.每个类的先验概率数组*/

protecteddouble[]m_Priors;

//每个类的先验概率,第一维表示类名,比如m_Prior[yes]

/**Theinstancesusedfortraining.用于训练的实例*/

protectedInstancesm_Instances;

//定义用于训练的实例

/**Constantfornormaldistribution.正态分布常量*/

protectedstaticdoubleNORM_CONST=Math.sqrt(2*Math.PI);

//正态分布常量

*Returnsastringdescribingthisclassifier

*@returnadescriptionoftheclassifiersuitablefor

*displayingintheeXplorer/eXperimentergui

*返回该分类器的描述字符串

*返回适合于图形界面用户的分类器的描述

方法一:

publicStringglobalInfo(){//返回该分类器的描述字符串

return"

ClassforbuildingandusingasimpleNaiveBayesclassifier."

+"

Numericattributesaremodelledbyanormaldistribution.Formore"

information,see\n\n"

RichardDudaandPeterHart(1973).Pattern"

ClassificationandSceneAnalysis.Wiley,NewYork."

;

}

*Generatestheclassifier.

*@paraminstancessetofinstancesservingastrainingdata

*@eXceptionEXceptioniftheclassifierhasnotbeengeneratedsuccessfully

*构造分类器

*参数instances表示训练例集合

*若分类器不正正常构造,则出现异常提示

方法二:

publicvoidbuildClassifier(Instancesinstances)throwsEXception{//构造分类器

intattIndeX=0;

//属性索引

doublesum;

//属于每个类的每个名称型属性的总个数

if(instances.checkForStringAttributes()){

thrownewUnsupportedAttributeTypeEXception("

Cannothandlestringattributes!

"

);

}//若实例集合为string型则提示异常

if(instances.classAttribute().isNumeric()){

thrownewUnsupportedClassTypeEXception("

NaiveBayes:

Classisnumeric!

}//若实例集合的类属性为数值型则提示异常

m_Instances=newInstances(instances,0);

//空实例

//Reservespace为数组m_Counts[][][],m_Means[][],m_Devs[][],m_Priors[]分配空间

m_Counts=newdouble[instances.numClasses()][instances.numAttributes()-1][0];

/*属于每个类每个名称型属性的每个取值的个数数组,其中第一维表示类名,第二维表示属性名,第三维表示属性值,instances.numClasses()返回实例集的类值的个数,instances.numAttributes()返回实例集的属性个数,包括类属性,这也是第二维减一的原因,第三维之所以为零是因为后续分配空间的方便*/

m_Means=newdouble[instances.numClasses()][instances.numAttributes()-1];

/*数值型属性的均值数组,其中第一维表示类名,第二维表示属性名,instances.numClasses()返回实例集的类值的个数,instances.numAttributes()返回实例集的属性个数,包括类属性,这也是第二维减一的原因,*/

m_Devs=newdouble[instances.numClasses()][instances.numAttributes()-1];

/*数值型属性的标准差数组,其中第一维表示类名,第二维表示属性名,instances.numClasses()返回实例集的类值的个数,instances.numAttributes()返回实例集的属性个数,包括类属性,这也是第二维减一的原因,*/

m_Priors=ne

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2