朴素贝叶斯原理及实现
来源:互联网 发布:米惠淘宝返利网 编辑:程序博客网 时间:2024/06/10 03:05
一、理论基础
(一)朴素贝叶斯定理
简单的说:一个样本属于某个类别的概率是:这个类别出现的概率 * 已知这个类别出现的情况下各个属性出现的概率的乘积
根据贝叶斯定理,事件X发生时,类别Ci发生的后验概率为:
而P(X)对于所有的CI都是相等的,且假设X的各个属性之间是独立的(朴素假设),则可得:
即符合X特征变量的类别Ci的后验概率可由上述公式计算出来,然后比较各个Ci的大小,最大的那个类别即最有可能发生的。
(二)示例 1、训练数据
2、需要预测的数据为
X={age=youth,income=medium,student=yes,credit_rating}
计算此用户购买computer的可能性。
3、计算为YES的概念
(1)购买用户的总概率。从表中可见14人中有9个购买了电脑,因此概率为:
(2)在购买用户的9人中符合X特征中的age=youth的有2人,比例为:
(3)在购买用户的9人中符合X特征中的income=medium的有4人,比例为:
(4)在购买用户的9人中符合X特征中的student=yes的有6人,比例为
(5)在购买用户的9人中符合X特征中的credit_rating的有6人,比例为
根据朴素贝叶斯定理,
其中:
P(X)对所有分类都相等
符合X={age=youth,income=medium,student=yes,credit_rating}的情况下,Ci={buys_computer=yes}的后验熬概率为:
3、使用同样的方法,可以计算出符 合X的情况下,Cj=(buys_computer=no)的后验概率为:
4、结论:由上面的计算结果可知,朴素贝叶斯分类预测元组X的类为buy_computer=yes。
(三)三种常见的模型
1、伯努利模型
与多项式模型一样,伯努利模型适用于离散特征的情况,所不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0).
伯努利模型中,条件概率P(xi|yk)的计算方式是:
当特征值xi为1时,P(xi|yk)=P(xi=1|yk);
当特征值xi为0时,P(xi|yk)=1−P(xi=1|yk);
2、多项式模型
当特征是离散的时候,使用多项式模型。多项式模型在计算先验概率P(yk)和条件概率P(xi|yk)时,会做一些平滑处理,具体公式为:
P(yk)=Nyk+αN+kα
N是总的样本个数,k是总的类别个数,Nyk是类别为yk的样本个数,α是平滑值。
P(xi|yk)=Nyk,xi+αNyk+nα
Nyk是类别为yk的样本个数,n是特征的维数,Nyk,xi是类别为yk的样本中,第i维特征的值是xi的样本个数,α是平滑值。
当α=1时,称作Laplace平滑,当0<α<1时,称作Lidstone平滑,α=0时不做平滑。
如果不做平滑,当某一维特征的值xi没在训练样本中出现过时,会导致P(xi|yk)=0,从而导致后验概率为0。加上平滑就可以克服这个问题。
3、高斯模型
当特征是连续变量的时候,运用多项式模型就会导致很多P(xi|yk)=0(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。
下面是一组人类身体特征的统计资料。
性别
身高(英尺)
体重(磅)
脚掌(英寸)
男
6
180
12
男
5.92
190
11
男
5.58
170
12
男
5.92
165
10
女
5
100
6
女
5.5
150
8
女
5.42
130
7
女
5.75
150
9
已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?
根据朴素贝叶斯分类器,计算下面这个式子的值。
P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)
这里的困难在于,由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办?
这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。有了密度函数,就可以把值代入,算出某一点的密度函数的值。
比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。
对于脚掌和体重同样可以计算其均值与方差。有了这些数据以后,就可以计算性别的分类了。
P(身高=6|男) x P(体重=130|男) x P(脚掌=8|男) x P(男)
= 6.1984 x e-9 P(身高=6|女) x P(体重=130|女) x P(脚掌=8|女) x P(女)
= 5.3778 x e-4
1
2
3
4
1
2
3
4
可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。
- 总结
高斯模型假设每一维特征都服从高斯分布(正态分布):
P(xi|yk)=12πσ2yk,i√e−(xi−μyk,i)22σ2yk,i
μyk,i表示类别为yk的样本中,第i维特征的均值。
σ2yk,i表示类别为yk的样本中,第i维特征的方差。
4、简单总结
(1)多项式模型:适用于属性值为有限的多个数值的情况,如收入分为高中低三个层次。
(2)高斯模型:适用于属性值为连续的情况,如收入的具体数值,观看某个电视剧的次数等。当然也可以将这些值划分到一定的区间,然后使用多项式模型,但这样就没这么精确了。
(3)伯努利模型:适用于属性值只是2个的情况。如性别作为标签,值只是男和女。其实这只是一种特殊的二项式。
(4)如果一个训练集数据足够多且是高斯分布的话;利用多项式分布进行训练的话,训练出的模型会逼近高斯分布。也就是说数据量大大多于属性值的数量时,完全可以用多项式模型代替高斯模型。这是spark mllib目前未实现高斯分布的一个原因。另一个可能的原因是数据分布在各个节点,无法算方差,最终还是要落在一个节点上进行计算。
二、spark实现
(一)二项式及多项式模型1、训练数据
说明:
(1)朴素贝叶斯要求各个属性间是独立的,但事实上这些数据的属性是不独立的,比如年龄和是否学生就不是独立的属性。这里只是作为一个示例
(2)上述属性中,是否学生符合伯努利模型,其余3个属性均符合二项式模型。
三、spark mllib API使用
阅读全文
0 0
- 朴素贝叶斯原理及实现
- 朴素贝叶斯算法原理及Scala实现
- 朴素贝叶斯原理及Python实现
- 朴素贝叶斯原理及python实现
- 朴素贝叶斯分类和预测算法的原理及实现
- 朴素贝叶斯分类原理及Python实现简单文本分类
- SPARK朴素贝叶斯实现原理
- 朴素贝叶斯的原理和实现
- 写程序学ML:朴素贝叶斯算法原理及实现(一)
- 写程序学ML:朴素贝叶斯算法原理及实现(二)
- 写程序学ML:朴素贝叶斯算法原理及实现(三)
- 朴素贝叶斯算法分析及java 实现
- 朴素贝叶斯分类器及Python实现
- 朴素贝叶斯分类原理
- 朴素贝叶斯原理
- 朴素贝叶斯原理
- 【朴素贝叶斯分类】原理及python程序示例
- 朴素贝叶斯分类器原理与java实现
- [LintCode]strStr(C++)
- uva 400 Unix ls 127页
- stl容器
- HashMap重要知识点总结
- [LintCode]Anagrams(Python)
- 朴素贝叶斯原理及实现
- 关于一个图中是否存在负环
- python-pandas的基本用法03
- uva 136 120页
- JS利用apply方法,将数组直接当做参数传给函数
- Linux 磁盘加密
- 练习2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。
- Curling 2.0
- uva 540 117 页