数据挖掘-朴素贝叶斯

朴素贝叶斯分类器是一个以贝叶斯定理为基础,广泛应用于情感分类领域的优美分类器。本文尝试分析贝叶斯分类器,并以鸢尾花数据集给出例子。

  首先给出贝叶斯公式:

贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。

贝叶斯定理也称贝叶斯推理,早在18世纪,英国学者贝叶斯(1702~1763)曾提出计算条件概率的公式用来解决如下一类问题:假设H[1],H[2]…,H[n]互斥且构成一个完全事件,已知它们的概率P(H[i]),i=1,2,…,n,现观察到某事件A与H[1],H[2]…,H[n]相伴随机出现,且已知条件概率P(A|H[i]),求P(H[i]|A)。——摘自百度百科

      给一个最简单的例子,只有两个有关联的随机事件A和B。

    现在假设你是一个银行职员,现在你的经理给你了一份任务:将一款理财产品推销出去。

假定事件A:购买该理财产品 B:该用户存款金额超过了100万。并给你一万名用户的情况,包含了是否该买该理财产品,该用户的存款金额。

那么作为一个用户职员,应该做什么?应该去找那些人购买这个理财产品的意愿较强,也就是说P(A|B)大还是P(A|~B)大,然后我们就可以选择性的去推销产品了。那么如何获得P(A|B)呢?我们有一万名用户的情况后,我们可以知道一下几个概率:P(A),P(B),P(B|A),P(~B|A)

那么我们就很容易的可以由贝叶斯公式获得P(A|B)和(A|~B)了。这样就可以针对性的进行推销了。

假设对于某个数据集,随机变量C表示样本为C类的概率,F1表示测试样本某特征出现的概率,套用基本贝叶斯公式,则如下所示:

贝叶斯公式最基本形式

但是当测试样本中不仅仅具有一个样本特征,而具有多个样本特征时,应该怎么做呢?

很简单,只需要推广一下就可以了:


具有n个样本特征时的贝叶斯公式

这里给出几个易混淆的定义:

先验概率(prior probability)是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现的概率。

先验概率(Prior)。是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现的概率。如P(C)是C的先验概率,可以从已有的训练集中计算分为C类的样本占所有样本的比重得出。

证据(Evidence)。即上式P(F1),表示对于某测试样本,特征F1出现的概率。同样可以从训练集中F1特征对应样本所占总样本的比例得出。

似然(likelihood)。即上式P(F1|C),表示如果知道一个样本分为C类,那么其的特征为F1的概率是多少。

此时如果给定一堆特征F_1,F_2,F_3,....F_N我们就可以根据上式求解出P(C|F_1,F_2,F_3,....F_N)。但是这个式子太复杂啦,当N比较小的时候还是可以接受的,但是当N很大的时候计算就变得十分复杂了。这时候应该怎么办?

朴素贝叶斯

朴素表示各个特征值相互独立

在这里,为了简化计算,朴素贝叶斯算法做了一假设:“朴素的认为各个特征相互独立”。这么一来,上式的分子就简化成了

    P(C|F_1F_2...F_N)=\frac{P(C)P(F_1|C)P(F_2|C)....P(F_N|C)}{P(F_1F_2...F_N)}

这样我们就可以很轻松地根据数据集求得P(C|F_1F_2...F_N),假设样本具有三种类别,分别为C_0,C_1,C_2
,那么我们可以根据该贝叶斯公式简单地求得:P(C_0|F_1F_2...F_N)、
P(C_1|F_1F_2...F_N)、
P(C_2|F_1F_2...F_N)

我们选取出三者的最大值作为该数据的预测值。

分析这个过程,我们发现获得P(C_0|F_1F_2...F_N)、
P(C_1|F_1F_2...F_N)、
P(C_2|F_1F_2...F_N)的过程中需要除去P(F_1F_2...F_N)这一相同的值,所以我们可以直接用P(C)P(F_1|C)P(F_2|C)....P(F_N|C)作为预测值,选取较大的预测值作为结果。

另外,贝叶斯公式推导能够成立有个重要前期,就是各个证据(evidence)不能为0。如果某个证据F_X
为0,那么可以得到:P(F_X|C)也为0,由于我们的数据集并没有涵盖所有的数据,我们只能说这时候出现的概率较小,不能完全确定的说为0。而显示某些特征未出现在测试集中的情况是可以发生的。因此实现上通常要做一些小的处理,例如把所有计数进行+1(加法平滑(additive smoothing,又叫拉普拉斯平滑(Laplace smothing))。而如果通过增加一个大于0的可调参数alpha进行平滑,就叫Lidstone平滑。

拉普帕斯平滑变化,这个名字看起来挺高大上,其实原理很简单:如果我们的数据集内没有出现该证据,我们怎么办?造一个就好了,但是其他的证据不乐意了,你给它造了一个,我们呢?所以我们对所有的证据(不管出现的还是没出现的)都加一,这样就避免了证据为0的情况出现。

在所有6个分为C=1的影评样本中,某个特征F1=1不存在,则P(F1=1|C=1)  = 0/6,P(F1=0|C=1)  = 6/6。经过加法平滑后,P(F1=1|C=1)  = (0+1)/(6+2)=1/8,P(F1=0|C=1)  = (6+1)/(6+2)=7/8。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容