ML 朴素贝叶斯


朴素贝叶斯

一、前置知识回顾

首先呢,我们需要先知道的概率论知识有:

  • 条件概率
    $$
    P(A|B)=\frac{P(AB)}{P(B)}
    $$

  • 全概率公式
    $$
    P(B)=P(B|A)P(A)+P(B|A’)P(A’)
    $$
    全概率表示的是,达到某个目的的多种方式各自概率的和。

  • 贝叶斯公式
    $$
    P(A|B)=P(A)\frac{P(B|A)}{P(B)}
    $$

    • P(A)是A的"先验概率"(Prior probability),即A不受B影响时的概率

    • P(B)是B的先验概率

    • P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,对A事件概率的重新评估。

    • P(B|A)是条件概率,也叫似然概率。

    • P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

    • 所以,条件概率可以理解成:
      $$
      后验概率 = 先验概率\times调整因子
      $$


二、朴素贝叶斯法

朴素贝叶斯法 = 贝叶斯定理 + 特征条件独立。

朴素贝叶斯分类对条件概率分布做了条件独立性的假设。简单粗暴地设定样本之间是相互独立的,也就是说,样本的出现顺序与上下文关系并不影响计算结果。
$$
P(A,B|Y)=P(A|Y)\cdot P(B|Y)
$$

设输入空间$\mathcal X\subseteq R^n$为n维向量的集合,输出空间为类别标签集合$\mathcal Y={c_1,c_2,\cdots,c_n}$;

设输入的特征向量为$x\in\mathcal X$,输出类别标签$y\in\mathcal Y$,X是满足$\mathcal X$定义的随机向量。Y也是,是输出空间$\mathcal Y$定义上的随机变量。P(X,Y)是X和Y的联合分布,则我们训练用的数据集可以这么描述(由P(X,Y)独立同分布产生):
$$
T=\left\{ (x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n) \right\}
$$
朴素贝叶斯算法主要学习先验概率条件概率分布

  • 先验概率分布为$P(Y=c_k),k=1,2,\cdots,K$,强调一下这里的k是指第k个类别

  • 条件概率分布为$P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(n)}=x^{(n)}|Y=c_k)$

    其中,条件概率分布$P(X=x|Y=c_k)$可是有着指数级别数量的参数,用来估计是很不现实的。

    假设$x^{(j)}$可取值有$S_j$个(j=1,2,3,…,n),Y可取值有K个,那么参数个数为$K\prod_{j=1}^kS_j$

朴素贝叶斯法对条件概率分布做了条件独立性假设,这是一个很强的假设,描述成数学语言就是:
$$
P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(n)}=x^{(n)}|Y=c_k)\\=
\prod_{j=1}^nP(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)}
$$
上面这个式子代入$\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)$就会得到:
$$
P(Y=c_k|X=x)\\=
\frac{P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)}
$$
这是朴素贝叶斯分类的基本公式,所以分类器可以写为:
$$
y=f(x)\\=
\arg\max_{c_k}
\frac{P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)}
$$
计算后验概率的式子中,分母对所有$c_k$类别都是相同的,所以省略去:
$$
y=f(x)=\arg\max_{c_k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)
$$

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

朴素贝叶斯法将收到的样本分到后验概率最大的类中,假设损失用的0-1损失:
$$
L(Y,f(x))=
\left\{
\begin{matrix}
1,Y\ne f(x) \\
0,Y = f(x)
\end{matrix}\right.
$$
式子里的f(x)是分类决策函数。

这个时候,我们可以对损失函数求个期望,得到期望风险函数:
$$
R_{\exp}(f)=E[L(Y,f(X))]
$$
我们要损失最小化的话,这个期望风险也就要最小化:
$$
\min(E[L(Y,f(X))])
$$
由于本篇中贝叶斯方法采用的是条件概率的形式,因此这里的期望也应该是条件期望。

这里大Y是有K个类,所以有K个取值。

期望是对P(X,Y)取的,目的是想知道X归属于$c_k$类别的概率是多少:
$$
R_{\exp}(f)=E_X\sum_{i=1}^K[L(c_k,f(X))]P(c_k|X)
$$
现在,我们损失最小化问题就转为 使这个条件期望$R_{\exp}(f)$最小化问题了

而要想条件期望最小化,只需要对$X=x$的每一个点求最小值即可。

现在我们对任意一个小x的点,取它对应的决策函数$f(X)$,这个$f(x)$对应着某一个类。怎么选这个类呢?就是使期望风险达到最小的时候对应的那个类。这里写成$\arg\min$形式:
$$
f(x)=\arg\min_{y\in\mathcal Y}\sum_{k=1}^{K}L(c_k,y)P(c_k|X=x)
$$
因为只有分类错的时候有值,所以写成:
$$
f(x)=\arg\min_{y\in\mathcal Y}\sum_{k=1}^{K}L(c_k,y)P(c_k|X=x)\\=
\arg\min_{y\in\mathcal Y}\sum_{k=1}^KP(y\ne c_k|X=x)\\=
\arg\min_{y\in\mathcal Y}(1-P(y=c_k|X=x))\\=
\arg\max_{y\in\mathcal Y}P(y=c_k|X=x)
$$
这样一来,根据期望风险最小化准则就得到了后验概率最大化准则,我们把上面的推断总结成下面的式子:
$$
f(x)=\arg\max_{c_k}P(c_k|X=x)
$$
也就是朴素贝叶斯所采用的原理

三、朴素贝叶斯的参数估计

因为朴素贝叶斯分类法最终使用的方法是:
$$
y=\arg\max_{c_k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)
$$
在朴素贝叶斯中,学习意味着要估计$P(Y=c_k)$和$P(X^{(j)}=x^{(j)}|Y=c_k)$。是总体中n+1个参数。

要想估计这些参数,可以使用样本(也就是机器学习中的训练集)来进行参数估计。估计这些参数的过程就是模型训练。

可以使用极大似然估计法估计相应的概率。先验概率$P(Y=c_k)$的极大似然估计是:
$$
P(Y=c_k)=\frac{\sum_{i=1}^NI(y_i=c_k)}{N}\\
k=1,2,\cdots,K
$$
设第j个特征$x^{(j)}$可能取值的集合为${a_{j1},a_{j2},\cdots,a_{jS_j}}$,则条件概率$P(X^{(j)}=a_{jl}|Y=c_k)$的极大似然估计为:
$$
P(X^{(j)}=a_{jl}|Y=c_k)=
\frac{\sum_{i=1}^NI(x_i^{(j)}=a_{jl}|y_i=c_k)}{\sum_{i=1}^NI(y_i=c_k)}\\
k=1,2,\cdots,K\
j=1,2,\cdots,n\
l=1,2,\cdots,S_j
$$

式子中:

$c_k$是第k个类别,$c_k\in{c_1,c_2,\cdots,c_K}$

$x_i^{(j)}$是第i个样本的第j个特征;

$a_{jl}$是第j个特征可能取的第l个值;

I是指示函数,$y_i=c_k$时,值为1

N是样本数量

所以上式中,分母就是所属类别中,所属实例点的个数

分子就是第j个特征等于$a_{jl}$的时候,并且也属于$c_k$这个类的时候,共有多少个实例点

这俩个数一比,就是我们要求出来的条件概率


这个条件概率我们需要计算多少个?例子中有大K个类别,算上不同特征中各有多少个选择,如第一个特征有S1个选择,第二个特征有S2个。。。可以写成如下形式,这就是要计算的条件概率的个数
$$
K\times S_1\times S_2\times \cdots\times S_n
$$
但这里其实应该是加法,因为朴素贝叶斯有了条件独立假设,没有的话就是乘法。也可以看出条件独立假设的优化有多大:
$$
K(S_1+S_2+\cdots+S_n)
$$

四、学习与分类算法

对于一个分类问题来说,我们希望输入数据集$T=\left\{ (x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n) \right\}$和实例$x=(x^{(1)}),x^{(2)}),\cdots,x^{(n)})$,输出实例x所属的类别y。

  • 1、计算先验概率和条件概率
    $$
    P(Y=c_k)=\frac{\sum_{i=1}^NI(y_i=c_k)}{N}\\
    P(X^{(j)}=a_{jl}|Y=c_k)=
    \frac{\sum_{i=1}^NI(x_i^{(j)}=a_{jl}|y_i=c_k)}{\sum_{i=1}^NI(y_i=c_k)}\\
    k=1,2,\cdots,K\\
    j=1,2,\cdots,n\\
    l=1,2,\cdots,S_j
    $$

  • 2、对于给定的实例$x=(x^{(1)}),x^{(2)}),\cdots,x^{(n)})^T$,计算
    $$
    P(Y=c_k)\prod_{i=1}^{n}
    $$

  • 3、确定实例x的类别
    $$
    y=\arg\max_{c_k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)
    $$

举个栗子🌰,这里用的是《机器学习方法》里的栗子:

现在要计算的是点$x=(2,S)^T$的所属类别

根据上表我们可以得到:
$$
P(Y=1)=\frac{9}{15}
P(Y=-1)=\frac{6}{15}
$$

$X^{(1)}$ $X^{(1)}$ $X^{(1)}$ $X^{(2)}$ $X^{(2)}$ $X^{(2)}$
1 2 3 S M L
Y=1 2/9 3/9 4/9 1/9 4/9 4/9
Y=-1 3/6 2/6 1/6 3/6 2/6 1/6

对于给定的$x=(2,S)^T$
$$
P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)\\=
\frac{9}{15}\times\frac{3}{9}\times\frac{1}{9}=\frac{1}{45}\\
P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1)\\=
\frac{6}{15}\times\frac{2}{6}\times\frac{3}{6}=\frac{1}{15}
$$
因为$P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1)$估计的值最大,所以y=-1

五、贝叶斯估计

用极大似然估计的时候,有时候会因为某类统计的样本为0等原因,导致的概率值为0的情况。这会影响后验概率的计算结果,影响分类的结果

解决这一问题的办法是使用贝叶斯估计:

先验概率的贝叶斯估计:
$$
P_\lambda(Y=c_k)=\frac{\sum_{i=1}^NI(y_i=c_k)+\lambda}{N+K\lambda}
$$
这里分母加上$K\lambda$是为了所求的概率和为1:
$$
\sum_{k=1}^{K}P_\lambda(Y=c_k)=1
$$
条件概率的贝叶斯估计:
$$
P_\lambda(X^{(j)}=a_{jl}|Y=c_k)=
\frac{\sum_{i=1}^NI(x_i^{(j)}=a_{jl}|y_i=c_k)+\lambda}{\sum_{i=1}^NI(y_i=c_k)+S_j\lambda}
\\\lambda\ge0
$$

这里分母加上$s_k\lambda$也是为了所求概率和为1:
$$
\sum_{l=1}^{S_i}P_\lambda(X^{(j)}=a_{jl}|Y=c_k)=1
$$

这里的$\lambda=0$的时候为极大似然估计,$\lambda=1$的时候称为拉普拉斯平滑(Laplacian Smoothing)

举个栗子🌰,还是刚刚的数据:

$X^{(1)}$ $X^{(1)}$ $X^{(1)}$ $X^{(2)}$ $X^{(2)}$ $X^{(2)}$
1 2 3 S M L
Y=1 3/12 4/12 5/12 2/12 5/12 5/12
Y=-1 4/9 3/9 2/9 4/9 3/9 2/9

对于给定的$x=(2,S)^T$
$$
P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)\\=
\frac{10}{17}\times\frac{4}{12}\times\frac{2}{12}=\frac{5}{153}=0.0327\\
P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1)\\=
\frac{7}{17}\times\frac{3}{9}\times\frac{4}{9}=\frac{28}{459}=0.0610
$$
因为$P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1)$估计的值最大,所以y=-1


文章作者: 拓佑豪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 拓佑豪 !
评论
  目录