朴素贝叶斯
前言
其实概统学完有一阵了,为什么这个时候才学习这个机器学习算法呢? 因为我摸了。 因为当时事业繁忙。写这篇博客的时候,略感轻松,正是夏夜,吹着冷风,索性写一下,免得忘记了,也不失零落闲拾之意。
导入
整个朴素贝叶斯,最基本的公式如下:
$$P(X|Y) =\frac{P(XY)}{P(Y)} $$
$$P(X) = \displaystyle \sum P(X|Y=y_i)P(Y=y_i),其中 \displaystyle \sum P(Y=y_i) = 1 $$
基本方法
定义输入空间 $\Chi$ 为 n 维向量的集合,输出空间为类标记集合 $\gamma = {c_1,…,c_K}$
输入为特征向量 $x \in \Chi $,输出为类标记 $y \in \gamma$,$P(X,Y)$是联合概率分布,其生成的独立同分布的训练数据集为:
$$T = {(x_1,y_1),…,(x_N,y_N)}$$
朴素贝叶斯通过训练数据集学习联合概率分布 $P(X,Y)$,再对于给定的输入计算后验概率分布,其后验概率最大的类作为输出.
其学习过程如下:
- 先学习先验概率分布: $P(Y=c_k), k = 1,…,K$
- 学习条件概率分布: $P(X=x|Y=c_k) = P(X^{1} = x^{(1)},..,X^{(n)} = x^{(n)} | Y=c_k)$
对于条件概率分布的学习,为了降低复杂度,做了条件独立性的假设,认为输入的每一个维度之间是独立的,既:
$$\begin{aligned}
P(X=x|Y=c_k) & = P(X^{(1)} = x^{(1)},..,X^{(n)} = x^{(n)} | Y=c_k) \\
& = \prod P(X^{j} = x^{(j)} | Y=c_k)
\end{aligned}$$
那么计算后验概率的时候:
$$\begin{aligned}
P(Y=c_k|X=x) & = \frac{P(Y=c_k \quad X=x)}{P(X=x)} \\
& = \frac{P(X = x|Y=c_k) P(Y=c_k)}{P(X=x)} \\
& = \frac{P(Y=c_k)\prod P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum P(X|Y=c_i)P(Y=c_i)}
\end{aligned}$$
因此,输出
$$\begin{aligned}
y & = arg \quad max \frac{P(Y=c_k)\prod P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum P(X|Y=c_i)P(Y=c_i)} \\
& = arg \quad max P(Y=c_k)\prod P(X^{(j)}=x^{(j)}|Y=c_k)
\end{aligned}$$
参数估计
学习就意味着需要估计$P(Y=c_k)$和$P(X^{(j)}=x^{(j)} | Y=c_k)$,下面是常用的估计方法
极大似然估计法
$$P(Y=c_k) = \frac{\sum I(y_i=c_k)}{N},N 为样本的总量$$
$$P(X^{(j)}=a_{jl} | Y=c_k) = \frac{\sum I(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum I(y_i=c_k)}$$
贝叶斯估计
对于$P(X^{(j)}=a_{jl} | Y=c_k)$,可能出现其值为0的情况,这会导致整个$P(X=x|Y=c_k)$为0。为了减小这种偏差,可以采用贝叶斯估计。
$$P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum I(x_i^{(j)}=a_{jl},y_i=c_k) + \lambda}{\sum I(y_i=c_k) + S_j \lambda} \quad ,S_j为输入的维数$$
当$\lambda = 0$为极大似然估计法,当$\lambda = 1$为拉普斯平滑.
显然,每一个条件概率的值大于0,其和为1,是一种概率分布.
同样,先验概率的贝叶斯估计为
$$P(Y=c_k) = \frac{\sum I(y_i=c_k) + \lambda}{N + K\lambda}$$