700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【机器学习-西瓜书】七 朴素贝叶斯分类器

【机器学习-西瓜书】七 朴素贝叶斯分类器

时间:2021-02-11 20:18:18

相关推荐

【机器学习-西瓜书】七 朴素贝叶斯分类器

推荐前期阅读:/u011995719/article/details/76732663

推荐阅读:拉普拉斯修正

7.3朴素贝叶斯分类器

关键词: 朴素贝叶斯;拉普拉斯修正

上一小节我们知道贝叶斯分类器的分类依据是这公式:P(c∣x)=P(x,c)P(x)=P(c)⋅P(x∣c)P(x)P(c\mid x)=\frac{P(x,c)}{P(x)}=\frac{P(c)\cdot P(x\mid c)}{P(x)}P(c∣x)=P(x)P(x,c)​=P(x)P(c)⋅P(x∣c)​ ,对于每个样本而言,分母P(x)=∑i=1mP(x∣ci)⋅P(ci)P(x)= \sum _{i=1}^{m}P(x\mid c_{i})\cdot P(c_{i})P(x)=∑i=1m​P(x∣ci​)⋅P(ci​) 是相同的,因此在做分类时,可以不计算分母。只需要考虑先验概率:P(c)P(c)P(c) 以及似然:P(x∣c)P(x\mid c)P(x∣c) 。先看先验概率 P(c)P(c)P(c),当给定训练集D,那么 P(c)P(c)P(c)则是固定的,所以也不需要经过复杂计算,直接统计数据集D中每个类别的占比,占比当作该类别的概率(大数定律);再看看如何计算似然:P(x∣c)P(x\mid c)P(x∣c) ,解释一下其中的x和c,c在这里表示某一个具体的类别; x是一个具体样本,有明确的值的样本; P(x∣c)P(x\mid c)P(x∣c) 就表示,在类别c中,取值为x的样本 出现的概率是多大,依旧采用大数定律,统计训练集D中有多少就认为概率有多大 。更具体的,假如样本是二维空间的点,c有正例和负例。那么要求P(x=(0,1)∣c=正例)P(x=(0,1 )\mid c=正例)P(x=(0,1)∣c=正例) 的概率,我们就要找正例的那堆样本当中,取值为(0,1)的样本所占的比例作为P(x=(0,1)∣c=正例)P(x=(0,1 )\mid c=正例)P(x=(0,1)∣c=正例) 的概率。

然而现实是很骨干的,假如现在要计算的是数字类别“7”下,x=(0,1…,0)这一种样本出现的概率,假设样本 有784个属性(2828的图片),且每个像素点的取值为0或者1,那么 样本x的可能取值就是2^784 ≈ 110^236 ! 如果没有足够多的数据,我们根本没办法去计算某一个具体样本x=(0,1…,0)在类别“7”当中出现的概率P(x=(0,1,...,0)∣类别="7")P(x=(0,1,...,0)\mid 类别="7")P(x=(0,1,...,0)∣类别="7") ,因为极有可能,我们的训练集D中没有样本 ,这一种组合, 也就是说784个属性的联合概率很难求出。

为了避开这个障碍,**朴素贝叶斯分类(naïve Bayes classifier)**出场啦,其采用了“属性条件独立性假设”,啥意思呢?对于上面那个例子,假设784个属性值(像素点)是独立的,那么我们的似然就可以这么计算 $P(x=(0,1,…,0)\mid 类别=7)=P(第一个属性值=0\mid 类别为7)\cdot P(第二个属性值=1\mid 类别为7) … \cdot P(第784个属性值=1\mid 类别为7) $

单独看第一个属性,假设类别数字7有样本10个,但是第一个属性值只有0或者1,我们就可以计算出10个样本当中,第一个属性值=0的概率是多少,以及=1的概率是多少,因此就可以把P(第一个属性值=0∣类别为7)P(第一个属性值=0\mid 类别为7)P(第一个属性值=0∣类别为7) 求出来了。

因此,基于属性条件独立性假设,后验概率可依据如下公式计算(d表示有d个属性):

P(c∣x)=P(x,c)P(x)=P(c)⋅P(c∣x)P(x)=P(c)P(x)⋅∏i=1dP(xi∣c)P(c\mid x)=\frac{P(x,c)}{P(x)}=\frac{P(c)\cdot P(c\mid x)}{P(x)}=\frac{P(c)}{P(x)}\cdot \prod _{i=1}^{d}P(x_{i}\mid c)P(c∣x)=P(x)P(x,c)​=P(x)P(c)⋅P(c∣x)​=P(x)P(c)​⋅∏i=1d​P(xi​∣c)

最终的朴素贝叶斯分类器表达式为:

hnb(x)=arg⁡max⁡P(c)∏i=1dP(xi∣c)h_nb(x)=\arg \max P(c) \prod _{i=1}^{d}P(x_{i}\mid c)hn​b(x)=argmaxP(c)∏i=1d​P(xi​∣c)

讲个简单例子来使用朴素贝叶斯分类器进行分类:

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

这里有两个属性,分别是症状,职业;疾病则为类别,共三种类别,分别是感冒,过敏,脑震荡。

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?根据贝叶斯公式,有

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

这是可以计算的。

由于计算类条件概率(似然)的时候,利用了独立性假设,将每个属性的概率连乘,若某个属性值在训练样本中没有与某个类别同时出现过,那么概率则为0,很显然判别将会出问题,为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常进行“平滑”(smoothing),常用**“拉普拉斯修正”(Laplacian correction)**。具体操作如下:令m表示训练集D中可能的类别数,NiN_{i}Ni​ 表示第i个属性可能的取值数(如上面的数字识别,第i个属性可能的取值为0或者1,那么 NiN_{i}Ni​ 为2),修正的先验概率以及类条件概率(似然)分别为:

P(c)^=∣Dc∣+1∣D∣+N\hat{P(c)}=\frac{\left | D_{c} \right |+1}{\left | D \right |+N}P(c)^​=∣D∣+N∣Dc​∣+1​

P^(xi∣c)=∣Dc,xi∣+1∣Dc∣+Ni\hat{P}(x_{i}\mid c)=\frac{\left | D_{c,x_{i}} \right |+1}{\left | D_{c} \right |+N_{i}}P^(xi​∣c)=∣Dc​∣+Ni​∣Dc,xi​​∣+1​

通过拉普拉斯修正,就可以避免因训练集样本不充分而导致概率估值为零的问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。