数据挖掘实验1贝叶斯

Introduction

本系列文章是基于圣地亚哥州立大学的一个数据挖掘实验,借此学习了下朴素贝叶斯,并写了个简单的分类器。

本文介绍贝叶斯,主要参考文章面向程序员的数据挖掘指南:第六章概率和朴素贝叶斯,此书下载地址:百度网盘

贝叶斯定理

本部分取自阮一峰的博客。

"条件概率"(Conditional probability)(也成为后验概率),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。

P(A)表示事件A发生的概率,成为A的先验概率

根据文氏图,可以很清楚地看到在事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B)。

因此,

由于P(A∩B) = P(B∩A)所以:

所以

即条件概率的计算公式

这个公式是贝叶斯方法论的基石。在数据挖掘中,我们通常会使用这个公式去判别不同事件之间的关系。

样例

(文章剩下部分基本是参考书目的内容)

比如我们要为一家销售电子产品的公司发送宣传邮件,共有笔记本、台式机、平板电脑三种产品。我们需要根据目标用户的类型来分别派送这三种宣传邮件。

比如我们有一位居住在88005地区的女士,她的女儿在读大学,并居住在家中,而且她还会参加瑜伽课程。那我应该派发哪种邮件呢?

让我们用D来表示这位客户的特征:

  • 居住在88005地区
  • 有一个正在读大学的女儿
  • 练习瑜伽

因此我们需要计算以下三个概率:

并选择最大的结果。

再抽象一点,如果我们有h1, h2, …hn等事件,它们就相当于不同的类别(篮球、体操、或是有没有患糖尿病等)。

在计算出以上这些概率后,选取最大的结果,就能用作分类了。这种方法叫最大后验估计,记为hMAP,我们可以用以下公式来表示最大后验估计:

H表示所有的事件,所以h∈H表示“对于集合中的每一个事件”。整个公式的含义就是:对于集合中的每一个事件,计算出P(h|D)的值,并取最大的结果。

使用贝叶斯法则进行替换:

所以我们需要计算的部分是

可以发现对于所有的事件,公式中的分母都是P(D),因此即便只计算P(D|h)P(h),也可以判断出最大的结果。那么这个公式就可以简化为:

另一个违反直觉的例子

这个例子是通过一次血液检验来判断某人是否患有某种癌症。已知这种癌症在美国的感染率是0.8%。血液检验的结果有阳性和阴性两种,且存在准确性的问题:如果这个人患有癌症,则有98%的几率测出阳性;如果他没有癌症,会有97%的几率测出阴性。

我们来尝试将这些描述语言用公式来表示:

  • 美国有0.8%的人患有这种癌症:P(癌症) = 0.008
  • 99.2%的人没有患有这种癌症:P(┐癌症) = 0.992
  • 对于患有癌症的人,他的血液检测结果返回阳性的概率是98%:P(阳性|癌症) = 0.98
  • 对于患有癌症的人,检测结果返回阴性的概率是2%:P(阴性|癌症) = 0.02
  • 对于没有癌症的人,返回阴性的概率是97%:P(阴性|┐癌症) = 0.97
  • 对于没有癌症的人,返回阳性的概率是3%:P(阳性|┐癌症) = 0.03

Ann到医院做了血液检测,呈阳性。初看结果并不乐观,毕竟这种血液检测的准确率高达98%。那让我们用贝叶斯法则来计算看看:

  • P(阳性|癌症)P(癌症) = 0.98 * 0.008 = 0.0078
  • P(阳性|┐癌症)P(┐癌症) = 0.03 * 0.992 = 0.0298

分类的结果是她不会患有癌症。

如果想得到确切的概率,我们可以使用标准化的方法:

可以看到,血液检测为阳性的人患有这种癌症的概率是21%。

可能你会觉得这并不合情理,毕竟血液检测的准确率有98%,而结果却说Ann很可能并没有这种癌症。事实上,很多人都会有这样的 疑问。

我来说明一下为什么会是这样的结果。很多人只看到了血液检测的准确率是98%,但没有考虑到全美只有0.8%的人患有这种癌症。

假设我们给一个有着一百万人口的城市做血液检测,也就是说其中有8,000人患有癌症,992,000人没有。首先,对于那8,000个癌症病人,有7,840个人的血液检测结果会呈阳性,160人会呈阴性。

对于992,000人,有962,240人会呈阴性,30,000人呈阳性。将这些数字总结到下表中:

阳性 阴性
患有癌症 7840 160
健康 30000 962240

Ann的测试结果呈阳性,从上表看阳性中有30,000人其实是健康的,只有7,840人确实患有癌症,所以我们才会认为Ann很有可能是健康的。

为什么我们需要贝叶斯

为什么我们需要贝叶斯

主要因为现实中,计算P(A|B)或者P(h|D)往往是很困难的,但是可以通过计算更容易获得的P(B|A),P(A)来间接计算P(A|B)。

朴素贝叶斯

很多时候我们会用到不止一个前提条件,比如判断一个人是否会购买Sencha绿茶时可以用到顾客所在地以及是否买过有机食品这两个条件。计算这样的概率时只需将各个条件概率相乘即可

P(买绿茶|88005 & 买有机食品) = P(88005|买绿茶)P(买有机食品|买绿茶)P(买绿茶) = 0.6 *0.8 *0.5 = 0.24

P(┐买绿茶|88005 & 买有机食品) = P(88005|┐买绿茶)P(买有机食品|┐买绿茶)P(┐买绿茶) = 0.4 *0.25 *0.5 = 0.05

所以得到的结论是居住在88005地区且买过有机食品的客户更有可能购买Sencha绿茶。

Reference

贝叶斯推断及其互联网应用(一):定理简介

wiki条件概率

面向程序员的数据挖掘指南:第六章概率和朴素贝叶斯

文章若未注明转载皆为原创,如需转载请注明出处FindSpace博客及文章链接,文章markdown格式源码现已开放,欢迎转载。文章源码地址:


分享到:

Find

新浪微博(FindSpace博客)QQ群:不安分的Coder(375670127) 不安分的Coder

You may also like...