• 统计学习:朴素贝叶斯模型


    模型

    生成模型介绍

    我们定义样本空间为(mathcal{X} subseteq mathbb{R}^n),输出空间为(mathcal{Y} = {c_1, c_2, ..., c_K})( extbf{X})为输入空间上的随机向量,其取值为( extbf{x}),满足( extbf{x} in mathcal{X})(Y)为输出空间上的随机变量,设其取值为(y),满足(y in mathcal{Y})。我们将容量为(m)的训练样本表示为:

    [egin{aligned} D = {{ extbf{x}^{(1)}, y^{(1)}}, { extbf{x}^{(2)}, y^{(2)}},..., { extbf{x}^{(m)}, y^{(m)}}} end{aligned} ag{1} ]

    [ ]

    我们遵循机器学习的一个基本假设,即训练样本是从一个未知的总体分布(P( extbf{X} = extbf{x}, Y=y))中采样产生,且训练样本独立同分布。

    我们采取概率模型的视角,即将分类模型表示为条件概率分布(P(Y=y| extbf{X}= extbf{x}))。而依据分布(P(Y=y| extbf{X}= extbf{x}))的求解可将模型分为判别模型和生成模型。判别模型直接对条件概率分布(P(Y=y| extbf{X}= extbf{x}))进行参数估计(估计方法可采用极大似然估计或贝叶斯估计);而生成模型则利用条件概率公式(P(Y=y| extbf{X}= extbf{x}) = frac{P( extbf{X}= extbf{x}, Y=y)}{P( extbf{X}= extbf{x})})来计算分布。分子(P( extbf{X}= extbf{x}, Y=y))是一个联合概率分布,能够还原出联合概率分布(P( extbf{X}= extbf{x}, Y=y))是生成模型的一大特性。

    朴素贝叶斯模型推导

    我们对分子继续运用条件概率公式,进一步得到

    [egin{aligned} P(Y=y| extbf{X}= extbf{x}) = frac{P( extbf{X}= extbf{x}|Y=y)P(Y=y)}{P( extbf{X}= extbf{x})} end{aligned} ag{2} ]

    这个公式即大名鼎鼎的贝叶斯公式。 这里我们采用贝叶斯学派的视角,将(P(Y=y))称为先验概率分布,表示在数据观测之前对(Y)的信念;(P(Y = y| extbf{X}= extbf{x}))称为后验概率分布,表示经过观测数据( extbf{X})(也称“证据”)校正后对(Y)的信念。注意不要和和贝叶斯估计中参数( heta)的先验和后验分布搞混了,贝叶斯估计也应用了贝叶斯公式,但先验概率分布和后验概率分布的实际含义与这里完全不同。

    我们再将分母运用全概率公式展开,我们得到

    [egin{aligned} P(Y=y| extbf{X}= extbf{x})= frac{P( extbf{X}= extbf{x}|Y=y)P(Y=y)}{sum_{yin mathcal{Y}}P( extbf{X}= extbf{x}|Y=y)P(Y=y)} end{aligned} ag{3} ]

    这意味着我们只需要学习概率分布(P(Y=y))(P( extbf{X}= extbf{x}|Y=y)),而无需关心(P( extbf{X}= extbf{x}))

    将随机向量( extbf{x})沿着其特征维度展开,我们继续得到

    [egin{aligned} P( extbf{X} = extbf{x} | Y = y) = P(X_1 = x_1, ..., X_n = x_n | Y=y), quad n ext{为特征维度} end{aligned} ag{4} ]

    这里我们为了简单起见,假设样本属性是离散的,(x_j)的属性集为(A_j={a_1, a_2,..., a_{N_j}}),满足(x_j in A_j)。可以看出,条件概率分布(P( extbf{X}= extbf{x}|Y=y))的参数总量是指数级的((x_j)的属性集(A_j)大小为(N_j)(j=1, 2, ..., n)(Y)可取值有(K)个,那么参数个数为(K prod_{j=1}^{n}N_j)),不能对其直接进行参数估计。

    因此,我们决定对原本拥有指数级参数数量的分布进行拆分。这里,朴素贝叶斯法做出了条件独立性假设:样本特征在类确定的条件下条件独立(这也是“朴素”(Naive)一词的得名)。这样我们就能将原本拥有庞大参数的概率分布进行拆分:

    [egin{aligned} P( extbf{X} = extbf{x} | Y=y) = P(X_1 = x_1, ..., X_n = x_n | Y=y) = prod_{j=1}^nP(X_j = x_j | Y = y) end{aligned} ag{5} ]

    这样,我们就可以对(P( extbf{X} | Y=y))分布进行高效的参数估计。之后,我们对于输入样本( extbf{x}),计算概率分布(P(Y=y| extbf{X}= extbf{x}))

    [egin{aligned} P(Y=y| extbf{X}= extbf{x})= frac{P( extbf{X}= extbf{x}|Y=y)P(Y=y)}{sum_{ y in mathcal{Y}}P( extbf{X}= extbf{x}|Y=y)P(Y=y)} = frac{prod_{j=1}^nP(X_j = x_j | Y=y)P(Y=y)}{sum_{y in mathcal{Y}}[ prod_{j=1}^nP(X_j = x_j | Y=y)P(Y=y) ]} end{aligned} ag{6} ]

    我们采取后验概率最大化原则(即最终的输出分类取使条件概率最大的那个),设(f( extbf{x}))为分类决策函数,即

    [egin{aligned} y = f( extbf{x}) = mathop{argmax}_{y} P(Y = y| extbf{X}= extbf{x})=mathop{argmax}_{y}frac{prod_{j=1}^nP(X_j = x_j | Y=y)P(Y=y)}{sum_{y in mathcal{Y}}[ prod_{j=1}^nP(X_j = x_j | Y=y)P(Y=y) ]} end{aligned} ag{7} ]

    我们发现,不管(y)取何值,式((7))中分母总是恒定的,因此我们可以将式((7))化简为

    [egin{aligned} y = f( extbf{x}) = mathop{argmax}_{y} P(Y=y| extbf{X}= extbf{x}) = mathop{argmax}_{y}prod_{j=1}^nP(X_j = x_j | Y=y)P(Y=y) end{aligned} ag{8} ]

    这就是朴素贝叶斯模型分类决策函数的最终表达式。

    参数估计

    极大似然估计

    如式((8))中所述,我们需要对先验概率分布(P(Y=y))和条件概率分布(P(X_j = x_j|Y=y))进行参数估计。根据极大似然估计(具体的推导过程可以参见李航《统计学习方法》中的习题解答),我们可以运用训练集(D)将先验概率分布(P(Y=y))估计为

    [egin{aligned} P(Y=y) = frac{sum_{i=1}^m(y^{(i)} = y)}{m}, quad m ext{为}D ext{中样本个数} end{aligned} ag{9} ]

    同样,条件概率分布(P(X_j = x_j|Y=y))的估计为

    [egin{aligned} P(X_j = x_j | Y=y) = frac{P(X_j = x_j, Y = y)}{P(Y = y)} = frac{sum_{i=1}^{m}I(x_j^{(i)} =x_j, y^{(i)}=y)}{sum_{i=1}^{m}I(y^{(i)}=y)} , quad m ext{为}D ext{中样本个数} end{aligned} ag{10} ]

    贝叶斯估计(平滑修正)

    观察式((10))可知,如果训练集中属性值(x_j)和类(y)没有同时出现过,即(P(X_j=x_j, Y=y)=0),那么(P(X_j = x_j | Y=y)=0)会直接导致连乘式。这就意味着不管其他属性如何,哪怕其他属性明显符合要求,样本(prod_{j=1}^nP(X_j = x_j | Y=y)=0)( extbf{x})属于类(y)的概率都会被判为0,这明显不太合理。

    因此,为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,我们采用贝叶斯估计,等价于在估计概率值时通常进行“平滑”(smoothing)(具体的推导过程可以参见李航《统计学习方法》中的习题解答)。即令式((10))修正为

    [egin{aligned} P_{lambda}(X_j = x_j|Y=y) = frac{sum_{i=1}^{m}I(x_j^{(i)} =x_j, y^{(i)}=y) + lambda}{sum_{i=1}^{m}I(y^{(i)}=y)+N_j lambda}, quad lambda > 0, quad N_j ext{为属性}x_j ext{可能的取值数} end{aligned} ag{11} ]

    我们常取(lambda=1),这时称为拉普拉斯平滑(Laplacian smoothing)。

    类似地,式((9))中先验概率被修正为:

    [egin{aligned} P_lambda(Y=y) = frac{sum_{i=1}^m(y^{(i)} = y)+lambda}{m+Klambda}, quad lambda > 0, quad K ext{为标签}y ext{可能的取值数} end{aligned} ag{12} ]

    可以看出,拉普拉斯平滑解决了训练集样本数不足导致的概率值为 0 的问题。拉普拉斯修正实际上假设了属性值与类别均匀分布,这是在参数估计的过程中额外引入的关于数据的先验 (prior)。当样本容量趋近于无穷时,我们发现修正过程所引入的先验的影响也趋近于 0,使得计算的概率值趋近于实际的概率值。

    算法

    在实际的应用中,朴素贝叶斯模型有两种训练方式。

    若使用的场景对模型的预测速度要求较高,在给定训练集(D)的情况下,我们将概率分布(P_lambda(Y=y))和概率分布(P_{lambda}(X_j = x_j|Y=y))所有可能的取值((yin mathcal{Y})(x_j in A_j)(A_j)为样本属性取值集合)都计算出来存好,然后在测试样本( extbf{x}^{*})来了之后,通过“查表”的方式将对应的概率值检索出来,然后再对其类别进行判别。这样,我们计算概率分布(P_lambda(Y=y))和概率分布(P_{lambda}(X_j = x_j|Y=y))所有可能取值的过程即对朴素贝叶斯模型进行显式训练的过程。训练算法如下:
     朴素贝叶斯算法
    然后,在对给定输入样本(x^{*})进行判别时,按照下式进行判别:

    [egin{aligned} y = f( extbf{x}^{*}) = mathop{argmax}_{y} P(Y=y| extbf{X}= extbf{x}^{*}) = mathop{argmax}_{y}prod_{j=1}^nP(X_j = x_j^{*} | Y=y)P(Y=y) end{aligned} ag{13} ]

    如果我们不断有新的训练数据产生,可以采用“懒惰学习”(lazy learning)的方法,先不进行任何训练,测试样本来了之后再依照测试样本的属性(x_j^{*})和当前数据集的状况来计算单点概率,这样可以避免对所有可能的属性都计算单点概率。若训练数据不断增加,则可在现有计算结果的基础上,仅仅对新增样本的属性值所涉及的单点概率进行计数修正,这样可以实现“增量学习”。

    数学是符号的艺术,音乐是上界的语言。
  • 相关阅读:
    ActionMQ
    解决Session共享
    Linux中使用keepalived高可用工具解决宕机问题
    Linux安装Nginx
    Nginx基础
    多线程(1)
    单例模式1(3)
    创建型模式5种(2)
    7原则(1)
    反射使用案例(2)
  • 原文地址:https://www.cnblogs.com/lonelyprince7/p/15153997.html
Copyright © 2020-2023  润新知