生物信息学课程设计 贝叶斯算法编程实现_第1页
生物信息学课程设计 贝叶斯算法编程实现_第2页
生物信息学课程设计 贝叶斯算法编程实现_第3页
生物信息学课程设计 贝叶斯算法编程实现_第4页
生物信息学课程设计 贝叶斯算法编程实现_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、算法课程设计报告(算法编程实现类)贝叶斯算法编程实现院 系 部 门: 重庆邮电大学学 生 学 号:*学 生 姓 名:*指 导 教 师:*生物信息学院制2013年5月第一部分 贝叶斯算法研究背景、特点与发展31.1 贝叶斯算法研究背景31.2 贝叶斯算法特点31.3 贝叶斯算法发展3第二部分 算法分析与程序流程图设计32.1、基于对问题的分析42.2、基于对问题的java算法分析42.2、程序流程图设计5第三部分 实现设计语言选择与算法编程实现53.1、java算法实现5第四部分 程序测试与结果分析104.1程序测试104.2结果分析11第五部分 总结与心得体会115.1总结与心得体会11第六部

2、分 参考文献126.1参考文献(2个)12第一部分 贝叶斯算法研究背景、特点与发展1.1 贝叶斯算法研究背景贝叶斯分类算法是统计学分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,且方法简单、分类准确率高、速度快。由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就出现了许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。1.2 贝叶斯算法特点和决

3、策树模型相比,朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以 及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。在属 性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。1.3贝叶斯算法发展贝叶斯分类理论有最初的朴素贝叶斯于EM算法,灰色关系继续发展为基于改进EM的朴素贝叶斯分类理

4、论。第二部分 算法分析与程序流程图设计2.1、基于对问题的分析对问题进行分析,设X是类标号未知的数据样本,设H为某种假的,如数据养本X属于某特定的类C。对与分类问题,希望确定P(H|X),即给定观测数据样本X,假定H成立的概率。贝叶斯定理给出了如下计算P(H|X)的简单有效的方法:P(H|X)=P(X|H)P(H)/P(X)其中P(H)称为先验概率,P(X|H)表示假设H成立时观查到X的概率。P(H|X)表示后验概率。每一个样本数据用一个n维特征向量X=x1,x2,x3,xn表示,分别描述具有n个属性A1,A1,An的样本的n个度量。假定有m个类C1,C2,Cm,给定一个未知数据样本X(即没有

5、类编号),分类器将预测X属性与最高后验概率的类。也就是说,朴素贝叶斯分类将未知样本分配给Ci(1<=i<=m),当且仅当P(Ci|X)>P(Cj|X),j=1,2,m,j不等于i这样最大的P(Ci|X)对应的类Ci称为最大后验假定。由于P(X)对于所有类是常数,只需要P(X|Ci)P(Ci)最大即可。注意假设不是等概率的,那么类的先验概率可以用P(Ci)=si/s计算,其中si是类Ci的训练样本数,而s是训练样本总数。P(X|Ci)=2.2、基于对问题的java算法分析首先需要将所有的训练数据读入到ArrayList<ArrayList<String>>

6、;对象集合中去,其中每一条训练数据对应一个ArrayList<String>对象集合。同理用readTestData()将测试元组读如ArrayList<String>对象集合中去。下面就需要将ArrayList<ArrayList<String>>中的每一组训练元组按照类别属性分开,保存到Map<String, ArrayList<ArrayList<String>>>对象中去用三重for循环来计算测试元组中每一属性所在每一个类别中概率的之积,并返回最大积所对应的类别名称。2.2、程序流程图设计第三部分 实现

7、设计语言选择与算法编程实现3.1、java算法实现package org.decimalcalculate;import java.math.BigDecimal;publicclass DecimalCalculate privatestaticfinalintDEF_DIV_SCALE = 10;/ 这个类不能实例化private DecimalCalculate() publicstaticdouble add(double v1, double v2) BigDecimal b1 = new BigDecimal(Double.toString(v1);BigDecimal b2 =

8、new BigDecimal(Double.toString(v2);return b1.add(b2).doubleValue();publicstaticdouble sub(double v1, double v2) BigDecimal b1 = new BigDecimal(Double.toString(v1);BigDecimal b2 = new BigDecimal(Double.toString(v2);return b1.subtract(b2).doubleValue();publicstaticdouble mul(double v1, double v2) BigD

9、ecimal b1 = new BigDecimal(Double.toString(v1);BigDecimal b2 = new BigDecimal(Double.toString(v2);return b1.multiply(b2).doubleValue();publicstaticdouble div(double v1, double v2) returndiv(v1, v2, DEF_DIV_SCALE);publicstaticdouble div(double v1, double v2, intscale) if (scale < 0) thrownew Illeg

10、alArgumentException("The scale must be a positive integer or zero");BigDecimal b1 = new BigDecimal(Double.toString(v1);BigDecimal b2 = new BigDecimal(Double.toString(v2);return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();publicstaticdouble round(double v, int scale) if (sc

11、ale < 0) thrownew IllegalArgumentException("The scale must be a positive integer or zero");BigDecimal b = new BigDecimal(Double.toString(v);BigDecimal one = new BigDecimal("1");return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();publicstaticfloat convertsToFloa

12、t(double v) BigDecimal b = new BigDecimal(v);return b.floatValue();publicstaticint convertsToInt(double v) BigDecimal b = new BigDecimal(v);return Value();publicstaticlong convertsToLong(double v) BigDecimal b = new BigDecimal(v);return b.longValue();publicstaticdouble returnMax(double v1, doub

13、le v2) BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.max(b2).doubleValue();publicstaticdouble returnMin(double v1, double v2) BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.min(b2).doubleValue();publicstaticint compareTo(double v1, d

14、ouble v2) BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return pareTo(b2);package org.decimalcalculate;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.StringTokenizer;import org.bayes.*;publ

15、ic class TestBayes public ArrayList<String> readTestData() throws IOException ArrayList<String> candAttr = new ArrayList<String>();BufferedReader reader = new BufferedReader(new InputStreamReader(System.in);String str = ""while (!(str = reader.readLine().equals("&quo

16、t;) StringTokenizer tokenizer = new StringTokenizer(str);while (tokenizer.hasMoreTokens() candAttr.add(tokenizer.nextToken();return candAttr;public ArrayList<ArrayList<String>> readTupleData() throws IOException ArrayList<ArrayList<String>> datas = new ArrayList<ArrayList&

17、lt;String>>();BufferedReader reader = new BufferedReader(new InputStreamReader(System.in);String str = ""while (!(str = reader.readLine().equals("") StringTokenizer tokenizer = new StringTokenizer(str);ArrayList<String> s = new ArrayList<String>();while (tokeniz

18、er.hasMoreTokens() s.add(tokenizer.nextToken();datas.add(s);return datas;public static void main(String args) TestBayes tb = new TestBayes();ArrayList<ArrayList<String>> datas = null;ArrayList<String> testT = null;Bayes bayes = new Bayes();try System.out.println("请输入训练数据集:&quo

19、t;);datas = tb.readTupleData();while (true) System.out.println("请输入测试元组:");testT = tb.readTestData();String c = bayes.calculateProbabilityOfClass(datas, testT);System.out.println("The class is: " + c); catch (IOException e) e.printStackTrace();package org.bayes;import java.util.A

20、rrayList;import java.util.HashMap;import java.util.Map;import org.decimalcalculate.*;public class Bayes Map<String, ArrayList<ArrayList<String>>> accordingDateOfClassToSort(ArrayList<ArrayList<String>> datas) Map<String, ArrayList<ArrayList<String>>> m

21、ap = new HashMap<String, ArrayList<ArrayList<String>>>();ArrayList<String> t = null;String c = "";for (int i = 0; i < datas.size(); i+) t = datas.get(i);c = t.get(t.size() - 1);if (map.containsKey(c) map.get(c).add(t); else ArrayList<ArrayList<String>>

22、; nt = new ArrayList<ArrayList<String>>();nt.add(t);map.put(c, nt);return map;public String calculateProbabilityOfClass(ArrayList<ArrayList<String>> datas, ArrayList<String> testT) Map<String, ArrayList<ArrayList<String>>> doc = this.accordingDateOfClassToSort(datas);Object classes = doc.keySet().toArray();double maxP = 0.00;int maxPIndex = -1;for (int i = 0; i < doc.size(); i+) String c = classesi.toString();ArrayList<ArrayList<String>> d = doc.get(c);double pOfC = DecimalCalculate.div(d.size(), datas.size(), 3);f

温馨提示

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

评论

0/150

提交评论