朴素贝叶斯分类工作原理
数学基础
1.条件概率
设A,B 是两个事件,则
表示在事件A发生的条件下,事件B发生的概率。其中P(A)不能为0,就是要求A是有可能的事件。
2. 联合概率
表示两个事件共同发生的概率。A与B的联合概率表示为 P(AB) 或者P(A,B),或者P(A∩B)。
3. 朴素贝叶斯
因为 P(B|A)=P(AB)/P(A) 》P(AB)=P(B|A)P(A)
所以 P(A|B)=P(AB)/P(B) = P(B|A)P(A)/P(B)
即 P(A|B)=P(B|A)P(A)/P(B)
它的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
例子
一个学生有点发烧(B事件发生),感冒是A1事件,流感是A2事件,肿瘤是A3事件
欲求 发烧的学生属于感冒的概率为P(A1|B)=?
已知 该医院全部患者属于感冒的独立概率为P(A1),属于流感为P(A2),属于肿瘤为P(A3)
P(A1)=0.6,P(A2)=0.2,P(A3)=0.1
已知感冒患者中发烧的概率为90%,即P(B|A1)=0.9
流感患者中发烧的概率为80%,即P(B|A2)=0.8
肿瘤患者中发烧的概率为60%,即P(B|A2)=0.6
发烧是由于感冒的概率:P(A1|B)=P(B|A1)P(A1)/P(B)=0.9*0.6/P(B)
发烧是由于流感的概率:P(A2|B)=P(B|A2)P(A2)/P(B)=0.8*0.2/P(B)
发烧是由于肿瘤的概率:P(A3|B)=P(B|A2)P(A3)/P(B)=0.6*0.1/P(B)
4. 连续贝叶斯
连续朴素贝叶斯分类的定义如下:
1、设X={a1,a2,…am}为一个待分类项目,而每个a为X的一个特征属性值。我们可以把X理解为一个新的病人,我们已经采集到了他的身高,职业,年龄等各种互不相关的临床参数。
2、有分类集合C={y1,y2,…,yn},这个分类集合可以看成病人需要诊断的临床结局,比如可以假定y1=感冒,y2=脑震荡
3、计算先验概率:P(y1|x),P(y2|x),…,P(yn|x).也就是各种结局在该病人身上的发生概率。也就是条件概率
如果P(yk|x)=max{P(y1|x),P(y2|x),…,P(yn|x)},则x∈yk.
要计算第三步的条件概率,可以通过建立一些已经知道分类情况的样本来形成训练样本集。然后根据公式
来计算条件概率。在这个公式里面P(x)对于所有类别都是常数,所以我们只计算分子即可。又因为各特征属性是条件独立的。所以有:
也就是说,只需要把特定临床结局下各症状的概率用连乘乘起来,再乘以该特定临床结局的先验分布,就可以获得在特定一系列症状下该临床结局的概率。
5.正态分布密度函数
高斯分布(Gaussian Distribution)的概率密度函数(probability density function)
正态分布的期望值 决定了其位置,其标准差 决定了分布的幅度
Python代码为:
```python
#samples为样本,numpy数组
#求均值
mean = numpy.mean(samples)
#求一个数组的标准差
std= numpy.std(samples)
#求概率,其中x可以是一个数,或者一个numpy数组
y = numpy.exp(-(x - mean) ** 2 / (2 * std** 2)) / (math.sqrt(2 * math.pi) * std)

判断男的女的的过程是一个分类的过程,根据以往的经验,通常从身高、体重、鞋码、头发长短、服饰、声音等角度去判断,“经验”就是一个训练好了的关于性别判断的模型,数据就是日常中遇到的各式各样的人,以及这些人实际的性别数据
## 离散数据案例
遇到的数据分为两种,一种是离散的,一种是连续的,离散就是不连续的意思,有明确的边界,比如整数1,2,3就是离散的,而1到3中间的任何数,就是连续数据,可以取这个区间里任何数值
下面数据为例子,根据之前的经验数据,给一个新的数据:身高“高”,体重“中”,鞋码“中”判断男女

先确定一共有3个属性,用A代表属性,用A1,A2,A3分别为身高=高,体重=中,鞋码=中,一共有两个类别,用C表示,C1 、C2为男女,在未知情况下用Cj表示,求在A1,A2,A3的属性下,Cj的概率,用条件概率表示就是P(Cj|A1A2A3),因为一共有2个类别,只需要求得P(C1|A1A2A3)和P(C2|A1A2A3)的概率即可,然后比较哪个分类的可能性大,就是哪个分类

因为P(A1A2A3)是固定的,要寻找使得P(Cj|A1A2A3)的最大值就等价于求P(A1A2A3|Cj)P(Cj)的最大值,假定Ai之间是相互独立的,那么:P(A1A2A3|Cj) = P(A1|Cj)P(A2|Cj)P(A3|Cj) ,需要从Ai和Cj中计算出P(Ai|Cj)的概率,带入公式得P(A1A2A3|Cj),最后找到P(A1A2A3|Cj)最大的类别Cj
P(A1A2A3|C1)P(C1) > P(A1A2A3|C2)P(C2) 所以是C1类别,是男性
## 连续数据案例
实际生活中得到的是连续数值,比如

**给你一个新数据,身高180、体重120、鞋码41,请问该人是男是女?**
由于身高、体重、鞋码都是**连续变量**,不能采用离散变量的方法计算概率,而且样本太少,无法分成区间计算,这时候假设身高、体重、鞋码都是**正态分布**,**通过样本计算出均值和方差**,即得出**正态分布的密度函数**,有了密度函数,**把值代入,算出某一点的密度函数的值**,比如男性的身高均值179.5、标准差为3.697的正态分布,所以男性的身高为180的概率为0.1069
如何得出?可以使用Excel的NORMDIST(x,mean,standard_dev,cumulative)函数,有四个参数:
x:正态分布中,需要计算的数值
mean:正态分布的平均值
standard_dev:正态分布的标准差
cumulative:取值为逻辑值,即false 或true,决定了函数的形式,为TRUE的时候函数结果为累积分布;为false的时候,结果为概率密度
使用**NORMDIST(180,179.5,3.697,0)=0.1069**,同时计算得男性体重为120的概率为0.000382324,男性鞋码为41的概率是0.120304111
所以**P(A1A2A3|C1)=0.1069*0.000382324*0.120304111=4.9169e-6**,该人为女的可能性为:P(A1A2A3|C2)=2.7244e-9
P(A1A2A3|C1)>P(A1A2A3|C2)
所以该数据为**男的概率大于分类为女的概率**
朴素贝叶斯分类器工作流程
常用于文本分类,尤其是对于英文来说效果很好,用于垃圾文本过滤、情感预测、推荐系统等,流程为:

***第一阶段:准备阶段***
需要确定特征属性,比如上文的“身高”“体重”“鞋码”等,并对每个**特征**属性进行适当**划分**,然后由人工对一部分**数据进行分类**,形成训练样本
分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定
***第二阶段:训练阶段***
生成**分类器**,工作是**计算**每个**类别**在训练样本中的出现**频率**及每个**特征属性**划分对每个类别的**条件概率**,
**输入**是特征属性和训练样本,**输出**是分类器
***第三阶段:应用阶段***
使用分类器对新数据进行分类,
**输入**是分类器和新数据,**输出**是新数据的分类结果
## 1.离散型变量和连续变量在朴素贝叶斯模型中的处理有什么差别?
离散型变量可以直接计算概率,连续型变量需要看成正态分布然后计算期望和标准差来计算概率
2.如果你女友在你的手机里面发现了你和其他女人的暧昧短信,于是她开始思考3个概率问题,你来判断下面3个概率分别属于哪种概率:
你在没有任何情况下,出轨的概率
如果你出轨了,那么你的手机里有暧昧短信的概率
在你的手机里发现了暧昧短信,认为你出轨的概率
三种概率分别属于先验概率、后验概率和条件概率的哪一种?
2.暧昧短信的出现为观测变量,在出轨的条件下求出现暧昧短信的概率,即在隐变量的条件下计算对应观测变量的概率为条件概率
的概率
如果你出轨了,那么你的手机里有暧昧短信的概率
在你的手机里发现了暧昧短信,认为你出轨的概率
三种概率分别属于先验概率、后验概率和条件概率的哪一种?
2.暧昧短信的出现为观测变量,在出轨的条件下求出现暧昧短信的概率,即在隐变量的条件下计算对应观测变量的概率为条件概率