1、生物信息学课程设计(算法编程实现类)重庆邮电大学 生物信息学院题目:贝叶斯算法java编程实现姓名:*班级:*学号:2010212532指导教师:*完成时间:2013.5.25贝叶斯分类简介贝叶斯分类原理贝叶斯应用实例基于问题分析与流程图设计算法设计算法测试总结贝叶斯分类简介贝叶斯分类算法是统计学分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Nave Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,且方法简单、分类准确率高、速度快。由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会
2、下降。为此,就出现了许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。Thomas Bayes(1702-1763),托马斯贝叶斯是一位英国牧师数学家,1742年成为英国皇家学会会员1763年4月7日逝世,1763年,他发表了贝叶斯统计理论,即根据已经发生的事件来预测事件发生的可能性,贝叶斯理论假设:如果事件的结果不确定,那么量化它的唯一方法就是事件的发生概率。如果过去试验中事件的出现率已知,那么根据数学方法可以计算出未来试验中事件出现的概率。贝叶斯分类的原理设X是类标号未知的数据样本,设H为某种假设,如数据养本X属于某特定的类C。对
3、与分类问题,希望确定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)表示后验概率。贝叶斯应用实例条件属性条件属性决策属性决策属性序号天气状态气温温度风类别1SunnyHotHigthWeakN2SunnyHotHigthStrongN3OvercaseHotHigthWeakP4RainMildHightWeakP5RainCoolNormalWeakP6RainCoolNormalStrongN7Overca
4、seCoolNormalStrongP8OvercaseCoolNormalStrongP9SunnyMildHigthStrongP气候训练集未知测试样本:X=Sunny,Hot,Hight,Weak,要比较属于两个类N,P的概率大小先求类别为N的概率P(N|X)P(N|X)=.=0.0247再求类别为P的概率P(Y|X)P(Y|X)=.=0.007039显然P(N|X)P(Y|X)根据后验概率最大原则,X属于N类基于问题分析与流程图设计基于问题分析代码设计:首先需要将所有的训练数据读入到ArrayListArrayList对象集合中去,其中每一条训练数据对应一个ArrayList对象集合。
5、同理用readTestData()将测试元组读如ArrayList对象集合中去。下面就需要将ArrayListArrayList中的每一组训练元组按照类别属性分开,保存到MapString,ArrayListArrayList对象中去用三重for循环来计算测试元组中每一属性所在每一个类别中概率的之积,并返回最大积所对应的类别名称。TestBayes类main(String args)readTupleData()readTestData()Bayes类accordingDateOfClassToSort()calculateProbabilityOfClass()pOfV()DecimalCa
6、lculate类mul(double v1,double v2)div(double v1,double v2,int scale)将训练元组读入到ArrayListArrayList将测试元组读入到ArrayList调用本类方法调用DecimalCalculate类浮点运算算法测试输入测试训练元组:youth high no fair noyouth high no excellent nomiddle_aged high no fair yessenior medium no fair yessenior low yes fair yessenior low yes excellent n
7、omiddle_aged low yes excellent yesyouth medium no fair noyouth low yes fair yessenior medium yes fair yesyouth medium yes excellent yesmiddle_aged medium no excellent yesmiddle_aged high yes fair yessenior medium no excellent no测试元组测试结果总结该算法是使用java语言编写的贝叶斯朴素算法,通过对象集合保存数据再通过三重for循环实现的简单朴素贝叶斯算法,该算法只是适应于一般的属性之间数独立的情况。不足之处在于没有进行输入验证,如果输入非法字符就会产生异常使程序死掉,所以在输入时验证就更加完美了谢 谢