贝叶斯分类器(1)朴素贝叶斯
朴素贝叶斯(Naive Bayes)是基于贝叶斯定理与特征条件假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入、输出的联合分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯是选出各个分类类别后验概率最大的作为最终分类。
- 优点:对小规模的数据表现很好,适合多分类任务,适合增量式训练。
- 缺点:对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。
一、朴素贝叶斯的学习与分类
1.1贝叶斯定理
条件概率:
\(P(A \mid B)\) 表示事件B已经发生的前提下, 事件B已经发生的前提下, 事件A发生的概率, 叫做事件 \(B\) 发生下事件 \(A\) 的条件概率。其基本求解公式为 \[ P(A \mid B)=\frac{P(A B)}{P(B)} \] 贝叶斯定理便是基于条件概率, 通过 \(P(A \mid B)\) 来求 \(P(B \mid A)\) :【通过先验概率计算后验概率】 \[ P(B \mid A)=\frac{P(A \mid B) \cdot P(B)}{P(A)} \] 顺便提一下, 上式中的分母, 可以根据全概率公式分解为: \[ P(A)=\sum_{i=1}^n P\left(B_i\right) P\left(A \mid B_i\right) \]
1.2 特征条件独立假设
这一部分开始朴素贝叶斯的理论推导,从中你会深刻地理解什么是特征条件独立假设。给定训练数据集\((X,Y)\),其中每个样本\(X\)都包括 \(n\) 维特征,即\(x=(x1,x2,···,xn)\),类标记集合含有\(K\)种类别,即\(y=(y1,y2,···,yk)\).
如果现在来了一个新样本 \(x\) 我们要怎么判断它的类别?从概率的角度来看,这个问题就是给定\(x\),它属于哪个类别的概率更大。那么问题就转化为求解 \(P(y1|x),P(y2|x),P(yk|x)P(y1|x),P(y2|x),P(yk|x)\) 中最大的那个,即求后验概率最大的输出:\(arg max_{y_k}P(y_k|x)\)
根据全概率公式,可以进一步分解上式中的分母: \[ P\left(y_k \mid x\right)=\frac{P\left(x \mid y_k\right) \cdot P\left(y_k\right)}{\sum_{i=1}^n P\left(x \mid y_k\right) P\left(y_k\right)} \]
- \(P\left(y_k\right)\) : 先验概率【训练集计算】
- \(P\left(x \mid y_k\right)=P\left(x_1, x_2, \cdots, x_n \mid y_k\right)\) : 条件概率, 它的参数规模是指数数量级别的。假设第 \(\mathrm{S}\) 维特征 \(\mathrm{i}\) 可取值的个数 有 \(\mathrm{Si}\) 个, 类别取值个数为 \(\mathrm{k}\) 个, 那么参数个数为 \(k \prod S_j\) 。
- 独立性的假设: 通俗地讲就是说假设各个维度的特征互相独立, 这样参数规模就降到了 \(\sum S_i k\) ,【积->和】
\[ P\left(x \mid y_i\right)=P\left(x_1, x_2, \cdots, x_n \mid y_i\right)=\prod_{i=1}^n P\left(x_i \mid y_i\right) \]
- 代入公式1得出:
\[ P\left(y_k \mid x\right)=\frac{P\left(y_k\right) \prod_{i=1}^n P\left(x_i \mid y_k\right)}{\sum_k P\left(y_k\right) \prod_{i=1}^n P\left(x_i \mid y_k\right)} \]
- 于是朴素贝叶斯分类器可表示为:
\[ f(x)=\arg \max _{y_k} P\left(y_k \mid x\right)=\arg \max _{y_k} \frac{P\left(y_k\right) \prod_{i=1}^n P\left(x_i \mid y_k\right)}{\sum_k P\left(y_k\right) \prod_{i=1}^n P\left(x_i \mid y_k\right)} \]
- 由于分母值都是一样的:极大后验概率估计
\[ f(x)=\arg \max _{y_k} P\left(y_k\right) \prod_{i=1}^n P\left(x_i \mid y_k\right) \]
1.3 朴素贝叶斯法的参数估计【求解】
朴素贝叶斯要学习的东西就是: \(P\left(Y=c_k\right)\) 和 \(\mid P\left(X^j=a_{j l} \mid Y=c_k\right)\) 【极大似然函数 + 拉格朗日乘数法】
- 先验概率 \(P(Y=c k)\) 的极大似然估计是, 样本在 \(c_k\) 出现的次数除以样本容量:
\[ P\left(Y=c_k\right)=\frac{\sum_{i=1}^N I\left(y_i=c_k\right)}{N}, k=1,2, \cdots, K \]
- 设第 \(j\) 个特征 \(x(j)\) 可能取值的集合为 \(a_{j 1}, a_{j 2}, \cdots, a_{j l}\), 条件概率 \(P\left(X_j=a_{j l} \mid Y=c k\right)\) 的极大似然估计是:
\[ P\left(X^{(j)}=a_{j l} \mid Y=c_k\right)=\frac{\sum_{i=1}^N I\left(x_i^{(j)}=a_{j l}, y_{i=} c_k\right)}{\sum_{i=1}^N I\left(y_i=c_k\right)} \]
1.4 贝叶斯估计【缺失值处理】【拉普拉斯平滑】
先验概率的贝叶斯估计: \[ P_\lambda\left(Y=c_k\right)=\frac{\sum_{i=1}^N I\left(y_i=c_k\right)+\lambda}{N+K \lambda} \] 条件概率的贝叶斯估计:【离散型】 \[ P_\lambda\left(X^{(j)}=a_{j l} \| Y=c_k\right)=\frac{\sum_{i=1}^N I\left(x_i^{(j)}=a_{j l}, y_{i=} c_k\right)+\lambda}{\sum_{i=1}^N I\left(y_i=c_k\right)+S_j \lambda} \]
1.5 朴素贝叶斯有什么优缺点?
优点:【数学理论、缺失异常不敏感、快、增量式训练】
- 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
- 对缺失数据和异常数据不太敏感,算法也比较简单,常用于文本分类。
- 分类准确度高,速度快。
- 对小规模的数据表现很好,能处理多分类任务,适合增量式训练,当数据量超出内存时,我们可以一批批的去增量训练(朴素贝叶斯在训练过程中只需要计算各个类的概率和各个属性的类条件概率,这些概率值可以快速地根据增量数据进行更新,无需重新全量计算)。
缺点:
- 对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。
- 对训练数据的依赖性很强,如果训练数据误差较大,那么预测出来的效果就会不佳。
- 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。 但是在实际中,因为朴素贝叶斯“朴素,”的特点,导致在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
- 需要知道先验概率,且先验概率很多时候是基于假设或者已有的训练数据所得的,这在某些时候可能会因为假设先验概率的原因出现分类决策上的错误。
二、高斯贝叶斯模型
classifier = naive_bayes.MultinomialNB()
2.1 朴素贝叶斯(连续型数据处理)
- 每一个连续的数据离散化,然后用相应的离散区间替换连续数值。这种方法对于划分离散区间的粒度要求较高,不能太细,也不能太粗。
- 假设连续数据服从某个概率分布,使用训练数据估计分布参数,通常我们用高斯分布来表示连续数据的类条件概率分布。
GaussianNB 的条件概率密度计算:其中均值和方差可以通过极大似然估计得出。 \[ \begin{aligned} &p\left(X^{(j)}=a_{j l} \mid y=c_{k}\right)=\frac{1}{\sqrt{2 \pi} \sigma_{j k}} e^{-\frac{\left(a_{j l}-\mu_{j k}\right)^{2}}{2 \sigma_{j k}^{2}}} \end{aligned} \]
三、贝叶斯网络
3.1 概率图模型
概率图模型分为贝叶斯网络(Bayesian Network)和马尔可夫网络(Markov Network)两大类。贝叶斯网络可以用一个有向图结构表示,马尔可夫网络可以表示成一个无向图的网络结构。更详细地说,概率图模型包括了朴素贝叶斯模型、最大熵模型、隐马尔可夫模型、条件随机场、主题模型等,在机器学习的诸多场景中都有着广泛的应用。
- 贝叶斯网络 -- 结点与结点之间是以有向箭头相连接,代表是这个结点会影响下一个结点
- 马尔可夫网络 -- 结点与结点之间是以无向箭头相连接,代表是结点与结点之间会相互影响