朴素贝叶斯原理及实现

xiaoxiao2021-02-28  142

一、理论基础 (一) 朴素贝叶斯定理

简单的说:一个样本属于某个类别的概率是:这个类别出现的概率 * 已知这个类别出现的情况下各个属性出现的概率的乘积

根据贝叶斯定理,事件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 ( x i | y k ) 的计算方式是: 当特征值 x i 为1时, P ( x i | y k ) = P ( x i = 1 | y k ) 当特征值 x i 为0时, P ( x i | y k ) = 1 P ( x i = 1 | y k )

2、多项式模型

当特征是离散的时候,使用多项式模型。多项式模型在计算先验概率 P ( y k ) 和条件概率 P ( x i | y k ) 时,会做一些 平滑处理 ,具体公式为: P ( y k ) = N y k + α N + k α N是总的样本个数,k是总的类别个数, N y k 是类别为 y k 的样本个数, α 是平滑值。 P ( x i | y k ) = N y k , x i + α N y k + n α N y k 是类别为 y k 的样本个数,n是特征的维数, N y k , x i 是类别为 y k 的样本中,第i维特征的值是 x i 的样本个数, α 是平滑值。 α = 1 时,称作Laplace平滑,当 0 < α < 1 时,称作Lidstone平滑, α = 0 时不做平滑。 如果不做平滑,当某一维特征的值 x i 没在训练样本中出现过时,会导致 P ( x i | y k ) = 0 ,从而导致后验概率为0。加上平滑就可以克服这个问题。

3、高斯模型

当特征是连续变量的时候,运用多项式模型就会导致很多 P ( x i | y k ) = 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 ( x i | y k ) = 1 2 π σ 2 y k , i e ( x i μ y k , i ) 2 2 σ 2 y k , i μ y k , i 表示类别为 y k 的样本中,第i维特征的均值。 σ 2 y k , i 表示类别为 y k 的样本中,第i维特征的方差。 4、简单总结 (1)多项式模型:适用于属性值为有限的多个数值的情况,如收入分为高中低三个层次。 (2)高斯模型:适用于属性值为连续的情况,如收入的具体数值,观看某个电视剧的次数等。当然也可以将这些值划分到一定的区间,然后使用多项式模型,但这样就没这么精确了。 (3)伯努利模型:适用于属性值只是2个的情况。如性别作为标签,值只是男和女。其实这只是一种特殊的二项式。 (4)如果一个训练集数据足够多且是高斯分布的话;利用多项式分布进行训练的话,训练出的模型会逼近高斯分布。也就是说数据量大大多于属性值的数量时,完全可以用多项式模型代替高斯模型。这是spark mllib目前未实现高斯分布的一个原因。另一个可能的原因是数据分布在各个节点,无法算方差,最终还是要落在一个节点上进行计算。 二、spark实现 (一)二项式及多项式模型 1、训练数据 说明: (1)朴素贝叶斯要求各个属性间是独立的,但事实上这些数据的属性是不独立的,比如年龄和是否学生就不是独立的属性。这里只是作为一个示例 (2)上述属性中,是否学生符合伯努利模型,其余3个属性均符合二项式模型。 三、spark mllib API使用
转载请注明原文地址: https://www.6miu.com/read-35593.html

最新回复(0)