• 统计学习方法 学习笔记(九):朴素贝叶斯法


    今天来了解一下比较有名的相对简单的生成模型——朴素贝叶斯法

    朴素贝叶斯法中的朴素指的是什么呢?指的是简单,那么为啥它是简单的呢?因为它有一个很强的假设:特征条件独立

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

    贝叶斯定理:

    $$P(Y|X) = frac{P(Y,X)}{P(X)} = frac{P(Y)P(X|Y)}{sum_{Y}P(Y)P(X|Y)}$$

    朴素贝叶斯法的学习与分类:

    基本方法:

        设输入空间$mathcal{X} subseteq R^n$为$n$维向量的集合,输出空间为类标记集合$mathcal{Y} = {c_1,c_2,...,c_k}$。输入为特征向量$x in mathcal{X}$,输出为类标记$y in mathcal{Y}$。$X$是定义在输入空间$mathcal{X}$上的随机向量,$Y$是定义在输出空间$mathcal{Y}$上的随机变量。$P(X,Y)$是$X$和$Y$的联合概率分布。训练数据集:

    $$T = {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}$$

    由$P(X,Y)$独立同分布产生。

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

    $$P(Y=c_k), k =1,2,...,K$$

    条件概率分布:

    $$P(X=x|Y=c_k) = P(X^{(1)}=x^{(1)},X^{(2)}=x^{(2)},...,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$个,那么参数个数为$Kprod_{j=1}^{n}S_j$

        朴素贝叶斯法对条件概率分布作了条件独立性的假设:

    $$P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},X^{(2)}=x^{(2)},...,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_kP(X=x|Y=c_k)P(Y=c_k)}$$

    进一步将条件独立性假设代入:

    $$P(Y=c_k|X=x) = frac{P(Y=c_k)prod_jP(X^{(j)}|Y=c_k)}{sum_kP(Y=c_k)prod_jP(X^{(j)}=x^{(j)}|Y=c_k)}, k=1,2,...,K$$

    这是朴素贝叶斯法分类的基本公式,于是:

    $$y=f(x)=arg max_{c_k}frac{P(Y=c_k)prod_jP(X^{(j)}|Y=c_k)}{sum_kP(Y=c_k)prod_jP(X^{(j)}=x^{(j)}|Y=c_k)}$$

    注意到,在上式中分母对所有$c_k$都相同的,所以:

    $$y=f(x)=arg max_{c_k}P(Y=c_k)prod_jP(X^{(j)}|Y=c_k)$$

    后验概率最大化的含义:

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

    $$L(Y,f(X)) = left{egin{matrix}
    1, &Y eq f(X) \
    0,&Y = f(X)
    end{matrix} ight.$$

    式中$f(X)$是分类决策函数。这时,期望风险函数为:

    $$R_{exp}(f) = E[L(Y,f(X))]=E_Xsum_{k=1}^{K}[L(c_k,f(X))]P(c_k|X)$$

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

    egin{align*}
    f(x)&=arg min_{yinmathcal{Y}}sum_{k=1}^{K}L(c_k,y)P(c_k|X=x)\
    &=arg min_{yinmathcal{Y}} sum_{k=1}^{K}P(y eq c_k|X=x)\
    &=arg min_{yinmathcal{Y}}(1-P(y=c_k|X=x)) \
    &=arg max_{yinmathcal{Y}}P(y=c_k|X=x)
    end{align*}

    这样一来,根据期望风险最小化准则就得到了后验概率最大化准则:

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

    即朴素贝叶斯法采用的原理。

    朴素贝叶斯法的参数估计:

    极大似然估计:

        在朴素贝叶斯法中,学习意味着估计$P(Y=c_k)$和$P(X^{(j)}=x^{(j)}|Y=c_k)$。可以应用极大似然估计法估计相应的概率。先验概率$P(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)}$可能取值的集合为${a_{j1},a_{j2},...,a_{js_j}}$,条件概率$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_j;k=1,2,...,K$$

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

    朴素贝叶斯算法:(朴素贝叶斯算法的学习与分类算法)

        输入:训练数据$T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}$,其中$x_i = (x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T$,$x_i^{(j)}$是第$i$个样本的第$j$个特征,$x_i^{(j)}in {a_{j1},a_{j2},...,a_{jS_j}}$,$a_{jl}$是第$j$个特征可能取的第$l$个值,$j=1,2,...,n,  l=1,2,...,S_j,  y_iin{c_1,c_2,...,c_k}$;实例$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,...,n;l=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)$$

    贝叶斯估计:

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

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

    $$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_jlambda}$$

    式中$lambda geq 0$,等价于在随机变量各个取值的频数上赋予一个正数$lambda > 0$。当$lambda = 0$时就是极大似然估计,常取$lambda = 1$,这时称为拉普拉斯平滑,显然,对于任何$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$$

  • 相关阅读:
    用错每日活跃用户(DAU)这个指标,无异于挖坑给自己跳
    自我修复型设计-常用的架构设计原则
    UParams
    nodejs的使用场景
    问题
    GitHub Copilot可对整行或全部代码给出AI分析建
    Your AI pair programmer
    飞冰React框架如何配置懒加载
    【630】keras 实现多输出模型
    【629】图像增强(imgaug 包)
  • 原文地址:https://www.cnblogs.com/double-lin/p/10466703.html
Copyright © 2020-2023  润新知