机器学习系列(4)——朴素贝叶斯法

本文介绍朴素贝叶斯法,及其在sklearn中的实现。

 

0x01、朴素贝叶斯法简介

朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。

(1)朴素贝叶斯法是典型的生成学习方法。生成方法由训练数据学习联合概率分布  P(X,Y),然后求得后验概率分布 P(Y|X) 。具体来说,利用训练数据学习 P(X|Y) 和 P(Y) 的估计,得到联合概率分布:P(X,Y)=P(Y)P(X|Y)。概率估计方法可以是极大似然估计贝叶斯估计

(2)朴素贝叶斯法的基本假设是条件独立性:

            P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k) \\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\prod_{j=1}^{n}P(X^{(j)} = x^{(j)}|Y=c_k)   

这是一个较强的假设。由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化,因而朴素贝叶斯法高效且易于实现,缺点是分类的性能不一定很高。

(3)朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。

        P(Y|X)=\frac{P(X,Y)}{P(X)} = \frac{P(Y)P(X|Y)}{\sum_Y P(Y)P(X|Y)}

将输入x分到后验概率最大的类y:

        y= arg \max_{c_k} p(Y=c_k)\prod_{j=1}^{n}P(X_j=x^{(j)}|Y=c_k)   

后验概率最大等价于0-1损失函数时的期望风险最小化。

 

0x02、朴素贝叶斯法的推导

1、基本方法

朴素贝叶斯法通过训练数据集学习联合概率分布 P(X,Y) 。具体地,学习以下先验概率分布及条件概率分布。

先验概率分布:P(Y=c_k), ~~k=1,2,...,K

条件概率分布:P(X=x|Y=c_k) = P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k) ,k=1,2,...,K ,

于是学习到联合概率分布 P(X,Y) 。

条件概率分布 P(X=x|Y=c_k) 有指数级数量的参数,其估计实际是不可行的。事实上,假设 x^{(j)} 可取值有 S_j 个,j=1,2,...,n ,Y 可取值有 K 个,那么参数个数为:K \prod _{i=1}^{n} S_j  。

 朴素贝叶斯法对条件概率分布做了条件独立性的假设。由于这是一个较强的假设,朴素贝斯法也由此得名。具体地,条件独立性假设是:

        P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k) \\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\prod_{j=1}^{n}P(X^{(j)} = x^{(j)}|Y=c_k)   

朴素贝叶斯法实际上学习到生成数据的机制,所以属于生成模型。条件独立假设等于是说用于分类的特征在类确定的条件下都是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。

朴素贝叶斯法分类时,对给定的输入x,通过学习到的模型计算后验概率分布 P(Y=c_k|X=x) ,将后验概率最大的类作为 x 的类输出。后验概率计算根据贝叶斯定理进行:

        P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{k}P(X=x|Y=c_k)P(Y=c_k)}   

代入到条件独立性假设公式中,得到:

        P(Y=c_k|X=x)=\frac{P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k) }{ \sum_{k} P(Y=c_k) \prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k) }  ,k=1,2,...,K  

这是朴素贝叶斯法分类的基本公式。于是朴素贝叶斯分类器可表示为:

        y=f(x)=arg~\max_{c_k} \frac{P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k) }{ \sum_{k} P(Y=c_k) \prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k) }   

上式中分母对所有 c_k 都是相同的,所以:

        y=arg~ \max_{c_k} P(Y=c_k) \prod_{j} P(X^{(j)}=x^{(j)}|Y=c_k)   

2、后验概率最大化的含义

朴素贝叶斯法将实例分到后验概率最大的类中。这等价于期望风险最小化。假设选择0-1损失函数:

       L(Y,f(X))=\left\{\begin{matrix} 1, ~Y\neq f(X) & \\ 0, ~Y= f(X) & \end{matrix}\right.   

式中 f(X) 是分类决策函数。这时,期望风险函数为: R_{exp}(f)=E[L(Y,f(X))] ,期望是对联合分布 P(X,Y) 取的。

由此取条件期望:R_{exp}(f)=E_{X} \sum_{k=1}^{K}[L(c_k,f(X))]P(c_k|X) 。

为了使期望风险最小化,只需对 X=x 逐个极小化,由此得到:

        f(x)=arg~ \min_{y \in \gamma } \sum_{k=1}^{K} L(c_k,y)P(c_k|X=x) \\ ~~~~~~~~~~~=arg~ \min_{y in \gamma} \sum_{k=1}^{K}P(y \neq c_k|X=x) \\ ~~~~~~~~~~~=arg~ \min_{y in \gamma} (1-P(y=c_k|X=x)) \\ ~~~~~~~~~~~=arg! \max_{y in \gamma} P(y=c_k|X=x)   

这样一来,根据期望风险最小化准则就得到了后验概率最大化准则,即朴素贝叶斯法采用的原理:

        f(x)=arg~ \max_{c_k}P(c_k|X=x)  

3、极大似然估计

在朴素贝叶斯法中,学习意味着估计 P(Y=c_k) 和 P(X^{(j)}=x^{(j)}|Y=c_k) 。可以应用极大似然估计法估计相应的概率。

先验概率 的极大似然估计是:

         P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N},~k=1,2,...,K  

设第 j 个特征 x^{(j)} 可能取值的集合为 \left\{ a_{j1},a_{j2},...,a_{jS_j} \right\} ,条件概率 P(X^{(j)}=a_{jl}|Y=c_k) 的极大似然估计是:

        P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^{N} I(x_{i}^{(j)}=a_{jl},y_i=c_k ) }{\sum_{i=1}^{N}I(y_i=c_k) } ,

         j=1,2,...,n ,l=1,2,...,S_jk=1,2,...,K  

上式中,x_{i}^{(j)}  是第 i 个样本的第 j 个特征;a_{jl} 是第 j 个特征可能取的第 l 个值;I 为指示函数。

4、贝叶斯估计

用极大似然估计可能会出现所要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。条件概率的贝叶斯估计是:

        P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^{N} I(x_{i}^{(j)}=a_{jl},y_i=c_k )+\lambda }{\sum_{i=1}^{N}I(y_i=c_k) + S_j \lambda }   

式中 \lambda > 0 。等价于在随机变量各个取值的频数上赋予一个正数 \lambda > 0 。当 \lambda = 0 时就是极大似然估计。常取 \lambda = 1 ,这时称为拉普拉斯平滑(Laplacian smoothing)。显然对任何 l=1,2,...,S_j ,k=1,2,...,K ,有:

        P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)>0   

         \sum_{l=1}^{S_j}P(X^{(j)}=a_{jl}|Y=c_k)=1   

同样,先验概率的贝叶斯估计是:

        P_{\lambda}(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k) + \lambda }{N + K\lambda}   

 

0x03、朴素贝叶斯算法(naive Bayes algorithm)

输入:训练数据集 T= \left\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\} ,其中 x_i = (x_{i}^{(1)}, x_{i}^{(2)},..., x_{i}^{(n)})^T ,x_{i}^{(j)} 是第 i 个样本的第 j 个特征,x_{i}^{(j)} \in \left\{a_{j1},a_{j2},...,a_{jS_{j}} \right\} ,a_{jl} 是第 j 个特征可能取的第 l 个值,j=1,2,...,n; l=1,2,...,S_j; y_{i} \in \left\{c_1, c_2,..., c_K \right\} ;实例 x ;

输出:实例 x 的分类。

(1)计算先验概率及条件概率:

        P(Y=c_k) = \frac{\sum_{i=1}^{N} I(y_i =c_k)}{N}, k-1,2,...,K  

        P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(x_{i}^{(j)}=a_{jl},y_{i}=c_k)}{\sum_{i=1}^{N}I(y_i=c_k)} ,j=1,2,...,nl=1,2,...,S_j ;k=1,2,...,K ;

(2)对于给定的实例 x=(x^{(1)},x^{(2)},...,x^{(n)})^T  ,计算:

        P(Y=c_k)\prod_{j=1}^{n}P(X^{j}=x^{(j)}|Y=c_k) , k=1,2,...,K  

(3)确定实例 x 的类:

        y=arg \max_{c_k}P(Y=c_k)\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_k)  

 

0x04、贝叶斯法在sklearn中的实现

在sklearn.naive_bayes类中,根据条件概率不同的分布有多种贝叶斯分类器,列举比较常用的三种:

有伯努利贝叶斯分类器(BernoulliNB),高斯贝叶斯分类器(GaussianNB)和多项式贝叶斯分类器(MultinomialNB)。

API名称 分类器名称 参数 说明
BernoulliNB 伯努利贝叶斯分类器
(二项分布)
alpha 浮点数,默认值1.0;指定贝叶斯估计中的λ
binarize 浮点数或None,默认0.0;
None表明原始数据已二元化;浮点数作为边界,特征取值大于该边界作为1,否则作为0(通过这个浮点数来实现二元化)
fit_prior 布尔型,默认None;
是否学习P(y=Ck),不学习则以均匀分布替代
class_prior 数组,默认None;
可以传入数组指定每个分类的先验概率,None代表从数据集中学习先验概率
GaussianNB 高斯贝叶斯分类器
(高斯分布)
priors 数组,默认None;
可以传入数组指定每个分类的先验概率,None代表从数据集中学习先验概率
var_smoothing 浮点数,默认值1e-9;【新增的参数】
为计算的稳定性而增加的方差
MultinomialNB 多项式贝叶斯分类器
(多项式分布)
alpha 浮点数,默认值1.0;指定贝叶斯估计中的λ
fit_prior 布尔型,默认None;
是否学习P(y=Ck),不学习则以均匀分布替代
class_prior 数组,默认None;
可以传入数组指定每个分类的先验概率,None代表从数据集中学习先验概率

 

参考:

[1]. 李航. 统计学习方法(第二版)

[2]. sklearn之贝叶斯分类器使用 - 博客园

你可能感兴趣的:(机器学习)