机器学习十大经典算法之朴素贝叶斯分类

2022-09-23 11:17:19 浏览数 (2)

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而「朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法」

「分类问题」

「从数学角度来说,分类问题可做如下定义:已知集合

C={{y_{1},y_{2},....y_{n}} }

I=x_{1}, x_{2}, x_{3}......x_{n}

,确定映射规则y = f(),使得任意

x_{i}epsilon I

有且仅有一个

y_{i}epsilon C

,使得

y_{i}epsilon f(x_{i} )

成立」

其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合(「特征集合」),其中每一个元素是一个待分类项,f叫做分类器。「分类算法的任务就是构造分类器f。」

下面以一个实例来讲解:

「朴素贝叶斯分类」

那么既然是朴素贝叶斯「分类算法」,它的核心算法是下面这个贝叶斯公式:

也可以换成如下表达式:

所以我们最终只要求出p(类别|特征)就可以。

「例题分析」

给定数据如下:

如上表所示,假设一对男女朋友,男生想跟女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?

这是一个典型的分类问题,「转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率」,假设结果是嫁的概率大,那就选嫁,反之就选择不嫁!

由上面的朴素贝叶斯公式公式可知:

要求出p(嫁|(不帅、性格不好、身高矮、不上进),这是比较难的,但是通过朴素贝叶斯公式可以转化为简单好求的三个量,即p(不帅、性格不好、身高矮、不上进|嫁)、p(不帅、性格不好、身高矮、不上进)、p(嫁)。后面解释为什么只要求出这三个量就行。

「那么这三个量是如何求的?」

因为我们要求的公式如下:

那么我只要求得p(不帅、性格不好、身高矮、不上进|嫁)、p(不帅、性格不好、身高矮、不上进)、p(嫁)即可。

「p(不帅、性格不好、身高矮、不上进|嫁) = p(不帅|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上进|嫁),那么我就要分别计算出后面几个概率,也就得到p(不帅、性格不好、身高矮、不上进|嫁) 的概率!」

「要使上面的等式成立,需要各个特征互相独立。朴素贝叶斯分类有朴素一词的来源,就是假设各个特征之间相互独立,那么这个等式就成立了!」

把上面公式变形得到:

下面分别进行统计计算(「在数据量很大的时候,根据中心极限定理,频率是等于概率的,这里只是一个例子,所以我就进行统计即可」)。

首先我们整理训练数据中,嫁的样本数如下:

「则 p(嫁) = 6/12(总样本数) = 1/2」

「则p(不帅|嫁) = 3/6 = 1/2」

「则p(性格不好|嫁)= 1/6」

「则p(矮|嫁) = 1/6」

「则p(不上进|嫁) = 1/6」

「不帅统计如上红色所示,占4个,那么p(不帅) = 4/12 = 1/3」

性格不好统计如上红色所示,那么p(性格不好) = 4/12 = 1/3

身高矮统计如上红色所示,那么p(身高矮) = 7/12

不上进统计如上红色所示,那么p(不上进) = 4/12 = 1/3

「到这里,要求p(不帅、性格不好、身高矮、不上进|嫁)的所需项全部求出来了,下面我带入进去即可,」

= (1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)

「下面我们根据同样的方法来求p(不嫁|不帅,性格不好,身高矮,不上进),完全一样的做法,公式如下:」

最终算得:

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 (嫁|不帅、性格不好、身高矮、不上进)」

「所以我们根据朴素贝叶斯算法可以给这个女生答案,是不嫁!!!!」

算法流程

实际应用方式:

  • 若任务对预测速度要求较高,则对给定的训练集,可将朴素贝叶斯分类器涉及的所有概率估值事先计算好存储起来,这样在进行预测时只需要 “查表” 即可进行判别;
  • 若任务数据更替频繁,则可采用 “懒惰学习” (lazy learning) 方式,先不进行任何训练,待收到预测请求时再根据当前数据集进行概率估值;
  • 若数据不断增加,则可在现有估值的基础上,仅对新增样本的属性值所涉及的概率估值进行计数修正即可实现增量学习。

朴素贝叶斯分类算法优缺点

优点:

1)朴素贝叶斯模型有稳定的分类效率。 2)对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。 3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点:

1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

4)对输入数据的表达形式很敏感。

朴素贝叶斯分类算法实现

https://github.com/Asia-Lee/Naive_Bayes

参考文献

李航博士《统计学习方法》

知乎专栏:https://zhuanlan.zhihu.com/p/26262151

0 人点赞