朴素贝叶斯

判别模型与生成模型

判别模型

我们知道,其实机器学习就是想办法从特征 XX 来预测目标 yy,也就是求概率 p(yX)p(y|X)

那么对于判别模型,我们只考虑去估计条件概率,是在有限样本的条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型,也可以理解为在二分类问题中,p(y=1X)+p(y=0X)=1p(y=1|X) + p(y=0|X) = 1,条件概率之和等于 11

生成模型

而生成式模型求得 p(y,X)p(y,X),我们需要求出 XX 与不用目标之间的联合分布概率,然后大的获胜,简单来说就是求两个联合概率分布,比较取大的。

什么是朴素贝叶斯?

首先,朴素贝叶斯是个生成模型,朴素贝叶斯分类器是一系列以假设特征之间强独立下运用贝叶斯定理为基础的简单地概率分类器。

朴素贝叶斯自20世纪50年代已广泛研究。在20世纪60年代初就以另外一个名称引入到文本信息检索界中,[1]:488 并仍然是文本分类的一种热门(基准)方法,文本分类是以词频为特征判断文件所属类别或其他(如垃圾邮件、合法性、体育或政治等等)的问题。通过适当的预处理,它可以与这个领域更先进的方法(包括支持向量机)相竞争。[2] 它在自动医疗诊断中也有应用。[3]

朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。

对于某些类型的概率模型,在监督式学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法;换而言之,在不用到贝叶斯概率或者任何贝叶斯模型的情况下,朴素贝叶斯模型也能奏效。

尽管是带着这些朴素思想和过于简单化的假设,但朴素贝叶斯分类器在很多复杂的现实情形中仍能够获取相当好的效果。2004年,一篇分析贝叶斯分类器问题的文章揭示了朴素贝叶斯分类器获取看上去不可思议的分类效果的若干理论上的原因。[5] 尽管如此,2006年有一篇文章详细比较了各种分类方法,发现更新的方法(如决策树随机森林)的性能超过了贝叶斯分类器。[6]

朴素贝叶斯分类器的一个优势在于只需要根据少量的训练数据估计出必要的参数(变量的均值和方差)。由于变量独立假设,只需要估计各个变量的方法,而不需要确定整个协方差矩阵

核心思想:贝叶斯公式,独立性假设

第一部分:贝叶斯公式

理论上,概率模型分类器是一个条件概率模型,这个我们已经并不陌生了,也就是要求出:

p(yX)p(y|X)
独立的类别变量 yy 有若干类别, 条件依赖于若干特征变量 X=X1,X2,,XnX = X_1,X_2, \cdots,X_n,但问题在于如果特征数量 nn 较大或者每个特征取值较大时, 基于概率模型列出的概率需要进行修改,而变得可行:

p(yX)=p(y)(p(Xy)p(X)p(y|X) = \frac{p(y)(p(X|y)}{p(X)}

用简单的语言可以表示为:

举个例子,假如我们有一副扑克,我们想知道在给定它是一张带人的牌的情况下,我们抽的牌是king的概率。所以根据贝叶斯公式,我们知道

接下来这个式子是我们会经常遇到的

posterior=prior×likelihoodevidenceposterior = \frac{prior \times likelihood}{evidence}

而实际中,我们只关心分式的分子部分, 因为分母不依赖于 yy 而且特征 XX 的值是给定的,我们可以认为分母是一个常数,这样分子就等价于联合分布模型。

p(y,X=X1,X2,,Xn)p(y, X = X_1,X_2, \cdots,X_n)

重复使用链式法则,可以将该式写成条件概率的形式,如下:
p(y,X1,X2,,Xn)p(y)p(X1,X2,,Xny)p(y)p(X1y)p(X2,,Xny,X1)p(y)p(X1y)p(X2y,X1)p(X3,,Xny,X1,X2)p(y)p(X1y)p(X2y,X1)p(X3y,X1,X2)p(Xny,X1,X2,,Xn1) \begin{aligned} p(y, X_1,X_2, \cdots,X_n) \\ &\propto p(y)p(X_1,X_2, \cdots,X_n|y) \\ &\propto p(y)p(X_1|y)p(X_2,\cdots,X_n|y,X_1) \\ &\propto p(y)p(X_1|y)p(X_2|y,X_1)p(X_3,\cdots,X_n|y,X_1,X_2) \\ &\cdots \\ &\propto p(y)p(X_1|y)p(X_2|y,X_1)p(X_3|y,X_1,X_2)\cdots p(X_n|y,X_1,X_2,\cdots,X_{n-1}) \end{aligned}

第二部分:条件独立假设

从现在开始, “朴素”的条件独立假设开始发挥作用,什么叫条件独立呢?当两个事件 AABB 在给定的另一个事件 YY 发生时,AA 发生与否和 BB 发生与否就条件概率分布而言是独立的,也就是 AABB 在给定 YY 发生时条件独立,当且仅当已知_Y_发生时,知道 AA 发生与否无助于知道 BB 发生与否,同样知道 BB 发生与否也无助于知道 AA 发生与否。

所以我们假设每个特征 XiX_i 对于其他特征 XjX_jjij \neq i 是条件独立的,意味着

p(Xiy,Xj)=p(Xiy)p(X_i|y,X_j) = p(X_i|y)

对于 iji \neq j,所以联合分布模型可以表达为

p(yX1,X2,,Xn)p(y,X1,X2,,Xn)p(y)p(X1y)p(X2y)p(X3y)p(y)i=1np(Xiy) \begin{aligned} p(y|X_1,X_2, \cdots,X_n) \\ &\propto p(y, X_1,X_2, \cdots,X_n) \\ &\propto p(y)p(X_1|y)p(X_2|y)p(X_3|y) \cdots \\ &\propto p(y)\prod_{i=1}^{n}p(X_i|y) \end{aligned}

所以这意味着,类变量 yy 的条件分布可以表达为:

p(yX1,X2,,Xn)=1Zp(y)i=1np(Xiy)p(y|X_1,X_2, \cdots,X_n) = \frac{1}{Z}p(y)\prod_{i=1}^{n}p(X_i|y)

其中 ZZ (evidence)是一个只依赖于 X1,X2,,XnX_1,X_2, \cdots,X_n 等的缩放因子,因为这个时候的特征变量的值是个常数,只是一个积分而已。由于分解成所谓的先验概率(prior) p(y)p(y) 和独立概率分布 p(Xiy)p(X_i|y), 从而演变成他们的乘积 i=1np(Xiy)\prod_{i=1}^{n}p(X_i|y) (likelihood) 上述模型概率的稳定性得到很大提升。

第三部分:从概率模型中构造分类器

那么如何从朴素贝叶斯概率模型来构造一个分类器,这需要建立一个决策法则,一个很常见的法则就是选出最有可能的那个,就是最大后验概率(MAP)决策准则,相应的分类器是如下定义的公式,这里我们假设 yyKK 个类别,所以对于其中的某个 kk 我们

y^=arg maxk[1,,K]p(yk)i=1np(Xiyk)\hat y = \argmax\limits_{k \in [1,\cdots,K]}p(y_k)\prod_{i=1}^{n}p(X_i|y_k)

所有的模型参数都可以通过训练集的相关频率来估计,类的先验概率可以通过假设各类等概率来计算
=1先验概率 = \frac{1} {类的数量}
或者通过训练集的各类样本出现的次数来估计
A=AA类先验概率=\frac{A类样本的数量}{样本总数}
为了估计特征的分布参数,我们要先假设训练集数据满足某种分布或者非参数模型

延伸:高斯朴素贝叶斯(GBN),线性判别分析(LDA),二次判别分析(QDA)

第一部分:高斯朴素贝叶斯(GBN)

如果要处理的是连续数据,一种通常的假设是这些连续数值为高斯分布。 例如,假设训练集中有一个连续特征 xx,我们首先对数据根据类别分类,然后计算每个类别中 xx均值方差

我们有:

p(y=kX=x)=πkfk(x)l=1kπlfl(x)p(y=k|X=x)=\frac{\pi_kf_k(x)}{\sum_{l=1}^{k}\pi_lf_l(x)}

其中 πk\pi_k先验概率(prior),fk(x)f_k(x)似然函数(likelihood)。

我们用一个特征 x=vx=v 来举例

p(x=vy=k)=fk(x)=12πσy2exp((vμy)22σy2)p(x = v|y=k) =f_k(x)= \frac{1}{\sqrt{2\pi\sigma_y^2}}exp\Big(-\frac{(v-\mu_y)^2}{2\sigma_y^2}\Big)

处理连续数值问题的另一种常用的技术是通过离散化连续数值的方法。通常,当训练样本数量较少或者是精确的分布已知时,通过概率分布的方法是一种更好的选择。在大量样本的情形下离散化的方法表现更优,因为大量的样本可以学习到数据的分布。由于朴素贝叶斯是一种典型的用到font color=red>大量样本的方法(越大计算量的模型可以产生越高的分类精确度),所以朴素贝叶斯方法都用到离散化方法,而不是概率分布估计的方法。

下面是GBN分类器的工作原理,在每一个数据点,在这一点和每个类平均(class-mean)的z-score都可以被计算出来。

如果一个给定的类和特征值在训练集中没有一起出现过,那么基于频率的估计下该概率将为0。这将是一个问题。因为与其他概率相乘时将会把其他概率的信息统统去除。所以常常要求要对每个小类样本的概率估计进行修正,以保证不会出现有为0的概率出现。

尽管实际上独立假设常常是不准确的,但朴素贝叶斯分类器的若干特性让其在实践中能够获取令人惊奇的效果。特别地,各类条件特征之间的解耦(数学中解耦是指使含有多个变量的数学方程变成能够用单个变量表示的方程组,即变量不再同时共同直接影响一个方程的结果,从而简化分析计算)意味着每个特征的分布都可以独立地被当做一维分布来估计。

这样减轻了由于维数灾难带来的阻碍,当样本的特征个数增加时就不需要使样本规模呈指数增长。然而朴素贝叶斯在大多数情况下不能对类概率做出非常准确的估计,但在许多应用中这一点并不要求。

例如,朴素贝叶斯分类器中,依据最大后验概率决策规则只要正确类的后验概率比其他类要高就可以得到正确的分类。所以不管概率估计轻度的甚至是严重的不精确都不影响正确的分类结果。在这种方式下,分类器可以有足够的鲁棒性去忽略朴素贝叶斯概率模型上存在的缺陷。

第二部分:线性判别分析(LDA)

LDA核心思想

LDA作为一种有监督学习的降维、分类技术,可以在保持分类的前提下把数据投影到低维空间以降低计算复杂度。

LDA要求类间的方差最大,而类内的方差最小,以保证投影后同一分类数据集中,不同分类间数据距离尽可能大。

LDA数学推导

回顾一下之前说过的朴素贝叶斯方法,我们有:

Priors=p(y=k)=πkPriors = p(y=k) = \pi_k
Likelihood=p(X=xy=k)=fk(x)=1(2π)n/2Σ1/2exp(12(xμk)TΣ1(xμk))Likelihood = p(X=x|y=k)=f_k(x)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k))
μk\mu_k: Mean of the inputs for category kk
Σ\Sigma: Covariance Matrix (Common to all categories) 十分重要的假设,我们假设对每一类数据的协方差矩阵是相等的!

根据贝叶斯公式,我们计算出后验概率:

p(y=kX=x)=fk(x)πkP(X=x)p(y=k|X=x)=\frac{f_k(x)\pi_k}{P(X=x)}

同样,分母可看做常数

p(y=kX=x)=C×fk(x)πkp(y=k|X=x)=C\times{f_k(x)\pi_k}

展开可得

p(y=kX=x)=Cπk(2π)n/2Σ1/2exp(12(xμk)TΣ1(xμk))p(y=k|X=x)=\frac{C\pi_k}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k))

下面,我们把与 kk 无关的项合并到一起,作为 CC'

p(y=kX=x)=Cπke12(xμk)TΣ1(xμk)p(y=k|X=x)=C'\pi_ke^{-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k)}

下面,对等式两边取对数

log p(y=kX=x)=log C+log πk12(xμk)TΣ1(xμk)log\ p(y=k|X=x)=log\ C'+log\ \pi_k-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k)

注意,log Clog\ C'对于每一个 kk 是一样的,我们要把后面的式子关于 kk 最大化。

Target=log πk12(xμk)TΣ1(xμk)=log πk12[xTΣ1x+μkTΣ1μk]+xTΣ1μk=C+log πk12μkTΣ1μk+xTΣ1μk \begin{aligned} Target &= log\ \pi_k-\frac{1}{2}(x-\mu_k)^T\Sigma^{-1}(x-\mu_k) \\ &= log\ \pi_k-\frac{1}{2}[x^T\Sigma^{-1}x+\mu_k^T\Sigma^{-1}\mu_k]+x^T\Sigma^{-1}\mu_k \\ &= C''+log\ \pi_k - \frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k+x^T\Sigma^{-1}\mu_k \end{aligned}

我们定义我们要最大化的目标函数

δk(x)=log πk12μkTΣ1μk+xTΣ1μk\delta_k(x) = log\ \pi_k-\frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k+x^T\Sigma^{-1}\mu_k

通过最大化 δk(x)\delta_k(x),我们可以通过 xx 来预测目标。

下面来看看LDA的决策边界

什么是决策边界?也就是一系列的数据点使得:

δk(x)=δl(x)\delta_k(x) = \delta_l(x)

log πk12μkTΣ1μk+xTΣ1μk=log πk12μlTΣ1μl+xTΣ1μllog\ \pi_k-\frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k+x^T\Sigma^{-1}\mu_k = log\ \pi_k-\frac{1}{2}\mu_l^T\Sigma^{-1}\mu_l+x^T\Sigma^{-1}\mu_l

那么接下来就到了参数估计的步骤了,记得之前我们已经说过 πk\pi_k,也就是先验概率的估计方法,接下来我们要估计 μk\mu_kΣ\Sigma

μ^k=1#(i;yi=k)i;yi=kxi\hat\mu_k = \frac{1}{\#(i;y_i=k)}\sum_{i;y_i=k}x_i

σ^2=1nKk=1Ki;yi=k(xiμ^k)2\hat\sigma^2=\frac{1}{n-K}\sum_{k=1}^{K}\sum_{i;y_i=k}(x_i-\hat\mu_k)^2

这里的 i;yi=k\sum_{i;y_i=k} 指的是在第 kk 类下的所有样本的相应计算(求样本方差或者样本均值)的总和。

X=(X1,X2,,Xn)X = (X_1,X_2,\cdots,X_n)是从多变量正态分布中抽样得出,所以我们有 XN(μ,Σ)X \sim N(\mu,\Sigma)

所以根据我们之前推出的 δk(x)\delta_k(x),我们有

δ^k(x)=log π^k12μ^kTΣ^1μ^k+xTΣ^1μ^k\hat\delta_k(x) = log\ \hat\pi_k-\frac{1}{2}\hat\mu_k^T\hat\Sigma^{-1}\hat\mu_k+x^T\hat\Sigma^{-1}\hat\mu_k

LDA与逻辑回归的关系

  1. 首先LR对于可以类别可以很准确分类的情况(well-seperated)很不稳定,而且很难处理多类分类问题,所以LDA作为一个生成模型,针对那些 f(Xy)f(X|y) 服从正态分布的情况会更加稳定。
  2. 对于LR,我们有
    p(y=1X)=p1=11+eθTxp(y=1|X)=p_1=\frac{1}{1+e^{-\theta^Tx}}
    log(p11p1)=θTxlog(\frac{p_1}{1-p_1})=\theta^Tx
    而对于LDA,我们也可以把上式写成
    log(p11p1)=wTxlog(\frac{p_1}{1-p_1})=w^Tx
    其中 wwμk\mu_kσk\sigma_k 的函数。

第三部分:二次判别分析(QDA)

至于QDA,它跟LDA的区别在于我们去掉了之前重要的假设,也就是在QDA中,我们要对每个类 kk 来分别估计 μ^k\hat\mu_kΣ^k\hat\Sigma_k

根据之前推导的 δk(x)\delta_k(x),我们有

δk(x)=log πk12μkTΣ1μk+xTΣ1μk12xTΣk1x12log Σk\delta_k(x) = log\ \pi_k-\frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k+x^T\Sigma^{-1}\mu_k - \frac{1}{2}x^T\Sigma_k^{-1}x-\frac{1}{2}log\ |\Sigma_k|

可以看出 δk(x)\delta_k(x)xx二次函数

来看一下LDA和QDA的决策边界的对比

当我们分别去求 Σ^k\hat\Sigma_k,这样加大了计算量,提高了模型的复杂度,甚至可以说复杂度与LDA差别较大,当训练集很大时,我们可以使用QDA。

实际应用和代码展示

朴素贝叶斯方法相关面经和其他资料

小结

朴素贝叶斯算法的基本思想是建立特征 XX 与输出 yy 之间的联合概率分布 p(X,y)p(X,y) ,在对给定的特征进行预测时,通过贝叶斯定理求出所有可能的输出 p(X|y) ,取其中最大的作为预测结果。其优点是模型简单,效率高,在很多领域有广泛的使用。朴素贝叶斯、LDA/QDA都属于生成模型,收敛速度将快于判别模型(如逻辑回归)。