朴素贝叶斯分类器的应用

标签: Algorithm | 发表时间:2013-12-16 20:35 | 作者:阮一峰
出处:http://www.ruanyifeng.com/blog/

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

本文介绍 朴素贝叶斯分类器(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),分别为F 1、F 2、...、F n。现有m个类别(Category),分别为C 1、C 2、...、C m。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:

 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%为真实账号(设为C 0),11%为虚假账号(设为C 1)。

  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倍,所以判断该人为女性。

(完)

文档信息

相关 [分类 应用] 推荐:

Evri:分类到极致的新闻阅读应用

- - 爱范儿 · Beats of Bits
iPad 上最火的新闻阅读应用是 Flipboard,它的成功公式是“新闻聚合+精选+精美实用的 UI = 优秀的新闻发现和阅读体验”. 然而,有人并不喜欢“精选”,他们讨厌“遗漏”,毕竟同一条新闻对不同的人重要程度不一样. 举个例子,现在 NBA 最火的球星是科比、詹姆斯、韦德等人,然而我偏偏就喜欢过气且命运多舛的麦迪,这样一来,如果我订阅了 NBA 频道,精选的新闻很可能都是关于那些热门球星,麦迪的新闻却无处可寻.

朴素贝叶斯分类器的应用

- - 阮一峰的网络日志
生活中很多场合需要用到分类,比如新闻分类、病人分类等等. 本文介绍 朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法. 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表.   症状  职业   疾病.

聚类分析在用户分类中的应用

- - 人人都是产品经理
聚类分析属于探索性的数据分析方法. 通常,我们利用聚类分析将看似无序的对象进行分组、归类,以达到更好地理解研究对象的目的. 聚类结果要求 组内对象相似性较 高, 组间对象相似性较 低. 在用户研究中,很多问题可以借助聚类分析来解决,比如,网站的信息分类问题、网页的点击行为关联性问题以及用户分类问题等等.

字体的分类

- 旭闻 - 般若黑洞
写书需要,花了一个晚上做了一张思维导图,算是写作过程中的副产品,粗略了些. 博客更新很慢,这篇blog算是透漏下最近的工作吧,我不是懒,是真没有闲着. 文字部分参考了维基百科、Robin Williams《写给大家看的设计书》以及这篇文章. 之前还写过一篇入门的:PPT中字体的选用,有兴趣可以对比一下,不过里面有很多错误,不太好意思拿出来了.

分类算法概述。

- - 小彰
摘 要:分类是数据挖掘、机器学习和模式识别中一个重要的研究领域. 通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较,总结出了各种算法的特性,为使用者选择算法或研究者改进算法提供了依据. 分类的目的是根据数据集的特点构造一个分类函数或分类模型(也常常称作分类器),该模型能把未知类别的样本映射到给定类别中的某一个.

朴素贝叶斯分类

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 英国数学家贝叶斯(Thomas Bayes)曾经给出如下定理:. P(A)表示A事件发生的概率,P(B)表示B事件发生的概率;P(A|B)表示在B事件已经确定发生的情况下,发生A事件的概率;P(B|A)表示在A事件已经确定发生的情况下,发生B事件的概率;P(AB)表示AB事件同时发生的概率.

LibShortText - 短文本分类

- - 互联网旁观者
Chih-Jen Lin的新作.   青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟.

移动化电子商务分类

- Horgan - 互联网的那点事...
网友 scarlett 投稿 原文. 7月19日,商务部电子商务和信息化司副司长张佩东在《第28次中国互联网络发展状况统计报告》发布会上表示,今年网络购物销售规模预计将占到全社会消费品零售总额的4.5%到5%. 2011年我国网购市场交易规模将达到7634.1亿元. 艾瑞数据,第二季度中国移动互联网市场规模达77.9亿元,其中手机电子商务占27.9%,仅次于移动增值业务.

数据挖掘 - 分类算法比较

- - IBM developerWorks 中国 : 文档库
随着计算能力、存储、网络的高速发展,人类积累的数据量正以指数速度增长. 对于这些数据,人们迫切希望从中提取出隐藏其中的有用信息,更需要发现更深层次的规律,对决策,商务应用提供更有效的支持. 为了满足这种需求,数据挖掘技术的得到了长足的发展,而分类在数据挖掘中是一项非常重要的任务,目前在商业上应用最多.

SVM理论之线性分类

- - 博客园_首页
  离上次发博文差不多有一年的时间了,因为一直在准备考研直到4月份才有时间,无奈考研后进入空白期,对专业、技术甚至生活失去了兴趣,部分原因也是没有什么好写. 的,现在刚做完毕设,有点积累,就从这里开始吧.   我将从svm理论到应用,分享一下学习经历,文章有很多内容来自文献和网络牛人,后面给出链接.