首页 > 编程 > Python > 正文

Python实现朴素贝叶斯分类器的方法详解

2020-02-15 22:12:46
字体:
来源:转载
供稿:网友

本文实例讲述了Python实现朴素贝叶斯分类器的方法。分享给大家供大家参考,具体如下:

贝叶斯定理

贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位。

先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据样本分布和未知参数的先验概率分布求得的条件概率分布。

贝叶斯公式:

P(A∩B) = P(A)*P(B|A) = P(B)*P(A|B)

变形得:

P(A|B)=P(B|A)*P(A)/P(B)

其中

P(A)是A的先验概率或边缘概率,称作"先验"是因为它不考虑B因素。 P(A|B)是已知B发生后A的条件概率,也称作A的后验概率。 P(B|A)是已知A发生后B的条件概率,也称作B的后验概率,这里称作似然度。 P(B)是B的先验概率或边缘概率,这里称作标准化常量。 P(B|A)/P(B)称作标准似然度。

朴素贝叶斯分类(Naive Bayes)

朴素贝叶斯分类器在估计类条件概率时假设属性之间条件独立。

首先定义

x = {a1,a2,...}为一个样本向量,a为一个特征属性 div = {d1 = [l1,u1],...} 特征属性的一个划分 class = {y1,y2,...}样本所属的类别

算法流程:

(1) 通过样本集中类别的分布,对每个类别计算先验概率p(y[i])

(2) 计算每个类别下每个特征属性划分的频率p(a[j] in d[k] | y[i])

(3) 计算每个样本的p(x|y[i])

p(x|y[i]) = p(a[1] in d | y[i]) * p(a[2] in d | y[i]) * ...

样本的所有特征属性已知,所以特征属性所属的区间d已知。

可以通过(2)确定p(a[k] in d | y[i])的值,从而求得p(x|y[i])

(4) 由贝叶斯定理得:

p(y[i]|x) = ( p(x|y[i]) * p(y[i]) ) / p(x)

因为分母相同,只需计算分子。

p(y[i]|x)是观测样本属于分类y[i]的概率,找出最大概率对应的分类作为分类结果。

示例:

导入数据集

{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}{a1 = 0, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}{a1 = 1, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}{a1 = 1, a2 = 0, C = 0} {a1 = 0, a2 = 0, C = 1}{a1 = 1, a2 = 0, C = 0} {a1 = 1, a2 = 0, C = 1}{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 0, C = 1}{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}{a1 = 1, a2 = 1, C = 0} {a1 = 1, a2 = 1, C = 1}

计算类别的先验概率

P(C = 0) = 0.5P(C = 1) = 0.5

计算每个特征属性条件概率:

P(a1 = 0 | C = 0) = 0.3P(a1 = 1 | C = 0) = 0.7P(a2 = 0 | C = 0) = 0.4P(a2 = 1 | C = 0) = 0.6P(a1 = 0 | C = 1) = 0.5P(a1 = 1 | C = 1) = 0.5P(a2 = 0 | C = 1) = 0.7P(a2 = 1 | C = 1) = 0.3            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表