导航:首页 > 源码编译 > 机器学习生动理解朴素贝叶斯算法

机器学习生动理解朴素贝叶斯算法

发布时间:2023-05-27 12:01:36

⑴ 分类算法 - 朴素贝叶斯算法

相信很多同学在高中或者大学的时候都学过贝叶斯原理,即条件原理。

现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个红球,问这个球来自容器 A 的概率是多少?

假设已经抽出红球为事件 B,选中容器 A 为事件 A,则有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10,按照公式,则有:P(A|B) = (7/10)*(1/2) / (8/20) = 0.875

之所以称为朴素贝叶斯, 是因为它假设每个输入变量是独立的。 现实生活中这种情况基本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。

朴素贝叶斯模型由两种类型的概率组成:
1、每个类别的概率P(Cj);
2、每个属性的条件概率P(Ai|Cj)。

为了训练朴素贝叶斯模型,我们需要先给出训练数据,以及这些数据对应的分类。那么上面这两个概率,也就是类别概率和条件概率。他们都可以从给出的训练数据中计算出来。一旦计算出来,概率模型就可以使用贝叶斯原理对新数据进行预测。

贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的
贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束, 如果属性之间存在关联,分类准确率会降低。

(1) 算法逻辑简单,易于实现
(2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)

(1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
(2)在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

库有3种算法:GaussianNB、MultinomialNB和BernoulliNB。
这三个类适用的分类场景各不相同,主要根据数据类型来进行模型的选择。一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

⑵ 机器学习中常见算法优缺点之朴素贝叶斯算法

在机器学习中有很多算法,而有一种算法有着坚实的数学背景,并且被广泛使用,这种算法就是朴素贝叶斯算法。当然,朴素贝叶斯算法的优点有很多,但这种算法的缺点也是我们不能忽视的,那么大家知道不知道朴素贝叶斯算法的优点和缺点是什么呢?下面我们就给大家介绍一下这个问题。
那么什么是朴素贝叶斯算法呢?其实朴素贝叶斯属于生成式模型,也就是关于生成模型和判别式模型,主要还是在于是否需要求联合分布,这种算法是一种比较简单的算法,你只需做一堆计数即可。如果注有条件独立性假设,朴素贝叶斯分类器的收敛速度将快于判别模型,比如逻辑回归,所以你只需要较少的训练数据即可。即使NB条件独立假设不成立,NB分类器在实践中仍然表现的很出色。它的主要缺点是它不能学习特征间的相互作用,用mRMR中R来讲,就是特征冗余。
那么朴素贝叶斯算法的优点是什么呢?这种算法的优点有五个,第一就是朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。第二就是对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。第三就是对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练)。第四就是对缺失数据不太敏感,算法也比较简单,常用于文本分类。第五就是朴素贝叶斯对结果解释容易理解。
当然,朴素贝叶斯算法的缺点也是很明显的,朴素贝叶斯算法的缺点有四点,第一就是需要计算先验概率。第二就是分类决策存在错误率。第三就是对输入数据的表达形式很敏感。第四就是对由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。
那么朴素贝叶斯应用领域是什么呢?其实朴素贝叶斯算法在欺诈检测中使用较多。当然,我们还可以用朴素贝叶斯算法来决定一封电子邮件是否是垃圾邮件。还可以用朴素贝叶斯算法判断一篇文章应该的类别,同时也能够使用贝叶斯算法去判断一段文字表达的是积极的情绪还是消极的情绪。从中我们可以看出朴素贝叶斯算法是一个十分实用的算法。
在这篇文章中我们给大家介绍了关于朴素贝叶斯算法优缺点的相关知识,通过对这些知识的讲解相信大家已经对朴素贝叶斯算法有了一定的了解,希望这篇文章能够帮助大家。

⑶ 第10天:NLP补充——朴素贝叶斯(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)、拼写纠错
  拼写纠错本质上也是一个分类问题。但按照错误类型不同,又分为两种情况:

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

训练样本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的。这样贝叶斯公式又进一步化简成为:

也就是说我们

⑷ 朴素贝叶斯

        在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,但是朴素贝叶斯却是生成方法。

如何理解这句话,看例题:

        根据上述数据集,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?

这里我们联系到朴素贝叶斯公式:

p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁)---------->要使这个公式成立,需要各个特征之间相互独立。

而朴素贝叶斯算法就是假设各个特征之间相互独立。

1、假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。

2、假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁)。我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。

        根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。

所以公式整理以后变为:

整理训练数据中,嫁的样本数如下:

分别计算各个概率:

p(嫁) = 6/12(总样本数) = 1/2

p(不帅|嫁) = 3/6 = 1/2

p(性格不好|嫁)= 1/6

p(矮|嫁) = 1/6

p(不上进|嫁) = 1/6

总样本为:

p(不帅) = 4/12 = 1/3

p(性格不好) = 4/12 = 1/3

p(身高矮) = 7/12

p(不上进) = 4/12 = 1/3

将以上概率带入公式,就能得出嫁的概率。

总结:理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。

而在属性相关性较小时,朴素贝叶斯性能最 为良好。

⑸ 朴素贝叶斯算法是什么

朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。

也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。

朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。

个人贡献:

贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。1763年发表了这方面的论着,对于现代概率论和数理统计都有很重要的作用。贝叶斯的另一着作《机会的学说概论》发表于1758年.贝叶斯所采用的许多术语被沿用至今。

他对统计推理的主要贡献是使用了"逆概率"这个概念,并把它作为一种普遍的推理方法提出来。贝叶斯定理原本是概率论中的一个定理,这一定理可用一个数学公式来表达,这个公式就是着名的贝叶斯公式。

⑹ 朴素贝叶斯算法

贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决“逆向概率”的问题。首先我们先来解释下正向概率与逆向概率的含义:

正向概率 :假设一个箱子里有5个黄色球和5个白色球,随机从箱子里拿出一个球,请问取出的是黄球的概率是多少?很容易计算P(黄球)= N(黄球)/N(黄球)+ N(白球) = 5/5+5 = 1/2。
逆向概率 :起初我们并不知道箱子里有多少个球,我们依次从箱子里取出10个球,发现这个10个球中有7个白球,3个黄球,那么我们会根据我们观察到的结果去推测箱子里白球与黄球的分布比例大概是7:3,但是我们无法推测出箱子里的球的个数。

贝叶斯算法是一种基于概率统计的机器学习算法,它会计算出每种情况发生的概率,然后对其进行分类,贝叶斯算法经常用于文本分类问题和垃圾邮件过滤问题。假设有一篇新闻报道news report,我们使用贝叶斯算法来判断它们的类别,结果如下:
p(politics|news) = 0.2
p(entertainment|news) = 0.4
p(sports|news) = 0.7
因为p(sports|news)的概率最大,所以我们判断这篇新闻报道为体育类报道。“|”左边为要判断的类别,右边是我们给定的文章。

贝叶斯公式推导
接下来,我们将通过一个例子来推导贝叶斯公式。在一所学校里,男生和女生的比例分别是60%和40%,男生全部穿长裤,女生一半穿长裤,一半穿裙子。现迎面走来一个同学,你只能看清他(她)穿的是长裤,而无法分辨出他(她)的性别,请问他(她)是女生的概率?

下面我们逐步计算这个问题:
假设学校里的学生总数为N。
男生人数:N * P(boys),女生人数:N * P(girls)。
穿长裤的男生人数:N * P(boys) * P(pants|boys),其中P(pants|boys)是条件概率的表达形式,意思是男生中穿长裤的概率。因为男生都穿长裤,所以N * P(boys) * P(pants|boys) = 60% * N。
穿长裤的女生的人数:N * P(girs) * P(pants|girls) = 0.2 * N。
穿长裤的总人数:N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls)
穿长裤的同学是女生的概率:P(girl|pants) = N * P(girs) * P(pants|girls) / N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls) = P(girs)*P(pants|girls) / P(pants),分母用P(pants)表示穿长裤的概率。
最终结果:P(girl | pants) = P(pants | girl) * P(girl) / P(pants)
其中:P(girl)我们称为先验概率,是已知值,在这个例子中P(girl) = 40%。先验概率:根据以往的经验和分析得到的结果,先验概率和其他条件的影响不受样本影响。
P(girl | pants)我们称为后验概率,根据观察到的结果,去反推是女生的概率。
贝叶斯数学表达式

贝叶斯算法在垃圾邮件过滤中的应用
给定一封邮件,判定它是否属于垃圾邮件?用D 来表示这封邮件,注意D 由N 个单词组成。我们用h+ 来表示垃圾邮件,h-表示正常邮件。
有贝叶斯公式可得:
P(h+ | D) = P(D | h+) * P(h+) / P(D)
P(h- | D) = P(D | h-) * P(h-) / P(D)
其中P(h+),P(h-)为先验概率,假如我们有1000封邮件,其中有50封是垃圾邮件,其他都是正常邮件,那么P(h+),P(h-)的概率就是已知的。两个式子的分母都是P(D),所以P(D)对于最终结果的比较是没有影响的。接下来就是要求P(D | h+),P(D | h-)垃圾邮件中或正常邮件中是邮件D的概率。
我们都知道一封邮件是由许多词构成的,所以我们将P(D | h+)的表达式转化为P(d1,d2,d3......dn | h+),就是看垃圾邮件中出现d1,d2...dn这些词的概率是多少。
P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 |d1,h+) * P(d3 |d1,d2,h+) ...
这个式子计算起来非常困难,所以在这里我们做一个假设,假设每个词都是独立的并且互不影响,那么这个式子就可以表示为:
P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)
P(h+ | D) = {P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)}* P(h+) / P(D)
上述这个式子我们就称为朴素贝叶斯公式,朴素贝叶斯公式是对贝叶斯公式的简化,它建立在每个条子互相独立的基础上。
在现实生活中,我们写的每一句话中词与词之间肯定是有相互联系,如果没有联系,那么这句话是读不通的。那么为什么朴素贝叶斯能够在计算中使用,首先是计算简单,其次对最终结果的影响非常小。
参考资料
1.唐宇迪,《机器学习与数据分析实战》课程。
2.Peter,《机器学习实战》。

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

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

本系列文章的目的是力求用最干练而生动的讲述方式,为大家讲解由国际权威的学术组织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) ,可以单独指定特征值之间的是否独立。这里就不展开了,有兴趣的同学们可以做进一步了解。

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

优点:

缺点:

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

阅读全文

与机器学习生动理解朴素贝叶斯算法相关的资料

热点内容
搜索pdf内容 浏览:497
程序员装机必备的软件 浏览:9
php微信第三方登录demo 浏览:536
上海php工具开发源码交付 浏览:790
哪里有求购黄页的源码 浏览:194
商城矿机源码矿场系统 浏览:196
单片机的led灯熄灭程序 浏览:224
洛阳python培训 浏览:702
小键盘命令 浏览:194
单片机c语言返回主程序 浏览:816
dockerpythonweb 浏览:970
程序员算法有多强 浏览:717
pythonworkbook模块 浏览:245
什么app能查医生 浏览:175
轻量级的编程语言 浏览:338
程序员那么可爱生孩子 浏览:432
后缀him3加密文件是什么软件 浏览:986
坚果隐藏app为什么要140版本才能用 浏览:315
淘宝dns服务器地址 浏览:259
领英转型app哪个好用 浏览:943