朴素贝叶斯法

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

先验概率:事情还没有发生,根据以往的经验来判断事情发生的概率。是“由因求果”的体现,是单独事件概率,如 $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}} \right \}$,$j=1,2,...,n$。

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

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

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

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

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

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

通过上面的定义,我们有 $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$$

$$P\left \{ X = x \;|\; Y = c_{k} \right \} = P\left \{ X^{(1)} = x^{(1)}, X^{(2)} = x^{(2)}, \cdots , X^{(n)} = x^{(n)} \;|\; Y = c_{k} \right \}, \; i=1,2,...,m;k=1,2,...,K$$

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

$$K\prod_{j=1}^{n}S_{j}$$

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

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

代下百万特征的问题。

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

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

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

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

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

$$y = arg \; \max_{c_{k}} \; P\left ( Y = c_{k} \right ) \cdot \prod_{j = 1}^{n}P\left ( X^{(j)} = x_{}^{(j)} \;|\; Y = c_{k} \right )$$

 

朴素贝叶斯算法参数估计

1)极大似然估计

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

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

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

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

$$P\left ( X^{\left ( j \right )} = a_{jl} \;|\; Y = c_{k} \right ) = \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$$

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

$$K\left ( \sum_{j=1}^{n}S_{j} + 1 \right )$$

2)贝叶斯估计

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

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

$$P\left ( X^{\left ( j \right )} = a_{jl} \;|\; Y = c_{k} \right ) = \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$ 也称为拉普拉斯平滑。

 

posted @ 2020-09-14 07:30  _yanghh  阅读(306)  评论(0编辑  收藏  举报