朴素贝叶斯算法

我与影子孤独终老i 提交于 2020-02-19 02:00:44

一、朴素贝叶斯综述

\quad贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素贝叶斯分类是贝叶斯分类中最简单也是最常见的一种。
\quad对于分类问题,其实谁都不陌生,日常生活中我们每天都进行着分类过程,例如,当你看到一个人,你的脑子下意识判断他是学生还是社会上的人;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱”之类的话,其实这就是一种分类操作。
\quad既然是贝叶斯分类算法,那么分类的数学描述又是什么呢?
\quad从数学角度来说,分类问题可做如下定义:已知集合C=y1,y2,...,ynC=y_1,y_2,...,y_nI=x1,x2,...,xnI=x_1,x_2,...,x_n,确定映射规则y=f(x)y=f(x),使得任意xiIx_i\in I有且仅有一个yiCy_i\in C,使得yif(xi)y_i\in f(x_i)成立。
\quad其中CC叫做类别集合,其中每一个元素是一个类别,而II叫做项集合(特征集合),其中每一个元素是一个待分类项,ff叫做分类器。分类算法的任务就是构造分类器ff
\quad分类算法的内容是要求给定特征,让我们得出类别,这也是所有分类问题的关键。那么如何由指定特征,得到我们最终的类别,也是我们下面要讲的,每一个不同的分类算法,对应着不同的核心思想。

二、贝叶斯公式

\quad那么既然是朴素贝叶斯分类算法,它的核心算法又是什么呢?
\quad就是其贝叶斯公式:
P(BA)=P(AB)P(B)P(A)P(B|A)=\frac{P(A|B)P(B)}{P(A)}
\quad换个表达形式就会明朗很多,如下:
P()=P()P()P()P(类别|特征)=\frac{P(特征|类别)P(类别)}{P(特征)}
我们最终求得P()P(类别|特征)即可!就相当于完成了我们的任务。

三、例子详解

\quad下面我们先给定例子问题,数据如下:
在这里插入图片描述
\quad现在给我们的问题是,如果一对男女朋友,男生向女生求婚,男生的四个特点分别是不帅、性格不好、身高矮、不上进,请你判断一下女生是嫁还是不嫁?
\quad这是一个典型的分类问题,转为数学问题就是比较P()P(嫁|不帅,性格不好,身高矮,不上进)P()P(不嫁|不帅,性格不好,身高矮, 不上进)的概率,谁的概率大,我就能给出嫁或者不嫁的答案!
\quad这里我们联想到朴素贝叶斯公式:
P()=P()×P()P()P(嫁|不帅,性格不好,身高矮,不上进)=\frac{P(不帅,性格不好,身高矮,不上进|嫁)×P(嫁)}{P(不帅,性格不好,身高矮,不上进)}
我们需要求P()P(嫁|不帅,性格不好,身高矮,不上进),这是我们不知道的,但是通过朴素贝叶斯公式可以转化为好求的三个量。
P()P(不帅,性格不好,身高矮,不上进|嫁)
P()P(不帅,性格不好,身高矮,不上进)
P()P(嫁)
(至于为什么能求,我们后面讲,现在我们可以将待求的量转化为其它可求的值,这就相当于解决了我们的问题!)
\quad那么这三个量是如何求得的呢?
\quad是根据已知训练数据统计得来,下面详细给出该例子的求解过程。
\quad回忆一下我们要求的公式如下:
P()=P()×P()P()P(嫁|不帅,性格不好,身高矮,不上进)=\frac{P(不帅,性格不好,身高矮,不上进|嫁)×P(嫁)}{P(不帅,性格不好,身高矮,不上进)}
那么我们只要求得P()P(不帅,性格不好,身高矮,不上进|嫁)P()P(不帅,性格不好,身高矮,不上进)P()P(嫁)即可,好的,下面我们分别求出这个几个概率,最后一比,就得到最终结果。
P()=P()×P()×P()×P()P(不帅,性格不好,身高矮,不上进|嫁)=P(不帅|嫁)×P(性格不好|嫁)×P(身高矮|嫁)×P(不上进|嫁),那么我就要分别统计后面几个概率,也就得到了左边的概率!
注:这个公式为什么能够成立呢?学过概率论的同学可能有疑问了?这个等式成立的条件需要特征之间相互独立吧?
对的,这也就是为什么朴素贝叶斯分类有朴素一词的来源,朴素贝叶斯算法是假设各个特征之间相互独立,那么这个等式就成立了!
但是为什么需要假设特征之间相互独立呢?
\quad 1)我们这么想,假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,这么说,我们这个例子有4个特征,其中帅包括{帅和不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2×3×3×2=36个。
36个,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因!
\quad 2)假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计P()P(不帅,性格不好,身高矮,不上进|嫁)
我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况,这样是不合适的。
根据上面两个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
\quad上面我解释了为什么可以拆分成连乘形式。那么下面我们就开始求解!
我们将上面的公式整理一下,如下所示:
P()=P()×P()P()=P()×P()×P()×P()×P()P()×P()×P()×P()P(嫁|不帅,性格不好,身高矮,不上进)=\frac{P(不帅,性格不好,身高矮,不上进|嫁)×P(嫁)}{P(不帅,性格不好,身高矮,不上进)}=\frac{P(不帅|嫁)×P(性格不好|嫁)×P(身高矮|嫁)×P(不上进|嫁)×P(嫁)}{P(不帅)×P(性格不好)×P(身高矮)×P(不上进)}
\quad下面我们将一个一个的进行统计计算(在数据量很大的时候,根据中心极限定理,频率是等于概率的,这里只是一个例子,所以我们就直接进行统计即可!)
1)P()=?P(嫁)=?
首先,我们整理训练数据中,嫁的样本数如下:
在这里插入图片描述
P()=612=12P(嫁)=\frac{6}{12}=\frac{1}{2}
2)P()=?P(不帅|嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=36=12P(不帅|嫁)=\frac{3}{6}=\frac{1}{2}(在嫁的条件下,看不帅的有多少)
3)P()=?P(性格不好|嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=16P(性格不好|嫁)=\frac{1}{6}
4)P()=?P(矮|嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=16P(矮|嫁)=\frac{1}{6}
5)P()=?P(不上进|嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=16P(不上进|嫁)=\frac{1}{6}
下面开始求分母,P()P()P()P()P(不帅),P(性格不好),P(矮),P(不上进)
6)统计样本数如下:
在这里插入图片描述
不帅统计如上红色所示,占4个,那么P()=412=13P(不帅)=\frac{4}{12}=\frac{1}{3}
7)
在这里插入图片描述
性格不好统计如上红色所示,占4个,那么P()=412=13P(性格不好)=\frac{4}{12}=\frac{1}{3}
8)
在这里插入图片描述
身高矮统计如上红色所示,占7个,那么P()=712P(身高矮)=\frac{7}{12}
9)
在这里插入图片描述
不上进统计如上红色所示,占4个,那么P()=412=13P(不上进)=\frac{4}{12}=\frac{1}{3}
\quad到这里,要求P()P(不帅,性格不好,身高矮,不上进|嫁)的所需项全部求出来了,下面我带入之前的公式中去有:
P()=P()×P()P()=P()×P()×P()×P()×P()P()×P()×P()×P()=(12×16×16×16×12)13×13×712×13P(嫁|不帅,性格不好,身高矮,不上进)=\frac{P(不帅,性格不好,身高矮,不上进|嫁)×P(嫁)}{P(不帅,性格不好,身高矮,不上进)}=\frac{P(不帅|嫁)×P(性格不好|嫁)×P(身高矮|嫁)×P(不上进|嫁)×P(嫁)}{P(不帅)×P(性格不好)×P(身高矮)×P(不上进)}=\frac{(\frac{1}{2}×\frac{1}{6}×\frac{1}{6}×\frac{1}{6}×\frac{1}{2})}{\frac{1}{3}×\frac{1}{3}×\frac{7}{12}×\frac{1}{3}}
\quad下面我们根据同样的方法来求P()P(不嫁|不帅,性格不好,身高矮,不上进),完全一样的做法,为了便于理解,首先公式如下:
P()=P()×P()P()=P()×P()×P()×P()×P()P()×P()×P()×P()P(不嫁|不帅,性格不好,身高矮,不上进)=\frac{P(不帅,性格不好,身高矮,不上进|不嫁)×P(不嫁)}{P(不帅,性格不好,身高矮,不上进)}=\frac{P(不帅|不嫁)×P(性格不好|不嫁)×P(身高矮|不嫁)×P(不上进|不嫁)×P(不嫁)}{P(不帅)×P(性格不好)×P(身高矮)×P(不上进)}

\quad下面我们也一个一个来统计计算,这里与上面公式中的分母一样,所以我们就不重复计算了。
1)P()=P(不嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=612=12P(不嫁)=\frac{6}{12}=\frac{1}{2}
2)P()=P(不帅|不嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=16P(不帅|不嫁)=\frac{1}{6}
3)P()=P(性格不好|不嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=36=12P(性格不好|不嫁)=\frac{3}{6}=\frac{1}{2}
4)P()=P(矮|不嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=66=1P(矮|不嫁)=\frac{6}{6}=1
5)P()=P(不上进|不嫁)=?
统计满足样本数如下:
在这里插入图片描述
P()=36=12P(不上进|不嫁)=\frac{3}{6}=\frac{1}{2}
那么根据公式:
P()=P()×P()P()=P()×P()×P()×P()×P()P()×P()×P()×P()P(不嫁|不帅,性格不好,身高矮,不上进)=\frac{P(不帅,性格不好,身高矮,不上进|不嫁)×P(不嫁)}{P(不帅,性格不好,身高矮,不上进)}=\frac{P(不帅|不嫁)×P(性格不好|不嫁)×P(身高矮|不嫁)×P(不上进|不嫁)×P(不嫁)}{P(不帅)×P(性格不好)×P(身高矮)×P(不上进)}

P()=(16×12×1×12×12)13×13×712×13P(不嫁|不帅,性格不好,身高矮,不上进)=\frac{(\frac{1}{6}×\frac{1}{2}×1×\frac{1}{2}×\frac{1}{2})}{\frac{1}{3}×\frac{1}{3}×\frac{7}{12}×\frac{1}{3}}
\quad很显然(16×12×1×12×12)(\frac{1}{6}×\frac{1}{2}×1×\frac{1}{2}×\frac{1}{2})> (12×16×16×16×12)(\frac{1}{2}×\frac{1}{6}×\frac{1}{6}×\frac{1}{6}×\frac{1}{2}),于是,我们有
P()>P()P(不嫁|不帅,性格不好,身高矮,不上进)>P(嫁|不帅,性格不好,身高矮,不上进)
\quad所以我们根据朴素贝叶斯算法可以给这个女生答案,是不嫁!

四、朴素贝叶斯分类的优缺点

优点:
\quad 1)算法逻辑简单,易于实现(算法思路很简单,只需要使用贝叶斯公式转化一下即可)
\quad 2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)
缺点:
\quad理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!