zoukankan      html  css  js  c++  java
  • 朴素贝叶斯法

    朴素贝叶斯法可以用来做多分类问题。阅读本篇之前需要先去了解一下贝叶斯公式

    先验概率:事情还没有发生,根据以往的经验来判断事情发生的概率。是“由因求果”的体现,是单独事件概率,如 $P(X),P(Y)$。

    后验概率:事情已经发生了,有多种原因,判断事情的发生是由哪一种原因引起的。是“由果求因”,一般的形式为 $P(X|Y)$。

    先回顾一下统计学习方法的模型形式:

        1)决策模型:$Y = f(X)$,给一个输入 $X$,通过决策函数直接得到输出。

        2)条件概率分布:$P(Y|X)$,通过这个分布,给定一个输入 $X$,输出 $Y$ 不同,概率不同,选择概率最大时对应的那个输出 $Y$。

    以上两种都称为判别模型,还有一种生成模型,生成模型也是一种条件概率分布,但它是通过联合概率分布求得的。

    我们来比较一下这三种模型:

        1)$Y = f(X)$:这种模型不考虑 $X,Y$ 之间的随机性。

        2)$P(Y|X)$:只考虑 $Y$ 的随机性,即给定 $X$,得到 $Y$ 的一个分布。

        3)$P(Y|X) = frac{P(X,Y)}{P(X)}$:同时考虑了 $X$ 和 $Y$ 的随机性。

    朴素贝叶斯法正是一种生成模型,所以它并不是直接统计条件概率,而是先计算联合概率分布。

    朴素贝叶斯法基本概念

    输入:为随机向量 $x = (x^{(1)}, x^{(2)}, cdots , x^{(n)})^{T}$,设每个特征 $x^{j}$ 可能取值的集合为 $left { a_{j1},a_{j2},...,a_{jS_{j}} ight }$,$j=1,2,...,n$。

    输出:为随机变量(不是向量),$y in left { c_{1},c_{2}, cdots ,c_{K} ight }$

    条件独立:朴素贝叶斯对输入变量做了这么一个假设,即输入向量 $x$ 的各个特征之间条件独立,尽管这些特征相互依赖或者有些特征由其他特征决定。

    $$Pleft { X = x ;|; Y = c_{k} ight } = Pleft { X^{(1)} = x^{(1)}, X^{(2)} = x^{(2)}, cdots , X^{(n)} = x^{(n)} ;|; Y = c_{k} ight } \
    = Pleft { X^{(1)} = x^{(1)} ;|; Y = c_{k} ight } cdot Pleft { X^{(2)} = x^{(2)} ;|; Y = c_{k} ight } cdot ... cdot Pleft { X^{(n)} = x^{(n)} ;|; Y = c_{k} ight } \
    = prod_{j=1}^{n} Pleft { X^{(j)} = x^{(j)} ;|; Y = c_{k} ight }, ;;; k = 1,2,...,K$$

    假设训练数据集有 $m$ 组,即

    $$T = left {(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) ight }$$

    “朴素”的由来正是因为这个条件独立的假设。

    通过上面的定义,我们有 $m$ 个样本,每个样本有 $n$ 个特征,特征输出有 $K$ 个类别。

    朴素贝叶斯算法思想

    我们的目标是求 $P(Y|X)$,考虑条件概率

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

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

    $$P(Y = c_{k}), ; k = 1,2,3,...,K$$

    $$Pleft { X = x ;|; Y = c_{k} ight } = Pleft { X^{(1)} = x^{(1)}, X^{(2)} = x^{(2)}, cdots , X^{(n)} = x^{(n)} ;|; Y = c_{k} ight }, ; i=1,2,...,m;k=1,2,...,K$$

    但这个计算方法事实上不切实际,已知 $x^{(j)}$ 的可能取值有 $S_{j}$ 个,$Y$ 的可能取值有 $K$ 个,则参数的不同组合方式有

    $$Kprod_{j=1}^{n}S_{j}$$

    在实际工程中,特征的数量非常大,也就是 $j$ 很大,假设是 $1000$,而特征的取值数量实际更多,因为很多连续的特征值一般转化为离散值来

    做,所以 $S$ 也很大(即使原始问题就是离散问题也不小),假设也是 $1000$ ,那么参数个数也达到了 $1000^{1001}$ 的数量级,更别说动辄大数据时

    代下百万特征的问题。

    为了降低计算的复杂度,朴素贝叶斯的假设便排上用场,因为各个特征之间条件独立,所以没必要一股脑的将所有特征联合起来。

    $$Pleft { X = x ;|; Y = c_{k} ight } = prod_{j=1}^{n}Pleft ( X^{(j)} = x^{(j)} ;|; Y = c_{k} ight ),; i=1,2,...,m; k=1,2,..,K$$

    于是数量级变成了 $1000^{3}$。最后得到的条件概率为

    $$Pleft ( Y = c_{k} ;|; X = x ight ) = frac{P(X = x, Y = c_{k})}{P(X = x)}
    = frac{Pleft ( X = x ;|; Y = c_{k} ight )Pleft ( Y = c_{k} ight )}{P(X = x)} \
    = frac{Pleft ( Y = c_{k} ight ) cdot prod_{j = 1}^{n}Pleft ( X^{(j)} = x^{(j)} ;|; Y = c_{k} ight )}{P(X = x)}, ; i=1,2,...,m; k=1,2,..,K$$

    每当输入一个特征向量 $x$(属于测试集),在寻找使 $P(Y|X)$ 最大的 $y$ 是,分母是不变的,所以只需要考虑使分子最大即可。

    $$y = arg ; max_{c_{k}} ; Pleft ( Y = c_{k} ight ) cdot prod_{j = 1}^{n}Pleft ( X^{(j)} = x_{}^{(j)} ;|; Y = c_{k} ight )$$

    朴素贝叶斯算法参数估计

    1)极大似然估计

       其实就是用样本估计总体,感觉这个名字不太贴切,可以这么想,如果用样本的计算结果作为总体的概率,那这组样本

       不就是最有可能出现的吗?

    $$P(Y = c_{k}) = frac{sum_{i=1}^{m}I(y_{i} = c_{k})}{m}, ; k = 1,2,3,...,K$$

       这就得到了 $K$ 个概率值。

    $$Pleft ( X^{left ( j ight )} = a_{jl} ;|; Y = c_{k} ight ) = frac{sum_{i=1}^{m}I(x_{i}^{(j)} = a_{jl},y_{i} = c_{k})}{sum_{i=1}^{m}I(y_{i} = c_{k})},j=1,2,...,n; l = 1,2,...,S_{j};k=1,2,..,K$$

       这就得到了 $Ksum_{j=1}^{n}S_{j}$ 个概率值,所以一共得到的概率值有

    $$Kleft ( sum_{j=1}^{n}S_{j} + 1 ight )$$

    2)贝叶斯估计

       但是有一个问题,训练集样本没办法覆盖所有的可能取值,这就可能导致预测的时候,所计算的先验概率为 $0$。

    $$P(Y = c_{k}) = frac{sum_{i=1}^{m}I(y_{i} = c_{k}) + lambda}{m + Klambda}, ; k = 1,2,3,...,K$$

    $$Pleft ( X^{left ( j ight )} = a_{jl} ;|; Y = c_{k} ight ) = frac{sum_{i=1}^{m}I(x_{i}^{(j)} = a_{jl},y_{i} = c_{k}) + lambda}{sum_{i=1}^{m}I(y_{i} = c_{k}) + S_{j}lambda},j=1,2,...,n; l = 1,2,...,S_{j};k=1,2,..,K$$

       分母多加的那一项是为了时概率和保持为 $1$,不然违背了概率理论。引入 $lambda$ 也称为拉普拉斯平滑。

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/yanghh/p/13664742.html
Copyright © 2011-2022 走看看