数据挖掘面试题之朴素贝叶斯

转载:

简述朴素贝叶斯算法原理和工作流程
事件A和B同时发生的概率为在A发生的情况下发生B或者在B发生的情况下发生A。

所以有:

对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

工作原理:

假设现在有样本这个待分类项(并认为x中的特征独立)。
再假设现在有分类目标
那么就是最终的分类类别。

因为x对于每个分类目标来说都一样,所以就是求(插一句,也就是在,这也是生成模型和判别模型的主要区别。)

而具体的和都是能从训练样本中统计出来。表示该类别下该特征出现的概率,表示全部类别中这个类别出现的概率。
这样就能找到应该属于的类别了。
工作流程:

准备阶段。确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本。
训练阶段。计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计。
应用阶段。使用分类器进行分类,输入是分类器和待分类样本,输出是样本属于的分类类别。
什么是先验概率和后验概率
先验概率是根据以往经验和分析得到的概率,如全概率公式,它往往作为“由因求果”问题中的“因”出现。后验概率是指在得到“结果”的信息后重新修正的概率,是“执果寻因”问题中的“因”。后验概率是基于新的信息,修正原来的先验概率后所获得的更接近实际情况的概率估计。先验概率和后验概率是相对的。如果以后还有新的信息引入,更新了现在所谓的后验概率,得到了新的概率值,那么这个新的概率值被成为后验概率。

为什么朴素贝叶斯如此“朴素”
因为它假定所有的特征在数据集中的作用是同样重要和独立的。正如我们所知,这个假设在现实世界中是很不真实的,因此,说朴素贝叶斯真的很“朴素”。

朴素贝叶斯模型(Naive Bayesian Model)的朴素(Naive)的含义是“很简单很天真”地假设样本特征彼此独立,这个假设现实中基本不存在,但特征相关性很小的实际情况还是很多的,所以这个模型仍能够工作得很好。

什么是贝叶斯决策理论
贝叶斯决策理论是主观贝叶斯派归纳理论的重要组成部分。贝叶斯决策就是在不完全情报下,对部分未知的状态用主观概率估计,然后用贝叶斯公式对发生概率进行修正,最后再利用期望值和修正概率作出最优决策(选择概率最大的类别)。

扫描二维码关注公众号,回复: 9716118 查看本文章

贝叶斯决策理论方法是统计模型决策中的一个基本方法,其基本思想是:

已知类条件概率密度参数表达式和先验概率。
利用贝叶斯公式转换成后验概率。
根据后验概率大小进行决策分类。
朴素贝叶斯算法的前提假设
特征之间相互独立
每个特征同等重要
为什么属性独立性假设在实际情况中很难成立,但朴素贝叶斯仍能取得较好的效果
对于分类任务来说,只要各类别的条件概率排序正确,是无需精准概率值即可正确分类。
如果属性间依赖对所有类别影响相同,或依赖关系的影响能相互抵消,则属性条件独立性假设在降低计算开销的同时不会对性能产生负面影响。
由于在现实世界中,大多数特征虽不能独立,但大多呈现弱相关性,所以对于模型即使有影响也不是很大。
朴素贝叶斯可以做多分类吗
可以。朴素贝叶斯是选出各个分类类别后验概率最大的作为最终的分类。

和二分类相比,多分类只是类别个数变成了N,其他过程是一样的。在分类的时候,计算每一个后验概率,选取最大的概率对应的类别作为分类的结果。

什么是朴素贝叶斯中的零概率问题?如何解决?(拉普拉斯平滑)
零概率问题,就是在计算实例的概率时,如果某个量x,在观察样本库(训练集)中没有出现过,会导致整个实例的概率结果是0.

假设现在有样本这个待分类项(并认为x中的特征独立),再假设现在有分类目标,那么就是最终的分类类别。

,若为零则无法计算。为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,所以加法平滑也叫做拉普拉斯平滑。

假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

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

将朴素贝叶斯中的所有概率计算应用拉普拉斯平滑即可以解决零概率问题。

朴素贝叶斯中概率计算的下溢问题如何解决
在朴素贝叶斯的计算过程中,需要对特定分类中各个特征出现的概率进行连乘,小数相乘,越乘越小,这样就造成了下溢出。在程序中,在相应小数位置进行四舍五入,计算结果可能就变成0了。

为了解决这个问题,对乘积结果取自然对数。通过求对数可以避免下溢出或者浮点数舍入导致的错误。

取对数,

可以发现取对数之后并不影响其变化趋势。将小数的乘法操作转化为取对数后的加法操作,规避了变为零的风险同时并不影响分类结果。

朴素贝叶斯分类器对异常值敏感吗?
朴素贝叶斯是一种对异常值不敏感的分类器,保留数据中的异常值,常常可以保持贝叶斯算法的整体精度,如果对原始数据进行降噪训练,分类器可能会因为失去部分异常值的信息而导致泛化能力下降。

为什么对异常值不敏感呢,个人理解是因为朴素贝叶斯分类器是一个概率模型,如果输入是一个正常的样本,则异常值并不会影响到正常样本的后验概率,因为对于正常样本而言,其都是正常的,并会使用到异常的。如果是一个异常的样本,反而已有的异常值可以帮助到该异常样本更好的分类。

对于类别变量根据频率去估计时就如上所述——异常值的存在反而会提高分类器的泛化能力。但如果是对于连续型属性的异常值则会产生对分类器产生一定的影响,因贝叶斯对连续值的处理往往是通过估计其概率分布的参数,若有异常值存在则其概率分布将会产生偏移。若是分类变量则之间统计出现次数是不会产生偏移的。

当数据的属性是连续型变量时,朴素贝叶斯算法如何处理
当朴素贝叶斯算法数据的属性为连续型变量时,有两种方法可以计算属性的类条件概率。

第一种方法是把一个连续的属性离散化,然后用相应的离散区间替换连续属性值,之后用频率去表示类条件概率。但这种方法不好控制离散区间划分的粒度。如果粒度太细,就会因为每个区间内训练记录太少而不能对做出可靠估计,如果粒度太粗,那么有些区间就会有来自不同类的记录,因此失去了正确的决策边界。
第二种方法是假设连续变量服从某种概率分布,然后使用训练数据估计分布的参数,例如可以使用高斯分布来表示连续属性的类条件概率分布。,为类的所有训练记录关于的样本均值估计,为类的所有训练记录关于的样本方差估计。通过高斯分布估计出类条件概率。
朴素贝叶斯算法对缺失值敏感吗
不敏感,朴素贝叶斯算法能够处理缺失的数据,在算法的建模时和预测时数据的属性都是单独处理的。因此如果一个数据实例缺失了一个属性的数值,在建模时将被忽略,不影响类条件概率的计算,在预测时,计算数据实例是否属于某类的概率时也将忽略缺失属性,不影响最终结果。

朴素贝叶斯有哪几种常用的分类模型
朴素贝叶斯的三个常用模型:高斯、多项式、伯努利。

高斯模型主要处理包含连续型变量的数据,使用高斯分布概率密度来计算类的条件概率密度。

多项式模型:,其中项为拉普拉斯平滑,加和的是属性出现的总次数,比如文本分类问题里面,不光看词语是否在文本中出现,也得看出现的次数,如果总词数为n,出现词数为m的话,说起来有点像掷骰子n次出现m次这个词的场景。

伯努利模型:伯努利模型特征的取值为布尔型,即出现为true没有出现为false,在文本分类中,就是一个单词有没有在一个文档中出现。

朴素贝叶斯算法中使用拉普拉斯平滑,拉普拉斯因子的大小如何确定 
朴素贝叶斯中的拉普拉斯因子无法通过公式求出最优大小,需要根据程序员的经验去设置,使用交叉验证的方式求取最优大小。

为什么说朴素贝叶斯是高偏差低方差
在统计学习框架下,大家刻画模型复杂度的时候,有这么个观点,认为Error = Bias + Variance。

Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望(平均值)之间的误差,即模型的稳定性,数据是否集中。

对于朴素贝叶斯,它简单的假设了各个数据之间是无关的,是一个被严重简化了的模型,对于复杂模型,充分拟合了部分数据,使得它们的偏差较小,而由于对部分数据的过度拟合,对于部分数据预测效果不好,整体来看可能使得方差较大,简单模型与之相反,大部分场合偏差部分大于方差部分,也就是说的高偏差而低偏差。

朴素贝叶斯增量计算
因为朴素贝叶斯在训练过程中实际只需要计算出各个类别的概率(先验)和各个特征的类条件概率,这些概率值可以快速的根据增量数据进行更新,无需重新全量训练,所以其十分适合增量计算,该特性可以使用在超出内存的大量数据计算和随时间等(流数据)获取数据的计算中。

高度相关的特征对朴素贝叶斯有什么影响
假设有两个特征高度相关,相当于该特征在模型中发挥了两次作用(计算两次条件概率),使得朴素贝叶斯获得的结果向该特征所希望的方向进行了偏移,影响了最终结果的准确性,所以朴素贝叶斯算法应先处理特征,把相关特征去掉。

朴素贝叶斯的应用场景有哪些
文本分类/垃圾文本过滤/情感判别:这大概是朴素贝叶斯应用最多的地方了,即使在现在这种分类器层出不穷的年代,在文本分类场景中,朴素贝叶斯依旧坚挺地占据着一席之地。因为多分类很简单,同时在文本数据中,分布独立这个假设基本是成立的。而垃圾文本过滤(比如垃圾邮件识别)和情感分析(微博上的褒贬情绪)用朴素贝叶斯也通常能取得很好的效果。
多分类实时预测:对于文本相关的多分类实时预测,它因为上面提到的优点,被广泛应用,简单又高效。
推荐系统:朴素贝叶斯和协同过滤是一对好搭档,协同过滤是强相关性的,但是泛化能力略弱,朴素贝叶斯和协同过滤一起,能增强推荐的覆盖度和效果。
朴素贝叶斯的优缺点
优点:

对数据的训练快,分类也快。
能够很容易处理多分类任务。
对缺失数据不敏感,对异常值也不太敏感,算法也比较简单。
对小规模的数据表现很好,能够处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以
缺点:

理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
对输入数据的表达形式很敏感。(离散的类别之间统计频率即可,连续值就要估计概率分布。)
朴素贝叶斯算法http://www.cnblogs.com/pinard/p/6069267.html

朴素贝叶斯与LR的联系与区别
以下部分转自知乎:https://www.zhihu.com/question/265995680霍华德

朴素贝叶斯回顾:

在二分类问题的最终目的就是要判断  就够了,便可以说明"是好瓜"的概率比"不是好瓜"的概率大。所以我们将两个概率相除,得到:但是实际上除法并不好,容易产生过小的数值,发生underflow(下溢出),所以我们两边同时取对数log函数,得到:

公式左边是西瓜“是好瓜”的逻辑发生比,又称作logit,逻辑发生比大于0就说明是好瓜的概率较大。而这个逻辑发生比也是逻辑回归里的线性回归目标,我们后面会讲到~此处按住不表。

接下来,在朴素贝叶斯里有一个很强的假设,就是条件独立假设。条件独立假设特征之间都是相互独立的,没有耦合的,互不干扰的。挑西瓜的例子里,“青绿色”,“根蒂坚挺”和“敲击声清脆”几个特征好像的确是独立的,不相互影响,貌似没什么问题。于是有:

此时,我们输入特征,计算概率,根据 是否大于0则来判断是否是好瓜,这就完成完成了分类任务。这就是朴素贝叶斯分类,简而言之:

贝叶斯公式 + 条件独立假设 = 朴素贝叶斯方法
LR回顾:

逻辑斯特回归实际上是用线性回归模型的预测结果去逼近后验概率的逻辑发生比,直接写出来就是:

此处  为特征权重和, 为特征值,可以是连续变量,也可以是离散变量。

联系:

我们看到朴素贝叶斯里有求和项,逻辑回归中也有求和项。我们如果采用二元离散特征  带入到逻辑回归中:

逻辑回归和朴素贝叶斯的表达式惊人地相似!  与  对应,  与  对应。

但二者还是有区别的,用两种方法求出来的权重是不一样。产生差别的原因在于朴素贝叶斯方法的条件独立假设。因为条件独立假设,朴素贝叶斯可以不使用梯度下降,而直接通过统计每个特征的逻辑发生比来当做权重。

而逻辑回归,条件独立假设并不成立,通过梯度下降法,可以得到特征之间的耦合信息,从而得到相应的权重。

Logistic regression和Naive bayes都是对特征的线性表达。不过并不是所有的朴素贝叶斯分类器都是线性分类器,只有某些具有特定属性的朴素贝叶斯分类器才是线性分类器,如连续特征的朴素贝叶斯分类器中方差不相同。
Logistic regression和Naive bayes建模的都是条件概率  ,对所最终求得的不同类的结果有很好的解释性。而不像SVM,神经网络这样解释性不高。
区别:

Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P(y|x),实际上优化的是联合likelihood 。Logistic Regression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道P(x|y)和P(y),优化的后验likelihood 。
Naive Bayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性,那么在给定Y的情况下,是条件独立的。Logistic Regression的限制则要宽松很多,如果数据满足条件独立假设,Logistic Regression能够取得非常好的效果;当数据不满足条件独立假设时,Logistic Regression仍然能够通过调整参数让模型最大化的符合数据的分布,从而训练得到在现有数据集下的一个最优模型。
当数据集比较小的时候,应该选用Naive Bayes,为了能够取得很好的效果,数据的需求量为O(log n)。当数据集比较大的时候,应该选用Logistic Regression,为了能够取得很好的效果,数据的需求量为O(n)。Naive Bayes运用了比较严格的条件独立假设,为了计算P(y|x),我们可以利用统计的方法统计数据集中P(x|y)和P(y)出现的次数,从而求得P(x|y)和P(y),因而其所需的数据量要小一些,为O(log n)。Logistic Regression在计算时,是在整个参数空间进行线性搜索的,需要的数据集就更大,为O(n)。数据量小的时候使用LR无法得到充足的训练因而效果不如朴素贝叶斯,当数据量大的时候LR可以得到充分的训练因而会比相对更为简单的NB性能更优。这也是因为Naive bayes是生成模型,在有prior的情况下模型能够把数据fit的更好,而Logistic regression属于判别模型,目标驱动化,不去建模联合概率,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。
Logistic regression在有相关性feature上面学习得到的模型在测试数据的performance更好。也就是说,logistic regression在训练时,不管特征之间有没有相关性,它都能找到最优的参数。而在Naive bayes中,由于我们给定特征直接相互独立的严格设定,在有相关性的feature上面学习到的权重同时变大或变小,它们之间的权重不会相互影响。从这方面来说,如果能够在对参数较好地控制,在损失项方面处理的很好的话,Logistic regression相对Naive bayes在应用时更不会限制在特征工程(feature engineering)上面。Naive bayes的好处是我没有优化参数这一步,通过训练数据我直接得到一个counting table,这些有助于并行化。不过现在LR也已经发展出了较多的并行化技术。
————————————————
版权声明:本文为CSDN博主「zhaosarsa」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32742009/article/details/82017344

发布了86 篇原创文章 · 获赞 1 · 访问量 8212

猜你喜欢

转载自blog.csdn.net/a1272899331/article/details/104682758