贝叶斯分类的基础——贝叶斯定理

已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)。这里先解释什么是条件概率:

表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:

贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

下面不加证明地直接给出贝叶斯定理:

朴素贝叶斯分类器的应用

生活中很多场合需要用到分类,比如新闻分类、病人分类等等。

本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法。

一、病人分类的例子

让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。

某个医院早上收了六个门诊病人,如下表。

  症状  职业   疾病

  打喷嚏 护士   感冒 
  打喷嚏 农夫   过敏 
  头痛  建筑工人 脑震荡 
  头痛  建筑工人 感冒 
  打喷嚏 教师   感冒 
  头痛  教师   脑震荡

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

根据贝叶斯定理:

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

可得

   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%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。

这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。

二、朴素贝叶斯分类器的公式

假设某个体有n项特征(Feature),分别为F1、F2、...、Fn。现有m个类别(Category),分别为C1、C2、...、Cm。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:

 P(C|F1F2...Fn) 
  = P(F1F2...Fn|C)P(C) / P(F1F2...Fn)

由于 P(F1F2...Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求

 P(F1F2...Fn|C)P(C)

的最大值。

朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此

 P(F1F2...Fn|C)P(C) 
  = P(F1|C)P(F2|C) ... P(Fn|C)P(C)

上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。

虽然"所有特征彼此独立"这个假设,在现实中不太可能成立,但是它可以大大简化计算,而且有研究表明对分类结果的准确性影响不大。

下面再通过两个例子,来看如何使用朴素贝叶斯分类器。

三、账号分类的例子

本例摘自张洋的《算法杂货铺----分类算法之朴素贝叶斯分类》。

根据某社区网站的抽样统计,该站10000个账号中有89%为真实账号(设为C0),11%为虚假账号(设为C1)。

  C0 = 0.89

  C1 = 0.11

接下来,就要用统计资料判断一个账号的真实性。假定某一个账号有以下三个特征:

    F1: 日志数量/注册天数 
    F2: 好友数量/注册天数 
    F3: 是否使用真实头像(真实头像为1,非真实头像为0)

    F1 = 0.1 
    F2 = 0.2 
    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

可以看到,虽然这个用户没有使用真实头像,但是他是真实账号的概率,比虚假账号高出30多倍,因此判断这个账号为真。

四、性别分类的例子

本例摘自维基百科,关于处理连续变量的另一种方法。

下面是一组人类身体特征的统计资料。

  性别  身高(英尺) 体重(磅)  脚掌(英寸)

  男    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

可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。

机器学习篇——朴素贝叶斯分类器(1)相关推荐

  1. 【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层

    [火炉炼AI]机器学习013-用朴素贝叶斯分类器估算个人收入阶层 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matp ...

  2. 机器学习:朴素贝叶斯分类器代码实现,决策函数非向量化方式

    文章目录 朴素贝叶斯离散型的算法描述: 代码实现: 实现一个NaiveBayes的基类,以便扩展: 实现离散型朴素贝叶斯MultiomialNB类: 实现从文件中读取数据: 测试数据: 代码测试: 朴 ...

  3. 【机器学习】朴素贝叶斯分类器原理(理论+图解)

  4. 机器学习 —— 基础整理(二)朴素贝叶斯分类器;文本分类的方法杂谈

          上一篇博客复习了贝叶斯决策论,以及生成式模型的参数方法.本篇就给出一个具体的例子:朴素贝叶斯分类器应用于文本分类.后面简单谈了一下文本分类的方法. (五)朴素贝叶斯分类器(NaïveBay ...

  5. 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战

    前言 前篇基础理论知识:机器学习:贝叶斯分类器详解(一)-贝叶斯决策理论与朴素贝叶斯 这篇主要使用代码实现贝叶斯分类. 一.准备数据 创建一个bayes.py程序,从文本中构建词向量,实现词表向向量转 ...

  6. 机器学习(十一)-Naïve Bayes Classifier朴素贝叶斯分类器及Python实现

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  7. sklearn朴素贝叶斯分类器_机器学习06——朴素贝叶斯

    一.概率公式: 条件概率公式: 事件A发生的条件下,事件B发生的概率=事件A和事件B同时发生的概率/事件A发生的概率 P(AB)=P(A)*P(B|A) 事件A和事件B同时发生的概率=事件A发生的概率 ...

  8. 用Python开始机器学习(6:朴素贝叶斯分类器)

    朴素贝叶斯分类器是一个以贝叶斯定理为基础,广泛应用于情感分类领域的优美分类器.本文我们尝试使用该分类器来解决上一篇文章中影评态度分类. 1.贝叶斯定理 假设对于某个数据集,随机变量C表示样本为C类的概 ...

  9. 机器学习基础(六):贝叶斯分类(贝叶斯决策论、朴素/半朴素贝叶斯分类器、贝叶斯网、EM算法)

    6.贝叶斯分类 6.1贝叶斯决策论Bayesian decision theory 概率框架下实施决策的基本方法. 对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和 ...

最新文章

  1. 为jQuery的$.ajax设置超时时间
  2. 读取手柄_中高端游戏手柄比选,北通宙斯才是游戏的最佳拍档
  3. 【深度学习笔记】python图像特征提取
  4. linux 强制刷新文件,vim 如何刷新或重载reload 已打开的文件
  5. android mmkv使用_MMKV解读
  6. 大粤桂谋定发展-丰收节交易会·林裕豪:从玉农业协作项目
  7. 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现按部门组织机构设置权限...
  8. sql语句update中多个case/when的写法
  9. hdu 4279 Number (找规律)
  10. idea 配置J2EE
  11. 人工智能十大流行算法,通俗易懂讲明白
  12. 生成对抗网络及其应用
  13. python许可证过期_x-pack许可证过期问题解决
  14. C语言简单游戏编程入门之四子棋
  15. 简单的python爬虫程序:爬取斗鱼直播人气前五十的主播
  16. 性能测试监控——CPU
  17. 产品定位的方法与案例,遵循 大而全不如小而精 理念
  18. 吴恩达机器学习(十五)—— 应用实例:图片文字识别
  19. 企业AD域(域控服务器)的安装和配置详细教程
  20. Python调用并执行javascript代码——使用Naked库

热门文章

  1. Mysql 1067系统错误终极解决方案全集
  2. 基于SSM的学生会管理系统-基于ssm的社团信息管理系统-java项目
  3. weiit—全渠道新零售saas,重构“人、货、场”
  4. Python实现:卡拉兹(Callatz)猜想
  5. Houdini JoyOfVex 教程03
  6. Houdini脚本Vex学习
  7. 老外发邮件常说“TBD\TBC”是什么意思?
  8. 敏捷是一种态度: 有了敏捷建模,就有了敏捷需求
  9. AOJ 0531:Paint Color(二维离散+imos)
  10. 利用verilog将二进制码转换为十进制BCD码