朴素贝叶斯的“朴素”对应着“独立性假设”这一个朴素的假设、“贝叶斯”对应着“后验概率最大化”这一贝叶斯思想。
朴素贝叶斯算法的一个非常重要的基本假设就是独立性假设:
若样本空间X是n维的,那么对 ,我们假设
是有随机变量
生成的、且
之间在各种意义下相互独立。
朴素贝叶斯算法一般来说包含三种模型:
离散型朴素贝叶斯:所有维度的特征都是离散型随机变量。
连续型朴素贝叶斯:所有维度的特征都是连续型随机变量。
混合型朴素贝叶斯:各个维度的特征有离散型也有连续型。
朴素贝叶斯的模型参数即是类别的选择空间(假设一共有K类: ):
朴素贝叶斯总的参数空间 本应包括模型参数的先验概率
、样本空间在模型参数下的条件概率
和样本空间本身的概率
。
由于我们采取样本空间的子集作为训练集,所以在给定的训练集下 是常数,因此可以把它从参数空间中删除。也就是说,我们关心的只有模型参数的先验概率和样本空间在模型参数下的条件概率。
算法:
离散型朴素贝叶斯算法
输入:训练数据集
过程(利用极大似然估计导出模型的具体参数):
- 计算先验概率
的极大似然估计:
- 计算条件概率
的极大似然估计(设每一个单独输入的n维向量
的第j维特征
可能的取值集合为
):
输出(利用极大后验概率估计进行决策):朴素贝叶斯模型,能够估计数据 的类别:
由此可以看出朴素贝叶斯算法的数学思想:
使用极大似然估计导出模型的具体参数(先验概率、条件概率)。
使用极大后验概率估计作为模型的决策(输出使得数据后验概率最大化的类别)。
公式推导:
Python实现(离散型朴素贝叶斯):
计算先验概率
其中的 lb 为平滑系数(默认为 1、亦即拉普拉斯平滑),这对应的公式其实是带平滑项的、先验概率的极大似然估计:
代码中的 self._cat_counter 的意义就很明确了——它存储着 K 个
计算条件概率
这对应的公式其实就是带平滑项(lb)的条件概率的极大似然估计:
其中
可以看到我们利用到了 self._cat_counter 属性来计算
以下为计算 self._con_counter 的函数的实现:
计算后验概率
这对应的公式其实就是决策公式:
所以不难看出代码中的 p_category 存储着 K 个
以上就是关于朴素贝叶斯算法的原理与实现。
搜索公众号:ai_works,获取更多机器学习资讯:
长按二维码,关注:机器学习AI工场