多项式朴素贝叶斯MultinomialNB
多项式贝叶斯可能是除了高斯之外,最为人所知的贝叶斯算法了。它也是基于原始的贝叶斯理论,但假设概率分布是服从一个简单多项式分布。多项式分布来源于统计学中的多项式实验,这种实验可以具体解释为:实验包括n次重复试验,每项试验都有不同的可能结果。在任何给定的试验中,特定结果发生的概率是不变的。
举个例子,比如,一个特征矩阵表示投掷硬币的结果,则得到正面的概率为P(X=正面|Y) = 0.5,反面的概率为P(X=反面|Y) = 0.5,只有这两种可能,并且两种结果互不干涉,两个随机事件的概率加和为1,这就是二项分布。这种情况下,适合于多项式朴素贝叶斯的特征矩阵应该长这样:
假设另一个特征X’表示投掷骰子的结果,则 i 就可以在[1,2,3,4,5,6]中取值,六种结果互不干涉,且只要样本量足够大,概率都为1/6,这就是一个多项分布。多项分布的特征矩阵应该长这样:
可以看出:
- 多项式分布擅长的是分类型变量,在其原理假设中,P(xi|Y)的概率是离散的,并且不同xi下的P(xi|Y)相互独立,互不不影响。虽然sklearn中的多项式分布也可以处理连续型变量,但现实中,
如果我们真的想要处理连续型变量,应当使用高斯朴素贝叶斯。 - 多项式实验中的实验结果都很具体,它所涉及的特征往往是次数,频率,计数,出现与否这样的概念,这些概念都是离散的正整数,因此,sklearn中的多项式朴素贝叶斯不接受负值的输入。
由于这样的特性,多项式朴素贝叶斯的特征矩阵经常是稀疏矩阵(不一定总是稀疏矩阵),并且它经常被用于文本分类。我们可以使用著名的TF-IDF向量技术,也可以使用常见并且简单的单词计数向量手段与贝叶斯配合使用。这两种手段都属于常见的文本特征提取的方法,可以很简单地通过sklearn来实现。
从数学的角度来看,在一种标签类别Y=c下,有一组分别对应特征的参数向量θc=(θc1,θc2,...,θcn,)\theta_c=(\theta_{c1},\theta_{c2},...,\theta_{cn},)θc=(θc1,θc2,...,θcn,),其中n表示特征的总数。一个θci\theta_{ci}θci表示这个标签类别下的第i个特征所对应的参数。这个参数被我们定义为:
θci=特征Xi在Y=特征在c这个分类下的所有样本的取值总和所有特征在Y=特征在c这个分类下的所有样本的取值总和\theta_{ci}=\large\frac{特征{X_i}在Y=特征在c这个分类下的所有样本的取值总和}{所有特征在Y=特征在c这个分类下的所有样本的取值总和}θci=所有特征在Y=特征在c这个分类下的所有样本的取值总和特征Xi在Y=特征在c这个分类下的所有样本的取值总和
记作P(Xi|Y=c),表示当Y=c这个条件固定的时候,一组样本Xi在这个特征上的取值被取到的概率。
对于一个在标签类别下,结构为(m, n)的特征矩阵来说,我们有:
Xy=[x11x12…x1nx21x22…x2n⋮⋮⋱xm1xm2…xmn]X_y =\left[ \begin{array}{c} x_{11} & x_{12} & \ldots & x_{1n} \\ x_{21} & x_{22} & \ldots & x_{2n} \\ \vdots & \vdots & \ddots\\ x_{m1} & x_{m2} & \ldots & x_{mn} \\ \end{array} \right]X