vlambda博客
学习文章列表

朴素贝叶斯算法理论推导及其变种算法


1. 朴素贝叶斯简介

朴素贝叶斯是机器学习领域中比较常见的一个分类算法,该算法以贝叶斯定理为基础,推导过程不复杂,但却能够得到不错的分类效果,因此在机器学习领域使用比较广泛。

2. 机器学习中的基本概念

机器学习分类:

监督学习(Supervised Learning):对有标记的训练样本学习的过程,并且不断调整参数从而获取最佳训练模型,朴素贝叶斯就是监督学习。

                           

 

无监督学习(Non- Supervised Learning):通过对无标记的样本数据进行学习,人们不关心数据的具体标签,只关心这些数据所表现出的规律。例如KMeans算法。

 

半监督学习(Semi-Supervised Learning):通过少量的标记数据和大量的无标记数据,通过不断地训练从而获取分类器的过程。在现实生活中大量的有标记数据难以获取,因此半监督学习具有非常大的实用价值。

 

特征(feature)和标签(label):

在监督学习中训练模型所需要的都是有标记的样本数据,那么样本的标记就是标签。特征就是一个样本数据中影响样本分类标签的因素,例如,一个水果是否是苹果,那么颜色、大小、重量这些都会影响,因此这些因素都可以认为是特征。

 

 | 苹果

绿 | 苹果

 | 苹果

绿 | 西瓜

绿 | 西瓜

 

3. 机器学习的实现流程

不同于传统的开发,机器学习开发中前期需要大量的准备工作以及数据调研过程,机器学习的主要工作就是将机器学习算法转化为一个可实际运行的应用程序。要完成这个目标就必须要对算法有深入的了解。大致流程如下:

 

1. 获取数据:爬虫、设备监测、公开数据集

2. 分析数据:数据清洗、非空、去重;对数据的特点进行分析,离散型、连续型,提取所需要的特征等。

3. 训练算法:理论推导与代码实现

4. 测试算法:用测试集合评估模型,评估指标准确率、精确率、召回率、F1

5. 使用算法:模型保存,遇到新的数据可直接使用已经训练好的模型模型

 


4. 算法的优缺点

该算法是以贝叶斯原理为基础,并且假设各个特征之间是独立的,不用考虑特征之间的关联性,因此计算上得到简化,并且易于理解。

但同时由于没考虑特征之间的关联性,因此对于特征之间关联性比较大的场景中,在计算的准确性略微欠缺。

朴素贝叶斯算法的基本思想:对于给出的待分类项,根据数据的特征计算各个类别出现的概率,哪个类别的概率最大,就认为此待分类项属于哪个类别

 

5. 理论推导

朴素贝叶斯以贝叶斯定理为基础,贝叶斯定理的公式如下所示:

对于该公式可以认为Y是类别,X是特征。该公式还有一种更为通俗的理解:

即:

把朴素贝叶斯的思想转换为目标公式如下:

对于上式,在给定数据集的情况下,就是已知该数据的特征(X1X2

那么该样本属于Y1的概率:

那么该样本属于Y2的概率:

Y1 >= Y2那么该样本属于1类,若Y2 > Y1那么该样本属于2类。

另外可以发现一个样本属于1或者属于2只与分子有关,对于同一份训练集分母都是相同的。因此目标公式可以表示为如下形式:

因为朴素贝叶斯不考虑特征之间的关联性,所以

上式中只有两个参数是未知的,只需要求出先验概率和每个特征的条件概率就能够得到每个样本属于每个类别的概率。

是某个类别的先验概率,也就是该类的样本在训练集中的比例;

是某个类别中,某个特征Xn的条件概率;

由于实际数据中每个样本都是有多个特征,因此多个条件概率连乘会导致数据下溢,并且我们并不关心最后概率结果的具体值,只关最后概率之间的大小,因此为了防止出现下溢的情况,通常会取对数。由此得到朴素贝叶斯最终的概率公式

 

得出了最终的公式,但是还不够,对于我们所获取的训练样本,需要给出训练集的分布情况,这就引申出来朴素贝叶斯的两个变种算法。这里主要讲最常用的两种:BernoulliNBMultinomialNBSpark的机器学习包也是只实现了这两种贝叶斯算法。

 

6. 两个变种算法

6.1 BernoulliNB算法

BernoulliNB是对按多元伯努利分布的数据,实现朴素贝叶斯训练和分类的算法。

首先伯努利分布就是0 1分布,最经典的案例就是扔硬币,一个硬币要么是1,要么是0那么对于朴素贝叶斯分类来讲,因为面对的不只是一个特征,所以在现实中的算法应用中应该是使用的多元伯努利分布。

 

参数估计:

首先针对先验概率,每个类别的样本出现的次数

其中I(x)是一个指示函数,判断一个训练样本是不是属于某一个类别,若属于那么I(x)=1否则I(x)=0

接下来求解条件概率

分母是指示函数,指定哪一个样本属于,分子也是指示函数指定样本中那些特征是

这里面有一个问题,例如对于如下特征

特征1

特征2

标签

1

0

1

0

1

1

1

0

1

1

0

0

0

0

0

 

对于特征1

但是对于特征2, ,在求

那么在

就会造成整体的概率值是0,这种情况是就是0概率问题,解决该问题可以对分子和分母做一些改动

公式中的2是因为伯努利分布每个特征只能取两个值,是调节参数,

当α=1时为拉普拉斯(Laplace)平滑,α<1时为李德斯通(Lidstone)平滑。

 

但由于对于伯努利分布来讲不仅要考虑出现的特征,对于不出现的特征也是需要考虑的,特征出现那么概率是P,特征不出现那么概率是1-P

所以基于伯努利分布的朴素贝叶斯的概率公式是,也就是需要加上那些不出现的特征的概率:

 

6.2 MultinomialNB算法

      MultinomialNB实现了对多项式分布数据的朴素贝叶斯算法,是文本分类中使用的两种经典的朴素贝叶斯变种算法之一。

因为对于某一个特征,很有可能不止出现一次,比如在文本分类中,一个垃圾短信出现多次“贷款”的概率比较高,这种情况就不是伯努利分布能够解决的,因此伯努利分布只能描述出现与否,出现的次数是无法衡量的。因此出现了基于多项式朴素贝叶斯。通过上述公式推导,我们能够得出朴素贝叶斯算法主要就是求出先验概率和条件概率。首先给出基于多项式模型条件概率的计算公式:

跟伯努利模型的先验概率公式是一样的。接下来求解条件概率,

 

是某个特征具体的值,同样的多项式分布也会面临0概率问题

 

d表示特征的个数,表示调节参数,

当α=1时为拉普拉斯(Laplace)平滑,α<1时为李德斯通(Lidstone)平滑。