1.朴素贝叶斯模型
朴素贝叶斯分类器是一种有监督算法,并且是一种生成模型,简单易于实现,且效果也不错,需要注意,朴素贝叶斯是一种线性模型,他是是基于贝叶斯定理的算法,贝叶斯定理的形式如下:
[P(Y|X) = frac{P(X,Y)}{P(X)} = frac{P(Y) cdot P(X|Y)}{P(X)}]
朴素贝叶斯是这样执行的,假设 $X$ 为数据的特征 其中每一维度均可看做一个随机变量,即 $X_1= x_1,X_2=x_2,...,X_n = x_n$ ,$Y = y_1,....,y_k$ 为对应的类标签, 对于给定的输入 $X$ ,朴素贝叶斯是这样预测其类别 $Y$ 的:
egin{aligned}
P(Y = y_k|X_1 = x_1,X_2=x_2,...,X_n = x_n)
&=frac{P(X_1 = x_1,X_2=x_2,...,X_n = x_n,Y = y_k)}{sum_i P(X_1 = x_1,X_2=x_2,...,X_n = x_n)P(Y=y_i)} \
&=frac{P(Y =y_k) cdot P(X_1 = x_1,X_2=x_2,...,X_n = x_n|Y = y_k)}{P(X_1 = x_1,X_2=x_2,...,X_n = x_n)} \
&=frac{P(Y =y_k) cdot prod_iP(X_i = x_i|Y = y_k)}{P(X_1 = x_1,X_2=x_2,...,X_n = x_n)} \
end{aligned}
朴素二字的含义指的是条件独立,即在类别确定的条件下,各个特征是条件独立的。条件独立可用以下公式表示:
[P(a,b|c) = P(a|c)P(b|c)]
这里第倒数第二步到最后一步就利用了特征间条件独立的特性。综上可可给出最终的贝叶斯分类器的公式,样本 $X$ 的 类别 $Y = y$的计算如下:
[ y = max_{y_k}P(Y=y_k) prod_iP(X_i = x_i|Y=y_k) (1)]
这里需要注意的几个问题
1) 朴素贝叶斯是一个生成模型,需要对联合概率 $P(X,Y)$ 进行建模,然后对于给定的 $X$ 求得关于模型的后验估计 $Y$ 。
2)上式中的 $X_i$ 指把第 $i$ 个特征看做随机变量, $x_i$ 则代表第 $i$ 个特征的取值,特征 $x_i$ 可以有 $I_{x_i}$ 种取值。
3)对于给定的输入 $X$ ,要得到其分别属于 $Y = y_k , k = 1,....K $ 的概率,取其中最大的一个即为其类别。
2.参数估计
对于朴素贝叶斯分类器,根据 $(1)$ 式可以得到需要估计的参数,其中$P(Y= y_k) $ 即训练数据中类别 $k$ 的先验概率,对于大小为 $N$ 类别数目为 $K$ 的训练数据集:[P(Y = y_k) = frac{N_k}{N}, k=1,2,....,K]相对来说,$P(X_i = x_i|Y=y_k)$ 这个参数的估计方法比较多,首先列出最 $navie$ 的一种,即多值伯努利事件模型($Multi-variate$ $Bernoulli$ $Event$ $Model$):
[P(X_i=x_i|Y=y_k) = frac{I_{y_k wedge x_i}+a}{I_{y_k}+aI_{x_i}}]
这里的 $a in [0-1]$ 可以去到一个平滑作用,防止有些特征的某个取值没有出现的情况下 $P(X_i=x_i|Y=y_k)$ 取值为 $0$ 的问题, $a$ 的通常取值为 $1$ ,这便是常见的拉普拉斯平滑。 $I_{y_k wedge x_i}$ 代表特征 $x_i$ 与类别 $y_k$ 的共现次数(多次出现只记做一次), $I_{y_k}$ 代表训练集中 $y_k$ 类别数据的出现次数,$I_{x_i}$ 代表特征 $x_i$ 可能取值的总数, 加上平滑前后均明显可得 $sum_i P(X_i=x_i|Y=y_k)=1$。对于训练数据,得到所有条件概率 $P(X_i=x_i|Y=y_k)$ 后,然后对于新的观测数据 $X_{new}$ ,按照以下公式求解即可:
[ y = max_{y_k}P(Y=y_k) prod_iP(X_i = x_i|Y=y_k) ] 这便是最常见的多类贝叶斯分类器,书上也大多是这种形式,但还有一些变形,分割线一下是朴素贝叶斯的一些变形形式。
因为数据的特性不一样,所以 $X$ 的分布也不一样,这里列举几种其他形式的朴素贝叶斯,分别为高斯贝叶斯与专门适用于文本分类的多项式贝叶斯,不同分布 $P(X_i = x_i|Y=y_k)$ 的计算方式也不同。
2.1 高斯贝叶斯
高斯朴素贝叶斯是用来解决特征值是连续的情况下的参数估计问题,其假设对于每个类别下的每个特征的数据均服从高斯分布,比如说对于类别为男女情况下人的身高、体重作为特征,就可以用高斯朴素贝叶斯来估计参数。一维情况下,高斯分布式的形式这样的:
[N(x|mu,sigma) = frac{1}{ (2pisigma^2)^{1/2}}expleft { -frac{1}{ 2sigma^2}(x- mu)^2 ight }]
其中 $mu$ 为均值, $sigma$ 为标准差。高斯朴素贝叶斯假设对于每个类别下的每个特征的数据均服从高斯分布。对于不同的类别,要分别求出 $n$ 个高斯分布即可,$n$ 代表为特征维度,有了 $mu_{y_k,i}$ 与 $sigma_{y_k,i}$ ,即可求得模型参数:
[P(X_i = x_i|Y=y_k) = frac{1}{ (2pisigma_{y_k,i}^2)^{1/2}}expleft { -frac{1}{ 2sigma_{y_k,i}^2}(x- mu_{y_k,i})^2 ight }]
高斯朴素贝叶斯用的还不是很多,因为样本足够的情况下可以对连续样本进行离散化,离散后按照多值伯努利的方式来处理即可。
2.2多项式分布
多项式贝叶斯是专门用来处理文本分类问题(Ng. 讲义 note3)的,在文本分类领域其表现一般会优于伯努利贝叶斯,因为其不但考虑了特征的出现与否,还考虑了特征出现的次数,可用来处理离散的情况下的参数估计问题,多项式贝叶斯假设每个类别下的所有特征服从一个不考虑次序多项式分布。在多项式贝叶斯文本分类中,首先定义一个词表,大小为 $|V|$,$N_{y_k wedge x_i}$ 表示 特征 $x_i$ 在类别 $y_k$ 下出现的次数,$N_{y_k}$ 代表了类别 $y_k$ 下词语总数:
[P(X_i=x_i|Y=y_k) = frac{N_{y_k wedge x_i}+a}{N_{y_k}+a|V|}]
注意他与伯努利贝叶斯的区别,即这里考虑了次数信息。所以其在文本分类的表现一般由于伯努利贝叶斯,下边给出一个例子,例子里的伯努利为 $2$ 值伯努利,多值情况下类似(参考《统计学习方法》例题).
最后给出两种不同分布情况下的参数估计的结果,均是加上平滑之后的结果。
最后给出分类计算的结果:
参考:
http://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html
https://github.com/endymecy/spark-ml-source-analysis/blob/master/分类和回归/朴素贝叶斯/nb.md
http://scikit-learn.org/stable/modules/naive_bayes.html
http://blog.csdn.net/u012162613/article/details/48323777
统计学习方法 && Ng 讲义 note 3