通俗机器学习—朴素贝叶斯

引言 机器学习分类中的k近邻法和决策树师确定的分类算法,数据实例最终会被明确划分到某个分类中,本节我们讨论的分类算法将不能

完全确定数据实例应该划分到某个分类,或者智能给出数据实例属于给定分类的概率

一 朴素贝叶斯算法

1. 简介

Na?veBayes算法,又叫朴素贝叶斯算法,朴素:特征条件独立;贝叶斯:基于贝叶斯定理。属于监督学习的生成模型,实现简单,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为支撑。在大量样本下会有较好的表现,不适用于输入向量的特征条件有关联的场景。

2. 基本思想

(1)病人分类的例子

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

症状  职业   疾病

——————————————————

打喷嚏 护士   感冒

打喷嚏 农夫   过敏

头痛  建筑工人 脑震荡

头痛  建筑工人 感冒

打喷嚏 教师   感冒

头痛  教师   脑震荡

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

根据贝叶斯定理:

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

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

(2)朴素贝叶斯分类器的公式

假设某个体有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)

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

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

(3)拉普拉斯平滑(Laplace smoothing)

也就是参数为1时的贝叶斯估计,当某个分量在总样本某个分类中(观察样本库/训练集)从没出现过,会导致整个实例的计算结果为0。为了解决这个问题,使用拉普拉斯平滑/加1平滑进行处理。

它的思想非常简单,就是对先验概率的分子(划分的计数)加1,分母加上类别数;对条件概率分子加1,分母加上对应特征的可能取值数量。这样在解决零概率问题的同时,也保证了概率和依然为1。

eg:假设在文本分类中,有3个类,C1、C2、C3,在指定的训练样本中,某个词语F1,在各个类中观测计数分别为=0,990,10,即概率为P(F1/C1)=0,P(F1/C2)=0.99,P(F1/C3)=0.01,对这三个量使用拉普拉斯平滑的计算方法如下:

1/1003 = 0.001,991/1003=0.988,11/1003=0.011

3. 实际应用场景

文本分类

垃圾邮件过滤

病人分类

拼写检查

---------------------

二, 条件概率

1.  条件概率公式

设A,B是两个事件,且P(B)>0,则在事件B发生的条件下,事件A发生的条件概率(conditional probability)为:

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

1.由条件概率公式得:

P(AB)=P(A|B)P(B)=P(B|A)P(A)

上式即为乘法公式;

2.乘法公式的推广:对于任何正整数n≥2,当P(A1A2...An-1) > 0 时,有:

P(A1A2...An-1An)=P(A1)P(A2|A1)P(A3|A1A2)...P(An|A1A2...An-1)

2. 基本思想

  • 条件概率又称后验概率):事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”,。

接着,考虑一个问题:P(A|B)是在B发生的情况下A发生的可能性。

  • 首先,事件B发生之前,我们对事件A的发生有一个基本的概率判断,称为A的先验概率,用P(A)表示;
  • 其次,事件B发生之后,我们对事件A的发生概率重新评估,称为A的后验概率,用P(A|B)表示;
  • 类似的,事件A发生之前,我们对事件B的发生有一个基本的概率判断,称为B的先验概率,用P(B)表示;
  • 同样,事件A发生之后,我们对事件B的发生概率重新评估,称为B的后验概率,用P(B|A)表示。

贝叶斯定理便是基于下述贝叶斯公式:

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

上述公式的推导其实非常简单,就是从条件概率推出。

根据条件概率的定义,在事件B发生的条件下事件A发生的概率是

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

同样地,在事件A发生的条件下事件B发生的概率

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

整理与合并上述两个方程式,便可以得到:

P(A|B)P(B)=P(A∩B)=P(B|A)P(A)

接着,上式两边同除以P(B),若P(B)是非零的,我们便可以得到贝叶斯定理的公式表达式:

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

我们把P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

所以,条件概率可以理解成下面的式子:

后验概率 = 先验概率 x 调整因子

这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。

在这里,如果"可能性函数"P(B|A)/P(B)>1,意味着"先验概率"被增强,事件A的发生的可能性变大;如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。

贝叶斯定理应用示例:

已知某种疾病的发病率是0.001,即1000人中会有1个人得病。现有一种试剂可以检验患者是否得病,它的准确率是0.99,即在患者确实得病的情况下,它有99%的可能呈现阳性。它的误报率是5%,即在患者没有得病的情况下,它有5%的可能呈现阳性。现有一个病人的检验结果为阳性,请问他确实得病的可能性有多大?

假定A事件表示得病,那么P(A)为0.001。这就是"先验概率",即没有做试验之前,我们预计的发病率。再假定B事件表示阳性,那么要计算的就是P(A|B)。这就是"后验概率",即做了试验以后,对发病率的估计。

根据条件概率公式,

用全概率公式改写分母,

将数字代入,

我们得到了一个惊人的结果,P(A|B)约等于0.019。也就是说,即使检验呈现阳性,病人得病的概率,也只是从0.1%增加到了2%左右。这就是所谓的"假阳性",即阳性结果完全不足以说明病人得病。

或许换成这个公式 P(A|B)=P(A∩B)/B,看起来更加直白写:

阐释:

如果没有误报,那么得病率:.001*.99

如果是误报,那么得病率为:.05*(1-.0001),

所以:

p(A|B)=.001*.99/[.99*.001+.05*(1-.0001)]=.019

为什么会这样?为什么这种检验的准确率高达99%,但是可信度却不到2%?答案是与它的误报率太高有关。

三 全概率公式

1. 如果事件组B1,B2,.... 满足

1.B1,B2....两两互斥,即 B∩ B= ? ,i≠j , i,j=1,2,....,且P(Bi)>0,i=1,2,....;

2.B1∪B2∪....=Ω ,则称事件组 B1,B2,...是样本空间Ω的一个划分

设 B1,B2,...是样本空间Ω的一个划分,A为任一事件,则:

上式即为全概率公式(formula of total probability)

2.全概率公式的意义在于,当直接计算P(A)较为困难,而P(Bi),P(A|Bi)  (i=1,2,...)的计算较为简单时,可以利用全概率公式计算P(A)。思想就是,将事件A分解成几个小事件,通过求小事件的概率,然后相加从而求得事件A的概率,而将事件A进行分割的时候,不是直接对A进行分割,而是先找到样本空间Ω的一个个划分B1,B2,...Bn,这样事件A就被事件AB1,AB2,...ABn分解成了n部分,即A=AB1+AB2+...+ABn, 每一Bi发生都可能导致A发生相应的概率是P(A|Bi),由加法公式得

P(A)=P(AB1)+P(AB2)+....+P(ABn)

=P(A|B1)P(B1)+P(A|B2)P(B2)+...+P(A|Bn)P(PBn)

3.实例:某车间用甲、乙、丙三台机床进行生产,各台机床次品率分别为5%,4%,2%,它们各自的产品分别占总量的25%,35%,40%,将它们的产品混在一起,求任取一个产品是次品的概率。

解:设.....     P(A)=25%*5%+4%*35%+2%*40%=0.0345

4.简单举例

一个别人举的例子:

一个村子与三个小偷,小偷偷村子的事件两两互斥,求村子被偷的概率。

解释:假设这三个小偷编号为A1,A2,A2;

偷东西的事件标记为B,不偷的话标记为:Bˉˉˉ

那么被偷的概率就是:要么是A1,要么是A2,要么是A3,

如果是A1, 概率是什么呢?首先得是A1,其次是村子被偷,也即是两个事件都满足,所以是P(A1B)

同理,可以得到P(A2B),P(A3B)

又因这三个小偷两两互斥,表示不会同时去偷。所以被偷的概率是:

P(B)=P(A1B)+P(A2B)+P(A3B)

当然按照条件概率或者乘法公式展开:

P(B)=P(A1)P(B|A1)+P(A2)P(B|A2)+P(A3)P(B|A3) (*)

PS: P(Ai),P(B|Ai)是已知的

问:是不是有想展开为:

P(B)=P(B)P(A1|B)+P(B)P(A1|B)+P(B)P(A1|B)的冲动?

原文地址:https://www.cnblogs.com/zzlp/p/9976484.html

时间: 2024-11-05 04:27:53

通俗机器学习—朴素贝叶斯的相关文章

机器学习—朴素贝叶斯

机器学习-朴素贝叶斯 本文代码均来自<机器学习实战> 朴素贝叶斯的两个基本假设: 独立:一个特征出现的可能性和与它和其他特征相邻没有关系 每个特征同等重要 这段代码是以文本分类为例介绍朴素贝叶斯算法的 要从文本中获取特征,需要先拆分文本.这里的特征是来自文本的词条(token),一个词条是字符的任意组合.可以把词条想象为单词,也可以使用非单词词条,如URL.IP地址或者任意其他字符串.然后将一个文本片段表示为一个词向量,其中值为1表示词条出现,0表示词条未出现. ??以在线社区的留言板为例,为

机器学习-朴素贝叶斯原理及Python实现

机器学习-朴素贝叶斯原理及Python实现 贝叶斯公式 P(A|B) = (P(B|A)P(A))/P(B) 举例:苹果10个,有2个黄色:梨10个,有6个黄色,求拿出一个黄色水果,是苹果的概率. 代入公式: P(苹果|黄色) = (P(黄色|苹果)P(苹果))/P(黄色) P(黄色) = (2+6)/20 = 2/5 P(苹果) = 10/20 = 1/2 = 0.5 P(黄色|苹果)=1/5 P(黄色|苹果)P(苹果) = P(黄色,苹果) = 1/5*1/2 = 1/10 = 0.1 P(

机器学习——朴素贝叶斯(NBC)

朴素贝叶斯分类(NBC)是机器学习中最基本的分类方法,是其他众多分类算法分类性能的对比基础,其他的算法在评价性能时都在NBC的基础上进行.同时,对于所有机器学习方法,到处都蕴含着Bayes统计的思想. 朴素贝叶斯基于贝叶斯地理和特征条件独立性假设,首先基于条件独立性假设学习输入X和输出Y的联合分布P(X,Y),同时利用先验概率P(Y),根据贝叶斯定理计算出后验概率P(Y|X),找出每个类别的最大的后验概率即确定为相应的类别.算法实现简单,学习和预测的效率都很高, 基本定义 输入空间Rn为特征化的

通俗易懂机器学习——朴素贝叶斯算法

本文将叙述朴素贝叶斯算法的来龙去脉,从数学推导到计算演练到编程实战 文章内容有借鉴网络资料.李航<统计学习方法>.吴军<数学之美>加以整理及补充 基础知识补充: 1.贝叶斯理论–吴军数学之美 http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 2.条件概率 3.联合分布 朴素贝叶斯算法 朴素贝叶斯法是基于贝叶斯定理和特征条件独立假设的 分类方法.给定训练数据集,首先基于特征条件独立假设学习 输入/输出的联合概率分布

机器学习-朴素贝叶斯应用-判断垃圾邮件

文章中代码均来自于<机器学习实战> 这个程序没有邮件的文件的话是不能运行的,要是想试试可以去网上搞搞文件 ''' Created on Oct 19, 2010 @author: Peter ''' #和其他复杂模型不一样,朴素贝叶斯的思想和操作比较简单,它一般是内嵌在处理具体问题的函数中的,而不像神经网络模型或者决策树等等有自己独立的方法 from numpy import * def createVocabList(dataSet): #将data中出现的所有词放在一个列表中 vocabS

机器学习--朴素贝叶斯算法原理、方法及代码实现

一.朴素的贝叶斯算法原理 贝叶斯分类算法以样本可能属于某类的概率来作为分类依据,朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一种,朴素的意思是条件概率独立性. 条件概率的三个重要公式: (1)概率乘法公式: P(AB)= P(B) P(A|B) = P(A) P(B|A) =P(BA) (2)全概率公式:        (3)贝叶斯公式:            如果一个事物在一些属性条件发生的情况下,事物属于A的概率>属于B的概率,则判定事物属于A,这就是朴素贝叶斯的基本思想. 二.算法步骤 (

机器学习-朴素贝叶斯

1. 贝叶斯公式是机器学习中常用的计算方法,例如,甲射中靶标的概率是0.4,乙射中靶标的概率是0.8,现在有个人中靶了,问问是甲射中的概率.这非常好计算,P=0.4/(0.8+0.4)=0.33,这是贝叶斯公式的基本应用,具体的贝叶斯公式如下: 2.<机器学习实战>中的贝叶斯实现: 略有修改,已经在本地电脑通过测试,可以运行 import numpy as np #-_-_-_-_-_- dataset=[['my', 'dog', 'has', 'flea', 'problems', 'he

机器学习--朴素贝叶斯算法案例

电子邮件垃圾过滤 1.如何从文本文档中构建自己的词列表.使用正则表达式切分句子,并将字符串全部转换为小写. #################################### # 功能:切分文本 # 输入变量:大字符串 big_string # 输出变量:字符串列表 #################################### def text_parse(big_string): list_of_tokens = re.split(r'\W*', big_string) re

机器学习——朴素贝叶斯分类器

假设现在要构建一个网络图书馆,我们可以给新进来的书贴上若干个标签,没有机器学习算法的情况下,我们需要给这些书手动分类,是计算机类的呀,还是非计算机类的呀,是小说类的呀,还是非小说类的云云. 那么,我们可以通过让程序自己学习如何通过一本书上的若干标签来进行图书类别的区分,这样就可以节省很多人力,这也是机器学习的魅力体现. 机器学习的基本原理是通过开发者给出这个程序一个学习集进行学习,再通过用户给的用户数据集进行学习的过程,机器学习包含很多的算法,当然,有大量数据的前提下,机器学习就和统计学密不可分