朴素贝叶斯分类算法(1)

转自http://blog.csdn.net/lch614730/article/details/17031145

朴素贝叶斯分类算法(Naive Bayesian classification)

PS:本文在讲解的时候会用通俗的例子来讲解

本文我们将学习到:


(1)什么是朴素贝叶斯?


(2)先验概率和条件概率是如何证明的?


(3)文本分类的多项式模型和伯努利模型(附加例子说明)


(4)垃圾邮件的分类及代码的演示(暂缺以后会补上)


(1)什么是朴素贝叶斯(Naive Bayes,以后简称NB)?

首先先要区分一下: 判别式模型(discriminative model)和产生式模型(generative
model)

判别式模型(discriminative model :

简单的说就是分类的最终结果是以某个函数或者是假设函数的取值范围来表示它属于那一类的,例如  H(x)> 0 就是第一类 H(x)< 0。该模型主要对p(y|x)建模,通过x来预测y。在建模的过程中不需要关注联合概率分布。只关心如何优化p(y|x)使得数据可分。通常,判别式模型在分类任务中的表现要好于生成式模型。但判别模型建模过程中通常为有监督的,而且难以被扩展成无监督的。

产生式模型(generative model

该模型对观察序列的联合概率分布p(x,y)建模,在获取联合概率分布之后,可以通过贝叶斯公式得到条件概率分布。生成式模型所带的信息要比判别式   模型更丰富。除此之外,生成式模型较为容易的实现增量学习。

由上可知,判别模型与生成模型的最重要的不同是,训练时的目标不同,判别模型主要优化条件概率分布,使得x,y更加对应,在分类中就是更可分。而生成模型主要是优化训练数据的联合分布概率。而同时,生成模型可以通过贝叶斯得到判别模型,但判别模型无法得到生成模型。

以下是两者比较的结果表:


判别式模型(discriminative model)


产生式模型(generative model)


特点


寻找不同类别之间的最优分类面,反映的是异类数据之间的差异


对后验概率建模,从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度


区别(假定输入x, 类别标签y)


估计的是条件概率分布(conditional distribution) : P(y|x)


估计的是联合概率分布(joint probability distribution: P(x, y),


联系


由产生式模型可以得到判别式模型,但由判别式模型得不到产生式模型。


常见模型


– logistic regression
– SVMs
– traditional neural networks
– Nearest neighbor


–Gaussians, Naive Bayes 
–Mixtures of Gaussians, Mixtures of experts, HMMs
–Sigmoidal belief networks, Bayesian networks
– Markov random fields


优点


1)分类边界更灵活,比使用纯概率方法或产生式模型更高级;

2)能清晰的分辨出多类或某一类与其他类之间的差异特征;

3)在聚类、viewpoint changes, partial occlusion and scale variations中的效果较好;

4)适用于较多类别的识别;

5)判别模型的性能比产生式模型要简单,比较容易学习。


1)实际上带的信息要比判别模型丰富;

2)研究单类问题比判别模型灵活性强;

3)模型可以通过增量学习得到;

4)能用于数据不完整(missing data)情况。


缺点


1)不能反映训练数据本身的特性。能力有限,可以告诉你的是1还是2,但没有办法把整个场景描述出来;
2)Lack elegance of generative: Priors, 结构, 不确定性;
3)Alternative notions of penalty functions, regularization, 核函数;
4)黑盒操作: 变量间的关系不清楚,不可视。


1)
Tend to produce a significant number of false positives. This is
particularly true for object classes which share a high visual
similarity
such as horses and cows;
2) 学习和计算过程比较复杂。


性能


较好(性能比生成模型稍好些,因为利用了训练数据的类别标识信息,缺点是不能反映训练数据本身的特性)


较差


主要应用


Image and document classification
Biosequence analysis
Time series prediction


NLP(natural language processing)
Medical Diagnosis

首先从bayes公式开头吧

                   P(C/W) = P(C) * P(W/C) / P(W)


个公式是ML中最基本也是最常用到的公式,怎么强调它的重要性都不过分。为了更容易理解这个公式,我将bayes公式放在文本分类问题中进行解释。公式的
左边,C代表的是文本的类别(例如是体育或者娱乐),W往往是一个测试样本(例如某一篇新闻),P(C/W)代表的是这个样本归属于该类别的概率,我们实
际中的任务常常就是要得到样本归属各个类别的概率值P(C1/W),P(C2/W)...P(CN/W),然后最大概率值所对应的类别Ci就是该样本被分
配的类。计算这个概率值的方法就是bayes公式的右边。P(C)表示C这个类别在所有文本中的概率,是先验概率(不急后面会介绍到。实际中,这个值往往通过训练语料计算得到,例如,将训练语料中所有的体育文本数除以训练语料总的文本数,就是体育这个类别的先验概率。P(W)则是通过这个公式计算:
     P(W) =  ∑P(W/Ci) * P(Ci)

可以看出,P(W)的计算可以通过 P(C)和P(W/C)得到。P(W/C)的计算下面将重点介绍。现在的问题是怎样计算P(W/C)。在现实中,W这个样本往往是用向量表示的,包括了很多的分量 W = (w1, w2, w3,  ... wn), 所以 P(W/C) = P(w1, w2, w3,  ... wn / C),NB的核心在于它假设向量的所有分量之间是独立的。(这个同样是贝叶斯的缺点),Wi is independent of Wj, if i != j。对!这个假设就是NB的全部内容了,是不是很简单。有了这个假设,P(W/C)的计算 就变为: P(W/C) = ∏ P(wi / C)

(2)先验概率和条件概率是如何证明的?

朴素贝叶斯多项式模型证明:

上面的推导说明:求导的两个公式可化为2个等式,千万别忘了还有两个和为1的等式,4个等式即可推导出来

PS:拉普拉斯平滑化是为了防止概率为0的情况出现



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

朴素贝叶斯伯努利模型证明:







(3)文本分类的多项式模型和伯努利模型(附加例子说明)

1、基本定义:

分类是把一个事物分到某个类别中。一个事物具有很多属性,把它的众多属性看作一个向量,即x=(x1,x2,x3,…,xn),用x这个向量来代表这个事物,x的集合记为X,称为属性集。类别也有很多种,用集合C={c1,c2,…cm}表示。一般X和C的关系是不确定的,可以将X和C看作是随机变量,P(C|X)称为C的后验概率,与之相对的,P(C)称为C的先验概率。

根据贝叶斯公式,后验概率P(C|X)=P(X|C)P(C)/P(X),但在比较不同C值的后验概率时,分母P(X)总是常数,忽略掉,后验概率P(C|X)=P(X|C)P(C),先验概率P(C)可以通过计算训练集中属于每一个类的训练样本所占的比例,容易估计,对类条件概率P(X|C)的估计,这里我只说朴素贝叶斯分类器方法,因为朴素贝叶斯假设事物属性之间相互条件独立,P(X|C)=∏P(xi|ci)。

2、文本分类过程

例如文档:Good good study Day day up可以用一个文本特征向量来表示,x=(Good, good, study, Day, day , up)。在文本分类中,假设我们有一个文档d∈X,类别c又称为标签。我们把一堆打了标签的文档集合<d,c>作为训练样本,<d,c>∈X×C。例如:<d,c>={Beijing
joins the World Trade Organization, China}对于这个只有一句话的文档,我们把它归类到 China,即打上china标签。

朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(multinomial model)即为词频型和伯努利模型(Bernoulli model)即文档型。二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率的计算方法都不同。计算后验概率时,对于一个文档d,多项式模型中,只有在d中出现过的单词,才会参与后验概率计算,伯努利模型中,没有在d中出现,但是在全局单词表中出现的单词,也会参与计算,不过是作为“反方”参与的。这里暂不考虑特征抽取、为避免消除测试文档时类条件概率中有为0现象而做的取对数等问题。

2.1多项式模型

1)基本原理

在多项式模型中, 设某文档d=(t1,t2,…,tk),tk是该文档中出现过的单词,允许重复,则

先验概率P(c)= 类c下单词总数/整个训练样本的单词总数

类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+|V|)

V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少种单词。 P(tk|c)可以看作是单词tk在证明d属于类c上提供了多大的证据,而P(c)则可以认为是类别c在整体上占多大比例(有多大可能性)。

2)举例

给定一组分好类的文本训练数据,如下:

docId

doc

类别

In c=China?

1

Chinese Beijing Chinese

yes

2

Chinese Chinese Shanghai

yes

3

Chinese Macao

yes

4

Tokyo Japan Chinese

no

给定一个新样本Chinese Chinese Chinese Tokyo Japan,对其进行分类。该文本用属性向量表示为d=(Chinese, Chinese, Chinese, Tokyo, Japan),类别集合为Y={yes, no}。

类yes下总共有8个单词,类no下总共有3个单词,训练样本单词总数为11,因此P(yes)=8/11, P(no)=3/11。类条件概率计算如下:

P(Chinese | yes)=(5+1)/(8+6)=6/14=3/7

P(Japan | yes)=P(Tokyo | yes)= (0+1)/(8+6)=1/14

P(Chinese|no)=(1+1)/(3+6)=2/9

P(Japan|no)=P(Tokyo| no) =(1+1)/(3+6)=2/9

分母中的8,是指yes类别下textc的长度,也即训练样本的单词总数,6是指训练样本有Chinese,Beijing,Shanghai, Macao, Tokyo, Japan 共6个单词,3是指no类下共有3个单词。

有了以上类条件概率,开始计算后验概率:

P(yes | d)=(3/7)3×1/14×1/14×8/11=108/184877≈0.00058417

P(no | d)= (2/9)3×2/9×2/9×3/11=32/216513≈0.00014780

比较大小,即可知道这个文档属于类别china。

2.2伯努利模型

1)基本原理

P(c)= 类c下文件总数/整个训练样本的文件总数

P(tk|c)=(类c下包含单词tk的文件数+1)/(类c下单词总数+2)

2)举例

使用前面例子中的数据,模型换成伯努利模型。

类yes下总共有3个文件,类no下有1个文件,训练样本文件总数为11,因此P(yes)=3/4, P(Chinese | yes)=(3+1)/(3+2)=4/5,条件概率如下:

P(Japan | yes)=P(Tokyo | yes)=(0+1)/(3+2)=1/5

P(Beijing | yes)= P(Macao|yes)= P(Shanghai |yes)=(1+1)/(3+2)=2/5

P(Chinese|no)=(1+1)/(1+2)=2/3

P(Japan|no)=P(Tokyo| no) =(1+1)/(1+2)=2/3

P(Beijing| no)= P(Macao| no)= P(Shanghai | no)=(0+1)/(1+2)=1/3

有了以上类条件概率,开始计算后验概率,

P(yes|d)=P(yes)×P(Chinese|yes)×P(Japan|yes)×P(Tokyo|yes)×(1-P(Beijing|yes))×(1-P(Shanghai|yes))×(1-P(Macao|yes))=3/4×4/5×1/5×1/5×(1-2/5)

×(1-2/5)×(1-2/5)=81/15625≈0.005

P(no|d)= 1/4×2/3×2/3×2/3×(1-1/3)×(1-1/3)×(1-1/3)=16/729≈0.022

因此,这个文档不属于类别china。

(4)垃圾邮件的分类及代码的演示(暂缺以后会补上)

时间: 2024-10-11 22:22:02

朴素贝叶斯分类算法(1)的相关文章

朴素贝叶斯分类算法介绍及python代码实现案例

朴素贝叶斯分类算法 1.朴素贝叶斯分类算法原理 1.1.概述 贝叶斯分类算法是一大类分类算法的总称 贝叶斯分类算法以样本可能属于某类的概率来作为分类依据 朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一种 注:朴素的意思是条件概率独立性 P(A|x1x2x3x4)=p(A|x1)*p(A|x2)p(A|x3)p(A|x4)则为条件概率独立 P(xy|z)=p(xyz)/p(z)=p(xz)/p(z)*p(yz)/p(z) 1.2.算法思想 朴素贝叶斯的思想是这样的: 如果一个事物在一些属性条件发生

朴素贝叶斯分类算法原理分析与代码实现

前言 本文介绍机器学习分类算法中的朴素贝叶斯分类算法并给出伪代码,Python代码实现. 词向量 朴素贝叶斯分类算法常常用于文档的分类,而且实践证明效果是挺不错的. 在说明原理之前,先介绍一个叫词向量的概念. --- 它一般是一个布尔类型的集合,该集合中每个元素都表示其对应的单词是否在文档中出现. 对应关系和词汇表一一对应. 比如说,词汇表只有三个单词:'apple', 'orange', 'melo',某文档中,apple和melo出现过,那么其对应的词向量就是 {1, 0, 1}. 这种模型

数据挖掘系列(8)朴素贝叶斯分类算法原理与实践

隔了很久没有写数据挖掘系列的文章了,今天介绍一下朴素贝叶斯分类算法,讲一下基本原理,再以文本分类实践. 一个简单的例子 朴素贝叶斯算法是一个典型的统计学习方法,主要理论基础就是一个贝叶斯公式,贝叶斯公式的基本定义如下: 这个公式虽然看上去简单,但它却能总结历史,预知未来.公式的右边是总结历史,公式的左边是预知未来,如果把Y看出类别,X看出特征,P(Yk|X)就是在已知特征X的情况下求Yk类别的概率,而对P(Yk|X)的计算又全部转化到类别Yk的特征分布上来. 举个例子,大学的时候,某男生经常去图

基于朴素贝叶斯分类算法的邮件过滤系统

转自穆晨 阅读目录 前言 准备数据:切分文本 训练并测试 小结 回到顶部 前言 朴素贝叶斯算法最为广泛而经典的应用毫无疑问是文档分类,更具体的情形是邮件过滤系统. 本文详细地讲解一个基于朴素贝叶斯分类算法的邮件过滤系统的具体实现. 本文侧重于工程实现,至于其中很多算法的细节请参考之前的一篇文章:朴素贝叶斯分类算法原理分析与代码实现. 回到顶部 准备数据:切分文本 获取到文本文件之后,首先要做的是两件事情: 1. 将文本文件转换为词汇列表 2. 将上一步的结果进一步转换为词向量 对于 1,具体来说

朴素贝叶斯分类算法:对贝叶斯公式的理解

为了完成自己的毕业论文,不得不接触这个朴素贝叶斯分类算法...真是惭愧啊(快毕业了才学这个...还初识) 哈哈,不过只要肯学什么时候都不会晚 要想完全理解这个算法,必须先去百度一下 原来朴素贝叶斯分类算法是借用到了贝叶斯定理,那什么是贝叶斯定理呢...不多BB, 先看一看什么是条件概率:P(A|B)=P(AB)/P(B) 其中P(A|B)指的是在B已经发生的情况下A发生的概率.而这个概率是由A和B同时发生的概率除以B发生的概率.点解???这是我第一次看到这个公式后的反应 当我看完这张图后,就差不

第五篇:朴素贝叶斯分类算法原理分析与代码实现

前言 本文介绍机器学习分类算法中的朴素贝叶斯分类算法并给出伪代码,Python代码实现. 词向量 朴素贝叶斯分类算法常常用于文档的分类,而且实践证明效果挺不错的. 在说明原理之前,先介绍一个叫词向量的概念. --- 它一般是一个布尔类型的集合,该集合中每个元素都表示其对应的单词是否在文档中出现. 比如说,词汇表只有三个单词:'apple', 'orange', 'melo',某文档中,apple和melo出现过,那么其对应的词向量就是 {1, 0, 1}. 这种模型通常称为词集模型,如果词向量元

第六篇:基于朴素贝叶斯分类算法的邮件过滤系统

前言 朴素贝叶斯算法最为广泛而经典的应用毫无疑问是文档分类,更具体的情形是邮件过滤系统. 本文详细地讲解一个基于朴素贝叶斯分类算法的邮件过滤系统的具体实现. 本文侧重于工程实现,至于其中很多算法的细节请参考之前的一篇文章:朴素贝叶斯分类算法原理分析与代码实现. 准备数据:切分文本 获取到文本文件之后,首先要做的是两件事情: 1. 将文本文件转换为词汇列表 2. 将上一步的结果进一步转换为词向量 对于 1,具体来说,就是将文本文件以非字母或数字之外的字符为界进行切割. 仅仅使用字符串的 split

《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现

============================================================================================ <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记,包括对当中算法的理解和算法的Python代码实现 另外博主这里有机器学习实战这本书的全部算法源码和算法所用到的源文件,有须要的留言 ====================================================

分类与监督学习,朴素贝叶斯分类算法

1.理解分类与监督学习.聚类与无监督学习. 简述分类与聚类的联系与区别? 分类与聚类:是把某个对象划分到某个具体的已经定义的类别当中,而聚类是把一些对象按照具体特征组织到若干个类别里. 虽然都是把某个对象划分到某个类别中,但是分类的类别是已经预定义的,而聚类操作时,某个对象所属的类别 却不是预定义的,而是可以根据情况做若干个聚类中心. 简述什么是监督学习与无监督学习. 监督学习与无监督学习:对于新的实例,监督学习可以用于映射出该实例的类别. 对于无监督学习,我们只知道特征,并不知 道答案,不同的