贝叶斯实验报告(2)

2020-03-26 21:33

NBayes.Calculated_probability();//计算概率 NBayes.TestData();//导入测试样本数据 NBayes.show();//输出结果 }

/*汽车属性类 * */

publicclass Property{//汽车有6个属性,每个属性都有几种类别,根据这6个属性来判断汽车的性价比Classvalue如何,

public String buying;//vhigh,high,med,low public String maint;//vhigh,high,med,low public String doors;//2,3,4,5more public String persons;//2,4,more

public String lug_boot;//small ,med,big public String safety;// low,med,high

public String ClassValues;//unacc,acc, good,vgood

public String[] PredictResult = new String[5];// 记录预测结果 public Property(String b,String m,String d,String p,String l,String s,String c){

buying=b;maint=m;doors=d;

persons=p;lug_boot=l;safety=s; ClassValues=c; } };

VectorData=new Vector();//存储数据

VectorDataTest=new Vector();//存储测试数据 /*

* 文件读写获取训练样本 * */

publicvoid ReadFile(String filename) throws IOException {

BufferedReader br=new BufferedReader(new FileReader(filename)); String temp=null; temp=br.readLine();

String []str = null;

Property TempClass = null; while(temp!=null){

str=temp.split(\);

TempClass=new Property(str[0],str[1],str[2],str[3],str[4],str[5],str[6]); Statistics(TempClass);//统计个数 testTotal++;

temp=br.readLine(); } br.close(); } /*

* 统计每一项的个数vhigh,vhigh,2,2,small,low,unacc * */

publicvoid Statistics(Property car){ for(inti=0;i<4;i++){

if(car.ClassValues.equals(ClassValueName[i])){ ClassValues[i]++; //vhigh,high,med,low

if(car.buying.equals(\)) buy[0][i]++; elseif(car.buying.equals(\)) buy[1][i]++; elseif(car.buying.equals(\)) buy[2][i]++; elsebuy[3][i]++;

//vhigh,high,med,low

if(car.maint.equals(\)) maint[0][i]++; elseif(car.maint.equals(\)) maint[1][i]++; elseif(car.maint.equals(\)) maint[2][i]++; elsemaint[3][i]++; //2,3,4,5more

if(car.doors.equals(\)) door[0][i]++;

elseif(car.doors.equals(\)) door[1][i]++; elseif(car.doors.equals(\)) door[2][i]++; elsedoor[3][i]++; //2,4,more

if(car.persons.equals(\)) person[0][i]++;

elseif(car.persons.equals(\)) person[1][i]++; elseperson[2][i]++; //small ,med,big

if(car.lug_boot.equals(\)) lug_boot[0][i]++; elseif(car.lug_boot.equals(\)) lug_boot[1][i]++; elselug_boot[2][i]++; // low,med,high

if(car.safety.equals(\)) safe[0][i]++;

elseif(car.safety.equals(\)) safe[1][i]++; elsesafe[2][i]++; } } }/*

*计算概率 */

publicvoid Calculated_probability(){ for(inti=0;i

ClassValue_gl[i]=(float)ClassValues[i]/testTotal;

for(inti=0;i

for(intj=0;j

buy_Vlaue_gl[i][j]=(float)buy[i][j]/ClassValues[j];

maint_Value_gl[i][j]=(float)maint[i][j]/ClassValues[j]; door_Value_gl[i][j]=(float)door[i][j]/ClassValues[j]; }

for(inti=0;i

for(intj=0;j

person_Value_gl[i][j]=(float)person[i][j]/ClassValues[j]; lugboot_Value_gl[i][j]=(float)lug_boot[i][j]/ClassValues[j]; safe_Value_gl[i][j]=(float)safe[i][j]/ClassValues[j];

} } /*

* 获取测试数据 * */

publicvoid TestData() throws IOException {

BufferedReader br=new BufferedReader(new FileReader(\)); String temp;

temp=br.readLine(); String []str = null; Property Car = null; while(temp!=null){

str=temp.split(\);

Car=new Property(str[0],str[1],str[2],str[3],str[4],str[5],str[6]); predictTotal++;

Data.addElement(Car); calculate(Car);

temp=br.readLine(); } } /**

* 对分类器进行性能测试,判断其成功率为多少 * @param car */

publicvoid calculate(Property car){

// unacc,acc,good,vgood, P(yi)--ClassValueTotal_gl 、 P(x|yi)=low,vhigh,4,2,small,low,unacc第一条 floatitemGl;// 每一条的概率 intb, m, d, p, l, s;

b = m = d = p = l = s = -1; floatMaxGl = 0;

if (car.buying.equals(\)) b = 0; elseif (car.buying.equals(\)) b = 1; elseif (car.buying.equals(\))b = 2; elseb = 3;

if (car.maint.equals(\)) m = 0; elseif (car.maint.equals(\)) m = 1; elseif (car.maint.equals(\))m = 2; elsem = 3;

if (car.doors.equals(\)) d = 0;

elseif (car.doors.equals(\)) d = 1; elseif (car.doors.equals(\))d = 2; elsed = 3;

if (car.persons.equals(\)) p = 0; elseif (car.persons.equals(\))p = 1; elsep = 2;

if (car.lug_boot.equals(\)) l = 0; elseif (car.lug_boot.equals(\)) l = 1;

elsel = 2;

if (car.safety.equals(\)) s = 0; elseif (car.safety.equals(\)) s= 1; elses = 2;

intt = 0;// 记录最大概率的下标 inti;

for (i = 0; i

itemGl = 0;

BigDecimal[] bigDecimal = {

new BigDecimal(Float.toString(ClassValue_gl[i])), new BigDecimal(Float.toString(buy_Vlaue_gl[b][i])), new BigDecimal(Float.toString(maint_Value_gl[m][i])), new BigDecimal(Float.toString(door_Value_gl[d][i])), new BigDecimal(Float.toString(person_Value_gl[p][i])), new BigDecimal(Float.toString(lugboot_Value_gl[l][i])), newBigDecimal(Float.toString(safe_Value_gl[s][i])), };

for (intj = 1; j

bigDecimal[0] = bigDecimal[0].multiply(bigDecimal[j]);//multiply乘 itemGl = bigDecimal[0].floatValue(); car.PredictResult[i] = itemGl + \; if (MaxGl

// 判断结果是否正确

if (car.ClassValues.equals(ClassValueName[t])) {// 预测结果和开始给定的结果相等

car.PredictResult[i] = \; predictSucess++; } else

car.PredictResult[i] = \; }

publicvoid show() {

for (inti =0; i

for (intj = 0; j

// 分类器的准确率

floatt = (float) predictSucess / predictTotal; t=t*10000/100;

System.out.println(\分类器的准确率为:\ + t+ \); }

}

四、思考题

1.实验A中的分类器的优缺点。 可能存在0概率问题

存在准确度问题,朴素贝叶斯分类器是基于样本属性条件独立的假设的前提下的,但是实际情况可能并不成立,这样也就缺失准确性了.

解决朴素贝叶斯准确性问题提出的一种方法叫做:贝叶斯网络(Bayesian Belief Networks ) 2.评价最小错误概率贝叶斯分类器和最小风险概率贝叶斯分类器

基于最小错误率的贝叶斯决策 实质:通过观察x把状态的先验概率P(wi)转化为后验概率 判别错误率的问题 基于最小风险的贝叶斯决策考虑到各种错误照成的损失不同而提出的一种决策规则 最小风险的贝叶斯决策的计算方法: 1)根据贝叶斯公式,计算出后验概率 2)利用后验概率和决策表,计算出条件风险

3)比较2中的计算结果,找出使条件风险最小的决策Ak,则它就是最小风险的贝叶斯决策 两者之间的关系:基于最小错误率的决策是基于最小风险决策的一个特例

3.计算实验B中叶斯分类器和最小风险概率贝叶斯分类器的分类临界值[x1 x2],比较差别,并统计两种正确率。(同上)

4. 提出一种提高分类器性能的方法并通过实验验证。 Adaboost:基于错误提升分类器的性能

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器,比起弱分类器,这个“强”分类器的错误率会低很多。

Adaboost算法本身是改变数据分布实现的,它根据每次训练集之中的每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改权值的新数据送给下层分类器进行训练,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。以下给出 Adaboost算法的运行过程:

1. 训练数据中的每个样本,并赋予其一个权重,这些权重构成向量D,一开始时权重D初始化为

相等的值;

2. 先在训练样本上训练得到第一个弱分类器并计算分类器的错误率 ;

3. 在同一数据集上再次训练弱分类器,在分类器的二次训练中,会重新调整每个样本的权重,其

中第一次分类正确的样本的权重将会降低,而分类错误的样本权重将会提高 ;

4. 为了从所有弱分类器中得到最终的分类结果,Adaboost为每个分类器都分配了一个权重值

alpha,这一组值是基于每个弱分类器的错误率进行计算的。 其中,错误率由以下公式定义:


贝叶斯实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:TVB 当年的恋人大全 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: