(本文会用到的所有代码都在这里)
本文主要介绍连续型朴素贝叶斯——GaussianNB 的实现。在有了实现离散型朴素贝叶斯的经验后,实现连续型朴素贝叶斯模型其实只是个触类旁通的活了
不过在介绍实现之前,我们还是需要先要知道连续型朴素贝叶斯的算法是怎样的。处理连续型变量有一个最直观的方法:使用小区间切割、直接使其离散化。由于这种方法较难控制小区间的大小、而且对训练集质量的要求比较高,所以我们选用第二种方法:假设该变量服从正态分布(或称高斯分布,Gaussian Distribution)、再利用极大似然估计来计算该变量的“条件概率”。具体而言、GaussianNB 通过如下公式计算“条件概率”:
这里有两个参数:、,它们可以用极大似然估计法定出:
其中,是类别的样本数。需要注意的是,这里的“条件概率”其实是“条件概率密度”,真正的条件概率其实是 0(因为连续型变量单点概率为 0)。这样做的合理性涉及到了比较深的概率论知识,此处不表(其实我想表也表不出来)
所以在实现 GaussianNB 之前、我们需要先实现一个能够计算正态分布密度和进行正态分布极大似然估计的类:
|
|
对于 GaussianNB 本身,由于算法中只有条件概率相关的定义变了、所以只需要将相关的函数重新定义即可。此外,由于输入数据肯定是数值数据、所以数据预处理会简单不少(至少不用因为要对输入进行特殊的数值化处理而记录其转换字典了)。考虑到上一章说明 MultinomialNB 的实现时已经基本把我们框架的思想都说明清楚了,在接下来的 GaussianNB 的代码实现中、我们会适当地减少注释以提高阅读流畅度(其实主要还是为了偷懒):
|
|
可以看到,数据预处理这一步确实要轻松很多。接下来只需要再定义训练用的代码就行,它们和 MultinomialNB 中的实现也大同小异:
|
|
至此,连续型朴素贝叶斯模型就搭建完毕了
连续型朴素贝叶斯同样能够进行和离散型朴素贝叶斯类似的可视化,不过由于我们接下来就要实现适用范围最广的朴素贝叶斯模型:混合型朴素贝叶斯了,所以我们这里不打算进行 GaussianNB 合理的评估、而打算把它归结到对混合型朴素贝叶斯的评估中