优秀的手机游戏下载!
首页 朴素贝叶斯(Naive

朴素贝叶斯(Naive

发布时间:2024-06-05 09:39:02 编辑:手游帝 浏览:289

朴素贝叶斯算法属于分类算法。发源于古典数学理论,对缺失数据不太敏感,有稳定的分类效率,模型所需估计的参数很少,算法比较简单。

朴素贝叶斯算法 贝叶斯 是说明这个算法和贝叶斯定理有联系,而 朴素 是因为处理实际的需要,做了一个简化—— 假设每个特征之间是独立的 (如果研究的对象互相之间的影响很强,计算概率时考虑的问题非常复杂,做了独立假设,就可以分解后进行研究),这是这个算法模型与贝叶斯定理的区别。

将 x 作为特征,y 作为类别,那公式左边的 P(yi|x)就是说在知道特征 x 的情况下,计算这个特征属于 yi 类的可能性大小。通过比较找出这个可能性的值最大的属于哪一类,就将特征 x 归为这一类。

第3步的计算就是整个关键所在,计算依据是上面的贝叶斯公式。

对于每一个类的概率计算,公式右边的分母的 P(x)都是相同的,所以可以不计算(我们只是对最终结果进行比较,不影响)。

P(yi)也称为先验概率,是 x 属于 yi 类的一个概率,这个是通过历史信息得到的(在程序实现的时候,历史信息或者说先验信息就是我们的训练数据集),我们通过对训练样本数据进行统计,分别算出 x 属于 y1,y2,...,yn 类的概率是多少,这个是比较容易得到的。

所以,主要是求 P(x|yi)= P(a1,a2,...,am|yi)

这个时候对于贝叶斯模型的 朴素 的独立性假设就发挥作用了(综合的计算变成了独立计算后的综合,简化模型,极大地减少了计算的复杂程度):

P(a1,a2,...,am|yi) = P(a1|yi)P(a2|yi)...P(am|yi)

所以计算想要得到的东西如下:

一个程序简例

第10天:NLP补充——朴素贝叶斯(Naive-Bayes)

在介绍朴素贝叶斯算法之前,我们来看看关于统计学的一些基础知识:

贝叶斯定理需要先验知识作为支撑,而先验知识需要大量的计算和历史数据,因此在很长一段时间内,无法得到广泛应用。只有计算机诞生以后,它才获得真正的重视。人们发现,许多统计量是无法进行客观判断的,而互联网时代出现的大型数据集,再加上告诉运算能力,为验证这些统计量提供了方便,也为应用贝叶斯定理创造了条件。

条件概率:

同理可得:

即:

全概率公式:

若事件  、  、…… 构成一个完备事件组即 ,且都有正概率,那么对于任意一个事件A,有如下公式

贝叶斯公式:

贝叶斯公式与全概率公式相反,是在已知 的基础上,求  。

通过对条件概率的简单变形,就可以得到贝叶斯公式:

贝叶斯公式由三部分形成,先验概率、后验概率、似然估计。其中后验概率 = 先验概率 * 似然估计。在上述公式中, 是先验概率, 是似然估计, 是后验概率。

所谓先验概率就是在事件A发生之前,我们对B事件概率的一个判断。后验概率则指的是在事件A发生之后,我们对B事件概率的重新评估。似然估计是一个调整因子或者修正参数,在我们计算事件概率的时候,需要不断通过修正参数使得我们所求的概率无限接近于真实概率。

如果似然估计   ,那么表示A事件的发生提高了B事件发生的概率。相反的,如果似然估计  ,那么表示A事件的发生降低了B事件发生的概率。

从统计学知识回到我们的数据分析。假如我们的分类模型样本是:

即我们有m个样本,每个样本有n个特征,特征输出有K个标签,定义为 。从样本我们可以学习得到朴素贝叶斯的先验分布 ,条件概率分布 ,然后我们就可以用贝叶斯公式得到 :

分析上面的式子,  =   即标签 在训练集中出现的频数。但是 是一个复杂的n个维度的条件分布,很难计算。所以为了简化计算,朴素贝叶斯模型中假设n个特征之间相互独立,于是有:

最后回到我们要解决的问题,我们的问题是给定测试集的一个新样本特征

,我们如何判断它属于哪个类型?

贝叶斯模型的目标是后验概率最大化来判断分类。我们只要计算出所有的K个条件概率

然后找出最大的条件概率对应的类别。

我们预测的类别 是使 最大的类别:

分析上式可知分母 是固定值,因此预测公式可以简化为:

接着我们利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:

在朴素贝叶斯算法中,学习意味着估计 和 。可以用极大似然估计法估计相应的概率。先验概率 的极大似然估计是:

其中 即样本中标签 出现的次数在总样本数 中的占比。

第 个特征 可能的取值集合为 ,似然函数

即 标签中,第 个特征 中各种取值的次数在 标签出现总次数中的占比。

在用极大似然估计时,可能特征 的某些取值在 标签样本中没有出现,这时似然函数为 ,同时导致目标函数为 ,这会使分类产生偏差。为解决这一问题采用贝叶斯估计:

其中 是 标签中第 个特征不重复数值的个数。当 是就是极大似然估计,当 时,称为拉普拉斯平滑。同样,先验概率的贝叶斯估计是:

https://bigquant.com/community/t/topic/126054

小伙伴们如果觉得文章还行的请点个赞呦!!同时觉得文章哪里有问题的可以评论一下  谢谢你!

数据挖掘十大经典算法(1)——朴素贝叶斯(Naive Bayes)

1、引言

  贝叶斯方法是一个历史悠久,朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。当然有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口。

2、贝叶斯公式

贝叶斯公式其实很简单,但是很常用,就一行:

  而我们二分类问题的最终目的就是要判断 P(“属于某类”|“具有某特征”) 是否大于1/2就够了。贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,而后者获取方法就简单多了,我们只需要找到一些包含已知特征标签的样本,即可进行训练。而样本的类别标签都是明确的,所以贝叶斯方法在机器学习里属于有监督学习方法。

  这里再补充一下,一般『先验概率』、『后验概率』是相对出现的,比如 P(Y)与 P(Y|X) 是关于 Y的先验概率与后验概率, P(X)与 P(X|Y)是关于 X的先验概率与后验概率。

4、垃圾邮件识别

  我们可以通过一个例子来对邮件进行分类,识别垃圾邮件和普通邮件,如果我们选择使用朴素贝叶斯分类器,那目标就是判断 P(“垃圾邮件”|“具有某特征”) 是否大于1/2。现在假设我们有垃圾邮件和正常邮件各1万封作为训练集。需要判断以下这个邮件是否属于垃圾邮件:

也就是判断概率 P(“垃圾邮件”|“我司可办理正规发票(保真)17%增值税发票点数优惠!”)是否大于1/2。我们不难发现:通过上述的理解,也就是将其转换成的这个概率,计算的方法:就是写个计数器,然后+1 +1 +1统计出所有垃圾邮件和正常邮件中出现这句话的次数啊。也就是:

  于是当我们接触到了中文NLP中,其中最为重要的技术之一:分词!!!也就是把一整句话拆分成更细粒度的词语来进行表示。另外,分词之后去除标点符号、数字甚至无关成分(停用词)是特征预处理中的一项技术。我们观察(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”),这可以理解成一个向量:向量的每一维度都表示着该特征词在文本中的特定位置存在。这种将特征拆分成更小的单元,依据这些更灵活、更细粒度的特征进行判断的思维方式,在自然语言处理与机器学习中都是非常常见又有效的。因此贝叶斯公式就变成了:

1、朴素贝叶斯(Naive Bayes),“Naive”在何处?

  加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes)。将句子(“我”,“司”,“可”,“办理”,“正规发票”) 中的 (“我”,“司”)与(“正规发票”)调换一下顺序,就变成了一个新的句子(“正规发票”,“可”,“办理”, “我”, “司”)。新句子与旧句子的意思完全不同。但由于乘法交换律,朴素贝叶斯方法中算出来二者的条件概率完全一样!计算过程如下:

其中“发票”重复了三次。

3、处理重复词语的三种方式

(1)、多项式模型:

  如果我们考虑重复词语的情况,也就是说,重复的词语我们视为其出现多次,直接按条件独立假设的方式推导,则有:

统计计算 P(“词语”|S)时也是如此。

我们扫描一下训练集,发现“正规发票”这个词从出现过!!! ,于是 P(“正规发票”|S)=0 …问题严重了,整个概率都变成0了!!!朴素贝叶斯方法面对一堆0,很凄惨地失效了…更残酷的是这种情况其实很常见,因为哪怕训练集再大,也可能有覆盖不到的词语。本质上还是样本数量太少,不满足大数定律,计算出来的概率失真 *。为了解决这样的问题,一种分析思路就是直接不考虑这样的词语,但这种方法就相当于默认给P(“正规发票”|S)赋值为1。其实效果不太好,大量的统计信息给浪费掉了。我们进一步分析,既然可以默认赋值为1,为什么不能默认赋值为一个很小的数?这就是平滑技术的基本思路,依旧保持着一贯的作风,朴实/土但是直接而有效。对于伯努利模型,P(“正规发票”|S)的一种平滑算法是:

接下来的核心问题就是训练出一个靠谱的分类器。首先需要有打好标签的文本。这个好找,豆瓣影评上就有大量网友对之前电影的评价,并且对电影进行1星到5星的评价。我们可以认为3星以上的评论都是好评,3星以下的评论都是差评。这样就分别得到了好评差评两类的语料样本。剩下就可以用朴素贝叶斯方法进行训练了。基本思路如下:

但是由于自然语言的特点,在提取特征的过程当中,有一些tricks需要注意:

当然经过以上的处理,情感分析还是会有一部分误判。这里涉及到许多问题,都是情感分析的难点:

(2)、拼写纠错

  拼写纠错本质上也是一个分类问题。但按照错误类型不同,又分为两种情况:

朴素贝叶斯(Naive

真词错误复杂一些,我们将在接下来的文章中进行探讨。而对于非词错误,就可以直接采用贝叶斯方法,其基本思路如下:

训练样本1:该场景下的正常用词语料库,用于计算 P(候选词i)。

训练样本2:该场景下错误词与正确词对应关系的语料库,用于计算 P(错误词|候选词i)

当然,朴素贝叶斯也是有缺陷的。比如我们知道朴素贝叶斯的局限性来源于其条件独立假设,它将文本看成是词袋子模型,不考虑词语之间的顺序信息,例如:朴素贝叶斯会把“武松打死了老虎”与“老虎打死了武松”认作是一个意思。那么有没有一种方法提高其对词语顺序的识别能力呢?当然有,就是这里要提到的N-gram语言模型。接下来详细给大家介绍N-gram语言模型。

1、从假设性独立到联合概率链规则

 与我们之前我们垃圾邮件识别中的条件独立假设是一样的:

4、N-gram实际应用举例

(1)、词性标注

  词性标注是一个典型的多分类问题。常见的词性包括名词、动词、形容词、副词等。而一个词可能属于多种词性。如“爱”,可能是动词,可能是形容词,也可能是名词。但是一般来说,“爱”作为动词还是比较常见的。所以统一给“爱”分配为动词准确率也还足够高。这种最简单粗暴的思想非常好实现,如果准确率要求不高则也比较常用。它只需要基于词性标注语料库做一个统计就够了,连贝叶斯方法、最大似然法都不要用。词性标注语料库一般是由专业人员搜集好了的,长下面这个样子。其中斜线后面的字母表示一种词性,词性越多说明语料库分得越细;需要比较以下各概率的大小,选择概率最大的词性即可:

将公式进行以下改造,比较各概率的大小,选择概率最大的词性:

N-gram分类器是结合贝叶斯方法和语言模型的分类器。这里用 Y1,Y2分别表示这垃圾邮件和正常邮件,用 X表示被判断的邮件的句子。根据贝叶斯公式有:

比较这些概率的大小,找出使得 P(Yi|X)最大的 Yi即可得到 X 所属的分类(分词方案)了。Yi作为分词方案,其实就是个词串,比如(“我司”,“可”,“办理”,“正规发票”)(“我”,“司可办”,“理正规”,“发票”),也就是一个向量了。而上面贝叶斯公式中 P(X|Yi)项的意思就是在分类方案 Yi的前提下,其对应句子为 X的概率。而无论分词方案是(“我司”,“可”,“办理”,“正规发票”)还是(“我”,“司可办”,“理正规”,“发票”),或者其他什么方案,其对应的句子都是“我司可办理正规发票”。也就是说任意假想的一种分词方式之下生成的句子总是唯一的(只需把分词之间的分界符号扔掉剩下的内容都一样)。于是可以将 P(X|Yi)看作是恒等于1的。这样贝叶斯公式又进一步化简成为:

也就是说我们

在此推出一个算法系列的科普文章。我们大家在平时埋头工程类工作之余,也可以抽身对一些常见算法进行了解,这不仅可以帮助我们拓宽思路,从另一个维度加深对计算机技术领域的理解,做到触类旁通,同时也可以让我们搞清楚一些既熟悉又陌生的领域——比如数据挖掘、大数据、机器学习——的基本原理,揭开它们的神秘面纱,了解到其实很多看似高深的领域,其实背后依据的基础和原理也并不复杂。而且,掌握各类算法的特点、优劣和适用场景,是真正从事数据挖掘工作的重中之重。只有熟悉算法,才可能对纷繁复杂的现实问题合理建模,达到最佳预期效果。

本系列文章的目的是力求用最干练而生动的讲述方式,为大家讲解由国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 于2006年12月评选出的数据挖掘领域的十大经典算法。它们包括:

本文作为本系列的第一篇,在介绍具体算法之前,先简单为大家铺垫几个数据挖掘领域的常见概念:

在数据挖掘领域,按照算法本身的行为模式和使用目的,主要可以分为分类(classification),聚类(clustering)和回归(regression)几种,其中:

打几个不恰当的比方

另外,还有一个经常有人问起的问题,就是 数据挖掘 机器学习 这两个概念的区别,这里一句话阐明我自己的认识:机器学习是基础,数据挖掘是应用。机器学习研制出各种各样的算法,数据挖掘根据应用场景把这些算法合理运用起来,目的是达到最好的挖掘效果。

当然,以上的简单总结一定不够准确和严谨,更多的是为了方便大家理解打的比方。如果大家有更精当的理解,欢迎补充和交流。

好了,铺垫了这么多,现在终于进入正题!

作为本系列入门的第一篇,先为大家介绍一个容易理解又很有趣的算法—— 朴素贝叶斯

先站好队,朴素贝叶斯是一个典型的 有监督的分类算法

光从名字也可以想到,要想了解朴素贝叶斯,先要从 贝叶斯定理 说起。

贝叶斯定理是我们高中时代学过的一条概率学基础定理,它描述了条件概率的计算方式。不要怕已经把这些知识还给了体育老师,相信你一看公式就能想起来。

P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:

其中,P(AB)表示A和B同时发生的概率,P(B)标识B事件本身的概率。

贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A)。

而贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

下面不加证明地直接给出贝叶斯定理:

有了贝叶斯定理这个基础,下面来看看朴素贝叶斯算法的基本思路。

你看,其思想就是这么的朴素。那么,属于每个分类的概率该怎么计算呢?下面我们先祭出形式化语言!

那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:

因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

如果你也跟我一样,对形式化语言有严重生理反应,不要怕,直接跳过前面这一坨,我们通过一个鲜活的例子,用人类的语言再解释一遍这个过程。

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

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他最有可能患有何种疾病?

本质上,这就是一个典型的分类问题, 症状 职业 是特征属性, 疾病种类 是目标类别

根据 贝叶斯定理

可得

假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了

这是可以计算的。

因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。

接下来,我们再举一个朴素贝叶斯算法在实际中经常被使用的场景的例子—— 文本分类器 ,通常会用来识别垃圾邮件。

首先,我们可以把一封邮件的内容抽象为由若干关键词组成的集合,这样是否包含每种关键词就成了一封邮件的特征值,而目标类别就是 属于垃圾邮件 不属于垃圾邮件

假设每个关键词在一封邮件里出现与否的概率相互之间是独立的,那么只要我们有若干已经标记为垃圾邮件和非垃圾邮件的样本作为训练集,那么就可以得出,在全部垃圾邮件(记为Trash)出现某个关键词Wi的概率,即 P(Wi|Trash)

而我们最重要回答的问题是,给定一封邮件内容M,它属于垃圾邮件的概率是多大,即 P(Trash|M)

根据贝叶斯定理,有

我们先来看分子:

P(M|Trash) 可以理解为在垃圾邮件这个范畴中遇见邮件M的概率,而一封邮件M是由若干单词Wi独立汇聚组成的,只要我们所掌握的单词样本足够多,因此就可以得到

这些值我们之前已经可以得到了。

再来看分子里的另一部分 P(Trash) ,这个值也就是垃圾邮件的总体概率,这个值显然很容易得到,用训练集中垃圾邮件数除以总数即可。

而对于分母来说,我们虽然也可以去计算它,但实际上已经没有必要了,因为我们要比较的 P(Trash|M) 和 P(non-Trash|M) 的分母都是一样的,因此只需要比较分子大小即可。

这样一来,我们就可以通过简单的计算,比较邮件M属于垃圾还是非垃圾二者谁的概率更大了。

朴素贝叶斯的英文叫做 Naive Bayes ,直译过来其实是 天真的贝叶斯 ,那么他到底天真在哪了呢?

这主要是因为朴素贝叶斯的基本假设是所有特征值之间都是相互独立的,这才使得概率直接相乘这种简单计算方式得以实现。然而在现实生活中,各个特征值之间往往存在一些关联,比如上面的例子,一篇文章中不同单词之间一定是有关联的,比如有些词总是容易同时出现。

因此,在经典朴素贝叶斯的基础上,还有更为灵活的建模方式—— 贝叶斯网络(Bayesian Belief Networks, BBN) ,可以单独指定特征值之间的是否独立。这里就不展开了,有兴趣的同学们可以做进一步了解。

最后我们来对这个经典算法做个点评:

优点:

缺点:

好了,对于 朴素贝叶斯 的介绍就到这里,不知道各位看完之后是否会对数据挖掘这个领域产生了一点兴趣了呢?

以上就是关于朴素贝叶斯(Naive Bayes)算法全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

朴素贝叶斯算法属于分类算法。发源于古典数学理论,对缺失数据不太敏感,有稳定的分类效率,模型所需估计的参数很少,算法比较简单。 朴素贝叶斯算法 , 贝叶斯 是说明…
查看详情
朴素贝叶斯算法属于分类算法。发源于古典数学理论,对缺失数据不太敏感,有稳定的分类效率,模型所需估计的参数很少,算法比较简单。 朴素贝叶斯算法 , 贝叶斯 是说明…
查看详情
朴素贝叶斯算法属于分类算法。发源于古典数学理论,对缺失数据不太敏感,有稳定的分类效率,模型所需估计的参数很少,算法比较简单。 朴素贝叶斯算法 , 贝叶斯 是说明…
查看详情
相关资讯
猜你喜欢