文章原创,最近更新:2018-06-23
1.分类问题综述
2.概率基础
3.朴素贝叶斯分类
4.贝叶斯推断
5.案例
参考链接:
1、 CH10 分类|10.1朴素贝叶斯《白话大数据与机器学习》-学习笔记
2、带你理解朴素贝叶斯分类算法
3、机器学习(10)之趣味案例理解朴素贝叶斯
4、朴素贝叶斯分类和预测算法的原理及实现
前言:通过网上找的文章,通过归纳总结具体如下:
1.分类问题综述
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。
分类和回归看上去有一些相似之处,从直观感觉上去认识,可以这么感觉:因变量是定量型的归纳学习称为回归,或者说是连续变量预测;因变量是定性型的归纳学习称为分类,或者说是离散变量预测。
从实时收集的路况来预测某地段目前的行车速度为多少米每秒是典型的回归归纳过程,而预测这个路段的行车状态是“畅通”、“繁忙”、“拥堵”则是典型的分类归纳过程。
分类算法是一大类算法,都是用来解决这种离散变量预测的,举例如下。
在银行的信用卡审批这一环节会用到分类的例子,应不应该给一个人办理信用卡呢?应该给一个申请人分配多少金额呢?尤其在有大量的申请人及调额申请的情况下。在这里会比较密集地用到分类算法。在此只示意性地进行说明,毕竟这个过程非常复杂,而且不同银行的计算原则也不尽相同。
既然是贝叶斯分类算法,那么分类的数学描述又是什么呢?从数学角度来说,分类问题可做如下定义:
已知集合C=y1,y2,……,yn 和I=x1,x2,……,xn确定映射规则y=f(),使得任意xi∈I有且仅有一个yi∈C,使得yi∈f(xi)成立。
其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合(特征集合),其中每一个元素是一个待分类项,f叫做分类器。分类算法的任务就是构造分类器f。
分类算法的内容是要求给定特征,让我们得出类别,这也是所有分类问题的关键。那么如何由指定特征,得到我们最终的类别,也是我们下面要讲的,每一个不同的分类算法,对应着不同的核心思想。
2.概率基础
下面我们通过维恩图来说明贝叶斯公式中常见的几个概率。
维恩图中:
- S:S是样本空间,是所有可能事件的总和。
- P(A):是样本空间S中A事件发生的概率,维恩图中绿色的部分。
- P(B):是样本空间S中B事件发生的概率,维恩图中蓝色的部分。
- P(A∩B):是样本空间S中A事件和B事件同时发生的概率,也就是A和B相交的区域。
- P(A|B):是条件概率,是B事件已经发生时A事件发生的概率。
对于条件概率,还有一种更清晰的表示方式叫概率树。下面的概率树表示了条件概率P(A|B)。与维恩图中的P(A∩B)相比,可以发现两者明显的区别。
- P(A∩B)是事件A和事件B同时发现的情况,因此是两者相交区域的概率。
-
事件概率P(A|B)是事件B发生时事件A发生的概率。这里有一个先决条件就是P(B)要首先发生。
因为条件概率P(A|B)是在事件B已经发生的情况下,事件A发生的概率,因此P(A|B)可以表示为事件A与B的交集与事件B的比率。
该公式还可以转换为以下形式,以便我们下面进行贝叶斯公式计算时使用。
3.朴素贝叶斯分类
那么既然是朴素贝叶斯分类算法,它的核心算法又是什么呢?是下面这个贝叶斯公式:
叶斯算法通过已知的P(A|B),P(A),和P(B)三个概率计算P(B|A)发生的概率。假设我们现在已知P(A|B),P(A)和P(B)三个概率,如何计算P(B|A)呢?通过前面的概率树及P(A|B)的概率可知,P(B|A)的概率是在事件A发生的前提下事件B发生的概率,因此P(B|A)可以表示为事件B与事件A的交集与事件A的比率。
该公式同样可以转化为以下形式:
到这一步,我们只需要证明P(A∩B)= P(B∩A)就可以证明在已知P(A|B)的情况下可以通过计算获得P(B|A)的概率。我们将概率树转化为下面的概率表,分别列出P(A|B),P(B|A),P(A),和P(B)的概率。
通过计算可以证明P(A|B)*P(B)和P(B|A)*P(A)最后求得的结果是概率表中的同一个区域的值,因此:
我们通过P(A∩B)=P(B∩A)证明了在已知P(A|B),P(A),和P(B)三个概率的情况下可以计算出P(B|A)发生的概率。整个推导和计算过程可以说得通。但从统计学的角度来看,P(A|B)和P(B|A)两个条件概率之间存在怎样的关系呢?我们从贝叶斯推断里可以找到答案。
4.贝叶斯推断
贝叶斯推断可以说明贝叶斯定理中两个条件概率之间的关系。换句话说就是我们为什么可以通过P(A|B),P(A),和P(B)三个概率计算出P(B|A)发生的概率。
在贝叶斯推断中,每一种概率都有一个特定的名字:
- P(B)是"先验概率"(Prior probability)。
- P(A)是"先验概率"(Prior probability),也作标准化常量(normalized constant)。
- P(A|B)是已知B发生后A的条件概率,叫做似然函数(likelihood)。
- P(B|A)是已知A发生后B的条件概率,是我们要求的值,叫做后验概率。
- P(A|B)/P(A)是调整因子,也被称作标准似然(standardisedlikelihood)。
贝叶斯推断中有几个关键的概念需要说明下:
- 第一个是先验概率,先验概率是指我们主观通过事件发生次数对概率的判断。
- 第二个是似然函数,似然函数是对某件事发生可能性的判断,与条件概率正好相反。通过事件已经发生的概率推算事件可能性的概率。
维基百科中对似然函数与概率的解释:
1)概率:是给定某一参数值,求某一结果的可能性。
例如,抛一枚匀质硬币,抛10次,6次正面向上的可能性多大?
2)似然函数:给定某一结果,求某一参数值的可能性。
例如,抛一枚硬币,抛10次,结果是6次正面向上,匀质的可能性多大?
- 第三个是调整因子:调整因子是似然函数与先验概率的比值,这个比值相当于一个权重,用来调整后验概率的值,使后验概率更接近真实概率。调整因子有三种情况,大于1,等于1和小于1。
- 调整因子P(A|B)/P(A)>1:说明事件可能发生的概率要大于事件已经发生次数的概率。
- 调整因子P(A|B)/P(A)=1:说明事件可能发生的概率与事件已经发生次数的概率相等。
- 调整因子P(A|B)/P(A)<1:说明事件可能发生的概率与事件小于已经发生次数的概率。
因此,贝叶斯推断可以理解为通过先验概率和调整因子来获得后验概率。其中调整因子是根据事件已经发生的概率推断事件可能发生的概率(通过硬币正面出现的次数来推断硬币均匀的可能性),并与已经发生的先验概率(硬币正面出现的概率)的比值。通过这个比值调整先验概率来获得后验概率。
后验概率 = 先验概率 x 调整因子
5.案例
5.1案例1:病人分类的例子
某个医院早上收了六个门诊病人,如下表:
症状 | 职业 | 疾病 |
---|---|---|
打喷嚏 | 护士 | 感冒 |
打喷嚏 | 农夫 | 过敏 |
头疼 | 建筑工人 | 脑震荡 |
头疼 | 建筑工人 | 感冒 |
打喷嚏 | 教师 | 感冒 |
头疼 | 教师 | 脑震荡 |
现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大? 根据贝叶斯定理:
P(感冒|打喷嚏x建筑工人)
= P(打喷嚏x建筑工人|感冒) x P(感冒) / P(打喷嚏x建筑工人)
假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了
P(感冒|打喷嚏x建筑工人) = P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒)/ P(打喷嚏) x P(建筑工人)
这是可以计算的,P(感冒|打喷嚏x建筑工人) = 0.66 x 0.33 x 0.5 / 0.5 x 0.33 = 0.66
因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。
这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。
5.2案例2:账号分类
根据某社区网站的抽样统计,该站10000个账号中有89%为真实账号(设为C0),11%为虚假账号(设为C1)。接下来,就要用统计资料判断一个账号的真实性。
C0 = 0.89
C1 = 0.11
假定某一个账号有以下三个特征
- F1: 日志数量/注册天数 ,F1 = 0.1
- F2: 好友数量/注册天数 ,F2 = 0.2
- F3: 是否使用真实头像(真实头像为1,非真实头像为0),F3 = 0
请问该账号是真实账号还是虚假账号?方法是使用朴素贝叶斯分类器,计算下面这个计算式的值。
P(F1|C)P(F2|C)P(F3|C)P(C)
虽然上面这些值可以从统计资料得到,但是这里有一个问题:
- F1和F2是连续变量,不适宜按照某个特定值计算概率。
- 一个技巧是将连续值变为离散值,计算区间的概率。比如将F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三个区间,然后计算每个区间的概率。
- 在我们这个例子中,F1等于0.1,落在第二个区间,所以计算的时候,就使用第二个区间的发生概率
根据统计资料,可得:
- P(F1|C0) = 0.5, P(F1|C1) = 0.1
- P(F2|C0) = 0.7, P(F2|C1) = 0.2
- P(F3|C0) = 0.2, P(F3|C1) = 0.9
因此
P(F1|C0) P(F2|C0) P(F3|C0) P(C0) = 0.5 x 0.7 x 0.2 x 0.89 = 0.0623
P(F1|C1) P(F2|C1) P(F3|C1) P(C1) = 0.1 x 0.2 x 0.9 x 0.11 = 0.00198
5.3案例3:性别分类
下面是一组人类身体特征的统计资料。
性别 | 身高(英尺) | 体重(磅) | 脚掌(英寸) |
---|---|---|---|
男 | 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 |
mv | 5.75 | 150.9 | 9 |
已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?根据朴素贝叶斯分类器,计算下面这个式子的值:
P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)
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
可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。