带你理解朴素贝叶斯分类算法
带你理解朴素贝叶斯分类算法
分类问题综述
对于分类问题,其实谁都不会陌生,日常生活中我们每天都进行着分类过程。例如,当你看到一个人,你的脑子下意识判断他是学生还是社会上的人;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱、”之类的话,其实这就是一种分类操作。
既然是贝叶斯分类算法,那么分类的数学描述又是什么呢?
从数学角度来说,分类问题可做如下定义:已知集合和
,确定映射规则y = f(),使得任意
有且仅有一个
,使得
成立。
其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合(特征集合),其中每一个元素是一个待分类项,f叫做分类器。分类算法的任务就是构造分类器f。
分类算法的内容是要求给定特征,让我们得出类别,这也是所有分类问题的关键。那么如何由指定特征,得到我们最终的类别,也是我们下面要讲的,每一个不同的分类算法,对应着不同的核心思想。
本篇文章,我会用一个具体实例,对朴素贝叶斯算法几乎所有的重要知识点进行讲解。
朴素贝叶斯分类
那么既然是朴素贝叶斯分类算法,它的核心算法又是什么呢?
是下面这个贝叶斯公式:
![](https://pic1.zhimg.com/80/v2-15b16ce6d37b616a5443c0f7e42e03ec_720w.png)
![](https://pic2.zhimg.com/80/v2-a2a73f43adcbb0bf4b9bae19b9495f81_720w.png)
例题分析
下面我先给出例子问题。
给定数据如下:
![](https://pic2.zhimg.com/80/v2-8b7031854b7c8eb4dabbfd7254579721_720w.png)
现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?
这是一个典型的分类问题,转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率,谁的概率大,我就能给出嫁或者不嫁的答案!
这里我们联系到朴素贝叶斯公式:
![](https://pic3.zhimg.com/80/v2-38d81b31721da4d53c62ef7babb177ea_720w.png)
朴素贝叶斯算法的朴素一词解释
那么这三个量是如何求得?
是根据已知训练数据统计得来,下面详细给出该例子的求解过程。
回忆一下我们要求的公式如下:
![](https://pic3.zhimg.com/80/v2-38d81b31721da4d53c62ef7babb177ea_720w.png)
p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁),那么我就要分别统计后面几个概率,也就得到了左边的概率!
等等,为什么这个成立呢?学过概率论的同学可能有感觉了,这个等式成立的条件需要特征之间相互独立吧!
对的!这也就是为什么朴素贝叶斯分类有朴素一词的来源,朴素贝叶斯算法是假设各个特征之间相互独立,那么这个等式就成立了!
但是为什么需要假设特征之间相互独立呢?
1、我们这么想,假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。
24个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。
2、假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁),
我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。
根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
好的,上面我解释了为什么可以拆成分开连乘形式。那么下面我们就开始求解!
我们将上面公式整理一下如下:
![](https://pic3.zhimg.com/80/v2-e0abd30b1376c18c3dfd0d0bf4375c26_720w.png)
p(嫁)=?
首先我们整理训练数据中,嫁的样本数如下:
![](https://pic1.zhimg.com/80/v2-82d69514c761c791c6eaf90dc0771b44_720w.png)
p(不帅|嫁)=?统计满足样本数如下:
![](https://pic2.zhimg.com/80/v2-88728bc679158c4178a52ce7e2ad88dd_720w.png)
p(性格不好|嫁)= ?统计满足样本数如下:
![](https://pic2.zhimg.com/80/v2-4b810db6d395f6aeacd4c53092c47771_720w.png)
则p(性格不好|嫁)= 1/6
p(矮|嫁) = ?统计满足样本数如下:
![](https://pic2.zhimg.com/80/v2-d97d8406a534753442730a26fde76631_720w.png)
则p(矮|嫁) = 1/6
p(不上进|嫁) = ?统计满足样本数如下:
![](https://pic2.zhimg.com/80/v2-0c7bc85db3d05657305cc2ac85f2774d_720w.png)
下面开始求分母,p(不帅),p(性格不好),p(矮),p(不上进)
统计样本如下:
![](https://pic2.zhimg.com/80/v2-83f2f4b00981806c74e330b2d6f91db5_720w.png)
不帅统计如上红色所示,占4个,那么p(不帅) = 4/12 = 1/3
![](https://pic2.zhimg.com/80/v2-4bde3952e6a2811c35446dbb479e26a9_720w.png)
![](https://pic1.zhimg.com/80/v2-71b7b1264ce33f8369a32b88eed900bc_720w.png)
![](https://pic4.zhimg.com/80/v2-eb40196a04b9add56b72fe463c441237_720w.png)
到这里,要求p(不帅、性格不好、身高矮、不上进|嫁)的所需项全部求出来了,下面我带入进去即可,
![](https://pic3.zhimg.com/80/v2-e0abd30b1376c18c3dfd0d0bf4375c26_720w.png)
= (1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)
下面我们根据同样的方法来求p(不嫁|不帅,性格不好,身高矮,不上进),完全一样的做法,为了方便理解,我这里也走一遍帮助理解。首先公式如下:
![](https://pic4.zhimg.com/80/v2-7caa2cca71867344273c32a949b291f3_720w.png)
p(不嫁)=?根据统计计算如下(红色为满足条件):
![](https://pic2.zhimg.com/80/v2-c065045ef461f043409ae02019044631_720w.png)
则p(不嫁)=6/12 = 1/2
p(不帅|不嫁) = ?统计满足条件的样本如下(红色为满足条件):
![](https://pic4.zhimg.com/80/v2-c5497335a6680cbcd8b80a1bc87628ef_720w.png)
p(性格不好|不嫁) = ?据统计计算如下(红色为满足条件):
![](https://pic2.zhimg.com/80/v2-b6b7d9dea01c56061444ad3aaf194501_720w.png)
则p(性格不好|不嫁) =3/6 = 1/2
p(矮|不嫁) = ?据统计计算如下(红色为满足条件):
![](https://pic3.zhimg.com/80/v2-9aef823f8f275db63c870ce80e97a4ea_720w.png)
p(不上进|不嫁) = ?据统计计算如下(红色为满足条件):
![](https://pic4.zhimg.com/80/v2-8576a2a9dd1730773a5b9b353bb9042f_720w.png)
那么根据公式:
![](https://pic4.zhimg.com/80/v2-7caa2cca71867344273c32a949b291f3_720w.png)
p (不嫁|不帅、性格不好、身高矮、不上进) = ((1/6*1/2*1*1/2)*1/2)/(1/3*1/3*7/12*1/3)
很显然(1/6*1/2*1*1/2) > (1/2*1/6*1/6*1/6*1/2)
于是有p (不嫁|不帅、性格不好、身高矮、不上进)>p (嫁|不帅、性格不好、身高矮、不上进)
所以我们根据朴素贝叶斯算法可以给这个女生答案,是不嫁!!!!
朴素贝叶斯分类的优缺点
优点:
(1) 算法逻辑简单,易于实现
(2)分类过程中时空开销小
缺点:
理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
整个例子详细的讲解了朴素贝叶斯算法的分类过程,希望对大家的理解有帮助~
参考:李航博士《统计学习方法》
算法杂货铺--分类算法之朴素贝叶斯分类(Naive Bayesian classification)
封面图来自于:算法杂货铺--分类算法之朴素贝叶斯分类(Naive Bayesian classification)
致谢:德川,皓宇,继豪,施琦