`
zhangxiong0301
  • 浏览: 359596 次
社区版块
存档分类
最新评论

朴素贝叶斯分类器的应用

 
阅读更多

一、病人分类的例子

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

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

  症状  职业   疾病

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

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

根据贝叶斯定理

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

分享到:
评论

相关推荐

    朴素贝叶斯分类器算法

    4. **垃圾邮件过滤**:`spamEmail.py`可能是一个示例,演示如何使用朴素贝叶斯分类器进行垃圾邮件识别。这个例子中,数据集可能包含了标记为垃圾邮件和非垃圾邮件的电子邮件文本,通过学习这些文本的词汇特征,模型...

    人工智能-项目实践-朴素贝叶斯分类器-朴素贝叶斯文本分类器

    人工智能_项目实践_朴素贝叶斯分类器_朴素贝叶斯文本分类器 **数据:**搜狗文本分类语料库 **分类器:**朴素贝叶斯分类器 NBC(Naive Bayesian Classifier) **编程语言:**Python+jieba分词库+nltk+sklearn

    基于hadoop的朴素贝叶斯分类器

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它基于贝叶斯定理和特征条件独立假设。在大数据处理领域,结合Hadoop框架可以实现大规模数据集的分类任务。Hadoop是一个开源分布式计算框架,它允许在大量廉价硬件上...

    朴素贝叶斯分类器,用于识别手写的数字A~J

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它在数据分类中有着广泛的应用,尤其是在文本分类、垃圾邮件过滤和图像识别等领域。这个特定的案例是针对手写数字的识别,目标是从A到J这10个字符进行区分。 在手写...

    论文研究-朴素贝叶斯分类器的构建 .pdf

    朴素贝叶斯分类器是一种基于贝叶斯定理的概率分类方法,它简单且易于实现,广泛应用于文本分类、垃圾邮件过滤、情感分析等众多领域。朴素贝叶斯分类器的核心是基于属性条件独立的假设,即一个属性的出现不影响其他...

    C++实现朴素贝叶斯分类器

    在实际应用中,C++实现的朴素贝叶斯分类器可以用于文本分类(如垃圾邮件过滤)、情感分析、推荐系统等多种场景。其简洁的代码结构和高效性能使其成为初学者和专业人士的首选工具之一。通过调整和优化,还可以进一步...

    朴素贝叶斯分类器

    在这个项目中,我们看到一个使用Python和可能的sklearn库实现的朴素贝叶斯分类器,应用于Haberman's Survival数据集。通过对数据预处理、计算概率和进行预测,我们可以评估模型在预测患者生存情况上的表现。

    朴素贝叶斯分类器(python版)

    - **特征条件独立**:朴素贝叶斯分类器的一个关键假设是所有特征之间相互独立,这简化了计算,但可能在实际应用中过于理想化。 2. **Python实现** - **NumPy**:NumPy是Python科学计算的基础库,提供高效的多维...

    MATLAB中的朴素贝叶斯分类器matlab.7z

    描述中提到,这是一个MATLAB项目,包括了源代码和示例,旨在帮助用户理解和应用朴素贝叶斯分类器。用户可以下载并运行这些文件,以了解如何在实际问题中使用这个算法。"项目文件"部分可能包含了必要的脚本、数据集和...

    朴素贝叶斯分类器(Matlab代码)

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它基于贝叶斯定理和特征条件独立假设。在本项目中,"朴素贝叶斯分类器(Matlab代码)" 提供了一个非官方的实现,由作者亲自编写,并且包含了测试模块,这使得学习者...

    模式识别朴素贝叶斯分类器

    朴素贝叶斯分类器是一种基于概率的机器学习算法,它在模式识别领域有着广泛的应用。该算法基于贝叶斯定理,通过计算不同特征条件下类别的先验概率和后验概率来进行分类。在这个主题中,我们将深入探讨朴素贝叶斯分类...

    朴素贝叶斯分类器(离散).rar

    在这个项目中,开发者使用Matlab来实现朴素贝叶斯分类器,这使得用户可以轻松地处理数据、训练模型并进行预测。 首先,我们需要理解朴素贝叶斯分类器的基本原理。朴素贝叶斯假设各个特征之间相互独立,即使在给定...

    朴素贝叶斯分类器(MATLAB源代码)

    朴素贝叶斯分类器 MATLAB 源代码,里面含有使用实例,用的是 UCI 的 mushroom 数据集。 分类器详细介绍见: http://blog.csdn.net/yunduanmuxue/article/details/39693917

    Python-一个实现朴素贝叶斯分类器简单的Python库

    朴素贝叶斯分类器是一种基于概率的监督学习算法,广泛应用于文本分类、垃圾邮件检测、情感分析等领域。在Python中,有多个库提供了朴素贝叶斯分类器的实现,如`sklearn`、`numpy`、`pandas`等。本库"Python-一个实现...

    基于朴素贝叶斯分类器的文本分类算法

    朴素贝叶斯分类器是一种基于概率的机器学习方法,它在文本分类领域有着广泛的应用。该模型基于贝叶斯定理,并且通过“朴素”这一假设来简化计算,即假设特征之间是相互独立的。这一假设使得朴素贝叶斯分类器能够高效...

    一种文本处理中的朴素贝叶斯分类器

    该文首先介绍了朴素贝叶斯分类器的基本原理,包括特征独立性假设,并探讨了如何训练及应用朴素贝叶斯分类器来进行文本分类。此外,文中还提到了使用EM(期望最大化)算法来自动增加训练数据量,以提高分类器的性能。...

    朴素贝叶斯分类Iris数据

    在这个实例中,我们将探讨如何使用朴素贝叶斯分类器处理Iris数据集。 Iris数据集是一个经典的数据集,由生物学家Ronald Fisher于1936年收集,包含三种鸢尾花(Setosa、Versicolour和Virginica)的4个特征:萼片长度...

    Python实现的朴素贝叶斯分类器示例

    在实际应用中,朴素贝叶斯分类器通常用于文本分类、情感分析等任务。例如,在上述代码的注释中提到的示例,可能是在一个医疗诊断系统中,根据病人的“症状”和“职业”等特征来预测他们可能患有的疾病(如“感冒”或...

    朴素贝叶斯分类器-人脸识别方面的

    朴素贝叶斯分类器是一种基于概率的机器学习方法,它在人脸识别领域有着广泛的应用。该算法的核心思想是假设特征之间相互独立,并且每个特征对类别都有独立的影响。在这个项目中,我们将探讨如何利用朴素贝叶斯分类器...

    朴素贝叶斯matlab简单实现

    通过阅读和理解这些代码,可以深入理解朴素贝叶斯分类器在MATLAB中的具体实现细节,以及如何将其应用于实际问题中。 总的来说,朴素贝叶斯在MATLAB中的实现是一个相对直观和易于理解的过程,它可以帮助初学者快速...

Global site tag (gtag.js) - Google Analytics