「伯努利分布+朴素贝叶斯」分类器
在神经网络技术还不成熟的时候,朴素贝叶斯分类器(NBC)是文档分类的利器。即便是在神经网络满地走的今天,朴素贝叶斯模型依然有很大的价值。进行文档分类时,这个模型只需要进行几次简单的循环,就可以给出结果,在一些对结果要求不是特别高、对性能要求很高的场景下,具有很大的价值。
这篇文章以文档分类问题引出,重点将特征的伯努利分布(Bernoulli)带入朴素贝叶斯模型,熟悉贝叶斯统计的流程和计算。
本文的md源码在这里:AnBlog/统计和机器学习
目录
可以解决的问题
在进行文档分类之前,需要对文本进行一些处理。对于这个模型来说,最关键的一步是建立一个特征(feature)向量,向量的每个分量(entry)对应文本中可能出现的一个单词,取值 0 , 1 0,1 0,1,表示存在/不存在。
这样的一个分量用伯努利分布描述,参数为 θ \theta θ:
p ( x = 1 ∣ θ ) = θ , p ( x = 0 ∣ θ ) = 1 − θ p(x=1|\theta)=\theta,p(x=0|\theta)=1-\theta p(x=1∣θ)=θ,p(x=0∣θ)=1−θ
在其他问题中,这个分布可能取正态分布,或其他分布,但过程的其他部分大同小异。
建立这样的一个从「单词」到「 0 , 1 0,1 0,1」的映射,可以通过简单的哈希表实现。一段文本中可能出现各种各样的单词,为了保证完备,一段文本对应的特征可能特别多,可能包含所有的英语单词、中文字符,以及世界上的各种其他语言!一定存在一些更省空间的优化,但这不是这篇文章的重点。
模型的目标由需求决定,通常是个二分类问题,判断邮件是/不是垃圾邮件。这篇文章讨论多类分类问题,目标 y y y服从多项的伯努利分布(Multinoulli),参数为 π \pi π:
p ( y ∣ π ) = ∏ c π c I ( y = c ) , ∑ c π c = 1 p(y|\pi)=\prod_c\pi_c^{I(y=c)},\sum_c\pi_c=1 p(y∣π)=c∏πcI(y=c),c∑πc=1
解决问题的过程,就是根据现有的数据 D D D,估计参数 θ , π \theta,\pi θ,π,从而求目标 y y y未来取某值的概率 p ( y = … ) p(y=…) p(y=…)。
「朴素」的意思
「朴素」指的是假设对象的特征都相互独立,这当然不是一个完美的假设,所以才「朴素」(naive)。也就是说,对象特征 x ⃗ \vec x x的概率分布函数,是各个特征 x j x_j xj的概率分布函数的乘积:
p ( x ⃗ ) = ∏ j = 1 D p ( x j ) p(\vec x)=\prod_{j=1}^Dp(x_j) p(x)=j=1∏Dp(xj)
具体要算什么
假设一个多类分类问题,在具有数据集合 D D D的时候,看见一些特征 x ⃗ \vec x x时,目标 y y y应取何值。目标 y y y由概率分布描述:
p ( y = c ∣ x ⃗ , D ) p(y=c|\vec x,D) p(y=c∣x,D)
用这个模型进行预测:
p ( y = c ∣ x ⃗ , D ) ∝ p ( y = c ∣ D ) p ( x ⃗ ∣ y = c , D ) = p ( y = c ∣ D ) ∏ j p ( x j ∣ y = c , D ) p(y=c|\vec x,D)\propto p(y=c|D)p(\vec x|y=c,D)=p(y=c|D)\prod_jp(x_j|y=c,D) p(y=c∣x,D)∝p(y=c∣D)p(x∣y=c,D)=p(y=c∣D)j∏p(xj∣y=c,D)
模型的目标是分别表达出 p ( y = c ∣ D ) , p ( x j ∣ y = c , D ) p(y=c|D),p(x_j|y=c,D) p(y=c∣D),p(xj∣y=c,D)。
数据情况和分布假设
假设特征 x x x都只能取得两个离散的值 0 , 1 0,1 0,1,表示「是否存在」,可以用伯努利分布描述这样的数据:
p ( x j ∣ θ j ) = θ j x j ( 1 − θ j ) 1 − x j p(x_j|\theta_j)=\theta_j^{x_j}(1-\theta_j)^{1-x_j} p(xj∣θj)=θjxj(1−θj)1−xj
x x x当然可以取其他的值和分布,取值连续时可以取正态分布,取值为多个离散值时可以是多项伯努利分布。
为了让模型具备更多数据,参数 θ \theta θ和目标分类 c c c发生依赖,不同的 c c c对应不同的参数 θ \theta θ,则要估计的参数 θ \theta θ是一个矩阵 θ j c \theta_{jc} θjc:
p ( x j ∣ y = c , θ j c ) = θ j c x j ( 1 − θ j c ) 1 − x j p(x_j|y=c,\theta_{jc})=\theta_{jc}^{x_j}(1-\theta_{jc})^{1-x_j} p(xj∣y=c,θjc)=θjcxj(1−θjc)1−xj
还未完成的是表达 p ( θ j c ∣ D ) p(\theta_{jc}|D) p(θjc∣D)。
y y y可以取离散的多个不同值, y ∣ D y|D y∣D和特征 x x x无关,可以通过多项伯努利分布描述:
p ( y ∣ π ) = ∏ c π c I ( y = c ) , ∑ c π c = 1 p(y|\pi)=\prod_c\pi_c^{I(y=c)},\sum_c\pi_c=1 p(y∣π)=c∏πcI(y=c),c∑πc=1
参数 π \pi π也需要估计。
写出联合后验分布:
p ( θ , π ∣ D ) ∝ p ( θ , π ) p ( D ∣ θ , π ) = p ( θ ) p ( π ) p ( D ∣ θ , π ) p(\theta,\pi|D)\propto p(\theta,\pi)p(D|\theta,\pi)=p(\theta)p(\pi)p(D|\theta,\pi) p(θ,π∣D)∝p(θ,π)p(D∣θ,π)=p(θ)p(π)p(D∣θ,π)
似然 (Likelihood)
接上式似然:
p ( D ∣ θ , π ) = ∏ i p ( x ( i ) , y ( i ) ∣ θ , π ) = ∏ i p ( x ( i ) ∣ θ , π ) p ( y ( i ) ∣ θ , π ) = ∏ i p ( x ( i ) | θ ) p ( y ( i ) ∣ π ) p(D|\theta,\pi)=\prod_ip(x^{(i)},y^{(i)}|\theta,\pi)=\prod_ip(x^{(i)}|\theta,\pi)p(y^{(i)} |\theta,\pi)=\prod_ip(x^{(i)}|\theta)p(y^{(i)} |\pi) p(D∣θ,π)=i∏p(x(i),y(i)∣θ,π)=i∏p(x(i)∣θ,π)p(y(i)∣θ,π)=i∏p(x(i)|θ)p(y(i)∣π)
其中,对每个特征 j j j:
p ( x ( i ) ∣ θ ) = ∏ j = 1 D p ( x j ( i ) ∣ θ j ) p(x^{(i)}|\theta)=\prod_{j=1}^Dp(x_j^{(i)}|\theta_j) p(x(i)∣θ)=j=1∏Dp(xj(i)∣θj)
为不同的分类设置不同的参数 θ \theta θ以增加模型的复杂度:
p ( x j ( i ) ∣ θ j c ) = ∏ c p ( x j ( i ) ∣ θ j c ) I ( y ( i ) = c ) , p ( x j ( i ) ∣ θ j c ) = θ j c x j ( i ) ( 1 − θ j c ) 1 − x j ( i ) p(x_j^{(i)}|\theta_{jc})=\prod_cp(x_j^{(i)}|\theta_{jc})^{I(y^{(i)}=c)},p(x_j^{(i)}|\theta_{jc})=\theta_{jc}^{x_j^{(i)}}(1-\theta_{jc})^{1-x_j^{(i)}} p(xj(i)∣θjc)=c∏p(xj(i)∣θjc)I(y(i)=c),p(xj(i)∣θjc)=θjcxj(i)(1−θjc)1−xj(i)
最大似然估计 (MLE)
取对数:
ln p ( D ∣ θ , π ) = ln ∏ i p ( x ( i ) , y ( i ) ∣ θ , π ) = ∑ i ( ln p ( y ( i ) ∣ π ) + ∑ j ln p ( x j ( i ) ∣ θ j ) ) \ln p(D|\theta,\pi)=\ln \prod_ip(x^{(i)},y^{(i)}|\theta,\pi)=\sum_i(\ln p(y^{(i)}|\pi)+\sum_j\ln p(x^{(i)}_j|\theta_j)) lnp(D∣θ,π)=lni∏p(x(i),y(i)∣θ,π)=i∑(lnp(y(i)∣π)+j∑lnp(xj(i)∣θj))
y y y部分:
∑ i ln p ( y ( i ) ∣ π ) = ∑ i ∑ c I ( y ( i ) = c ) × ln π c = ∑ c N c ln π c \sum_i\ln p(y^{(i)}|\pi)=\sum_i\sum_cI(y^{(i)}=c)\times\ln\pi_c=\sum_cN_c\ln\pi_c i∑lnp(y(i)∣π)=i∑c∑I(y(i)=c)×lnπc=c∑Nclnπc
x x x部分:
∑ i ∑ j ln p ( x j ( i ) ∣ θ j ) = ∑ j ∑ c ∑ i : y ( i ) = c ( x j ( i ) ln θ j c + ( 1 − x j ( i ) ) ln ( 1 − θ j c ) ) \sum_i\sum_j\ln p(x^{(i)}_j|\theta_j)=\sum_j\sum_c\sum_{i:y^{(i)}=c}(x_j^{(i)}\ln\theta_{jc}+(1-x_j^{(i)})\ln(1-\theta_{jc})) i∑j∑lnp(xj(i)∣θj)=