「java贝叶斯算法」java 贝叶斯
本篇文章给大家谈谈java贝叶斯算法,以及java 贝叶斯对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
贝叶斯网络算法Java实现
public static void main(String[] args){
int n=10;//定义n
int[] π={};//定义存放π的数组
for(int i=0;i++;in){
π[i]=Ф;
int Pold=g(i,π[i]);//调用g方法
boolean OkToProceed=true;//定义布尔值
while(OkToProceed Math.abs(π[i])u){
//写不下去了。。。好多都不知道是什么方法
}
}
}
贝叶斯算法是什么?
贝叶斯算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就衍生出许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。
贝叶斯算法的主要步骤:
1、收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。
2、提取邮件主题和邮件体中的独立字符串,例如ABC32,¥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。
3、每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。
贝叶斯分类算法的基本步骤
主要有以下7个步骤:
1. 收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。
2. 提取邮件主题和邮件体中的独立字符串,例如 ABC32,¥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。
3. 每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。
4. 计算每个哈希表中TOKEN串出现的概率P=(某TOKEN串的字频)/(对应哈希表的长度)。
5. 综合考虑hashtable_good和hashtable_bad,推断出当新来的邮件中出现某个TOKEN串时,该新邮件为垃圾邮件的概率。数学表达式为:
A 事件 ---- 邮件为垃圾邮件;
t1,t2 …….tn 代表 TOKEN 串
则 P ( A|ti )表示在邮件中出现 TOKEN 串 ti 时,该邮件为垃圾邮件的概率。
设
P1 ( ti ) = ( ti 在 hashtable_good 中的值)
P2 ( ti ) = ( ti 在 hashtable_ bad 中的值)
则 P ( A|ti ) =P2 ( ti ) /[ ( P1 ( ti ) +P2 ( ti ) ] ;
6. 建立新的哈希表hashtable_probability存储TOKEN串ti到P(A|ti)的映射
7. 至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。
当新到一封邮件时,按照步骤2,生成TOKEN串。查询hashtable_probability得到该TOKEN 串的键值。
假设由该邮件共得到N个TOKEN 串,t1,t2…….tn,hashtable_probability中对应的值为 P1 , P2 , ……PN , P(A|t1 ,t2, t3……tn) 表示在邮件中同时出现多个TOKEN串t1,t2……tn时,该邮件为垃圾邮件的概率。
由复合概率公式可得
P(A|t1 ,t2, t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]
当 P(A|t1 ,t2, t3……tn) 超过预定阈值时,就可以判断邮件为垃圾邮件。
数据挖掘-朴素贝叶斯算法
朴素贝叶斯算法,主要用于对相互独立的属性的类变量的分类预测。(各个属性/特征之间完全没有关系,叫做相互独立,事实上这很难存在,但是这个方法依然比较有效。)
大学的概率论里一般都学过这个贝叶斯定理,简单阐述如下:
若事件 , ,…构成一个事件且都有正概率,则对任意一个事件Y,有如下公式成立:则有
如果X表示特征/属性,Y表示类变量,如果类变量和属性之间的关系不确定,那么X和Y可以视作随机变量,则 为Y的后验概率, 为Y的先验概率。
以图为例:
我们需要根据身高、体重、鞋码判断是男是女,则Y就是性别,X就是(身高、体重、鞋码)这一组特征。如果我们要先算是男的概率,则先验概率就是 ,而后验概率则是我们未来将要输入的一组特征已知的情况下,Y=男的概率(要预测的分类的概率),这样的话,根据贝叶斯定理,我们就可以用 来求出 ,这就是贝叶斯定理在预测中的应用。
假设Y变量取y值时概率为P(Y=y),X中的各个特征相互独立,则有公式如下:
其中每个特征集X包含d个特征。
根据公式,对比上面的图来说,如果性别是男的时候,身高是高,体重是重,鞋码为大的概率就等于
有了这个公式,结合之前的贝叶斯公式,就能得到给定一组特征值的情况下, 这组特征属于什么样的类别的概率公式:
其中的X代表一组特征, 代表一组中的一个。
对于所有的Y来说,P(X)时固定的,因此只要找出使分子 最大的类别就可以判断预测的类别了。
的概率分为两种情况来区别,一种是对分类特征的概率确定,一种是连续特征的概率确定。
接下来借用《数据挖掘导论》上的例子来说明概率确定的方式。
对于分类的特征,可以首先找到训练集中为y值的个数,然后根据不同的特征类型占这些个数中的比例作为分类特征的概率。
例如上表中求不拖欠贷款的情况下,有房的人数就是 ,不拖欠贷款的有7个,其中有房的是3个。以此类推可以求出婚姻状况的条件概率。
年收入是连续特征,需要区分对待。
根据上述算法,如果要求没有拖欠贷款情况下,年收入是120K的概率,就是
如果要预测测试记录 X =(有房=否,婚姻状况=已婚,年收入=120K)这个样本是否可能拖欠贷款,则需要计算两个概率: 和
则有:
由于 是不变的(对于Y=是和Y=否),则只考虑上面的分子即可,那么抛开P(X)不看,则有:
其中7/10就是P(Y=否),α是P(X)
同理可得P(Y=是|X) = 1 * 0 * 1.2e-1 = 0.
这样一比较,那么分类就是否。
看这个例子中,如果有一个特征的条件概率是0,那么整体的概率就是0,从而后验概率也一定是0,那么如果训练集样本太少,这种方法就不是很准确了。
如果当训练集样本个数比特征还少的时候,就无法分类某些测试集了,因此引入 m估计(m-estimate) 来估计条件概率,公式如下:
其中,n是类 中的样本总数, 是类 中取 的样本数, 是称为等价样本大小的参数, 是用户指定的参数,p可以看作在类 中观察特征值 的先验概率。等价样本大小决定先验概率 和观测概率 之间的平衡。
引入m估计的根本原因是样本数量过小。所以为了避免此问题,最好的方法是等效的扩大样本的数量,即在为观察样本添加m个等效的样本,所以要在该类别中增加的等效的类别的数量就是等效样本数m乘以先验估计p。
在之前的例子中,设m=3,p=1/3(m可以设置为特征数量,p则是倒数)。则:
从而可以重新计算 。从而解决了某个条件概率为0的问题。
面对相互独立的特征比较适用,如果有相关的特征,则会降低其性能。
java贝叶斯算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 贝叶斯、java贝叶斯算法的信息别忘了在本站进行查找喔。
发布于:2022-12-25,除非注明,否则均为
原创文章,转载请注明出处。