朴素贝叶斯法

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

先验概率:事情还没有发生,根据以往的经验来判断事情发生的概率。是“由因求果”的体现,是单独事件概率,如 $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$ 也称为拉普拉斯平滑。

原文地址:https://www.cnblogs.com/yanghh/p/13664742.html