[NLP复习笔记] 朴素贝叶斯分类器

1. 贝叶斯决策论

假设有 \(N\) 中类别标记 \(\gamma = \{c_1, c_2, \dots, c_N\}\)\(\lambda_{ij}\) 是将一个真实标记为 \(c_{j}\) 分类为 \(c_i\) 所产生的损失。基于后验概率 \(P(c | \mathbf{x})\) 可以得到样本 \(\mathbf{x}\) 分类为 \(c_i\) 的期望损失(\(\text{expected loss}\)),也即样本 \(\mathbf{x}\) 上的条件风险(\(\text{conditional risk}\)):

\[R(c_i | \mathbf{x}) = \sum_{j=1}^N \lambda_{ij}P(c_j | \mathbf{x}) \]

我们的目标是使得总体风险最小化,只需要在每个样本上选择使得条件风险最小的类别标记,即:

\[h^*(\mathbf{x}) = \text{arg} \min_{c \in \gamma} R(c | \mathbf{x}) \]

\(h^*\) 被称为 贝叶斯最优分类器\(\text{Bayes optimal classifier}\))。与之对应的总体风险 \(R(h^*)\) 称为 贝叶斯风险\(\text{Bayes risk}\))。

由此,误判损失 \(\lambda_{ij}\) 可写为:

\[\lambda_{ij} = \begin{cases} 0, & \text{if} \; i=j \\ 1, & \text{else} \end{cases} \]

此时的条件风险有:

\[R(c | \mathbf{x}) = 1 - P(c | \mathbf{x}) \]

故最小化损失的贝叶斯最优分类器可以转换为如下形式:

\[h^*(\mathbf{x}) = \text{arg} \max_{c \in \gamma} P(c | \mathbf{x}) \]

也就是对于每个样本 \(\mathbf{x}\),选择一个使得后验概率 \(P(c | \mathbf{x})\) 最大的类别标记。

对于条件概率 \(P(c | \mathbf{x}) = \frac{P(\mathbf{x}, c)}{P(\mathbf{x})}\),由 贝叶斯定理 得:

\[P(c | \mathbf{x}) = \frac{P(c)P(\mathbf{x} | c)}{P(\mathbf{x})} \]

其中,\(P(c)\)类先验概率\(P(\mathbf{x}|c)\) 为样本 \(\mathbf{x}\) 相对于类标记 \(c\)类条件概率\(\text{class-conditional probability}\)),或称为 似然\(\text{likelihood}\));\(P(\mathbf{x})\) 为用于归一化的证据因子。

所以最优贝叶斯分类器可以改写为:

\[h^*(\mathbf{x}) = \text{arg}\max_{c \in \gamma}\frac{P(c)P(\mathbf{x}|c)}{P(\mathbf{x})} \]

显然,对于给定的样本 \(\mathbf{x}\)\(P(\mathbf{x})\) 与类别标记是无关的,所以问题就转换为:

\[h^*(\mathbf{x}) = \text{arg}\max_{c \in \gamma}P(c)P(\mathbf{x} | c) \]




2. 朴素贝叶斯分类器

2.1 独立性假设

朴素贝叶斯分类器\(\text{naive Bayes classifier}\))采用了“属性条件独立性假设”(\(\text{attribute conditional independence assumption}\)),对已知类别,假设所有属性相互独立。

在 NLP 文本分类问题中,基于属性独立性假设,可以得到朴素贝叶斯分类器表达式:

\[h_{\text{nb}} = \text{arg}\max_{c_j \in \gamma}P(c_j)\prod_{i=1}^n P(w_i | c_j) \]

显然,朴素贝叶斯分类器的训练过程就是基于训练集 \(D\) 来估计类先验概率 \(P(c_j)\),并且为每个单词估计条件概率 \(P(w_i | c_j)\)

对于先验概率有:

\[P(c_j) = \frac{|D_{c_{j}}|}{|D|} \]

即标记为 \(c_j\) 类别的样本组成的集合占整个样本集合的比重。

对于条件概率有:

\[P(w_i | c_j) = \frac{C(w_i, c_j)}{\sum_{w\in V} C(w, c_j)} \]

简单地说,就是在 \(c_j\) 类文本中,单词 \(w_i\) 出现地次数占所有单词的比例。


2.2 朴素贝叶斯 + 加一平滑

朴素贝叶斯分类器采用了连乘的方式计算概率,为了防止计算出的概率为0,在估计概率值时通常需要进行平滑处理,一般情况下采用 加一平滑(拉普拉斯平滑)。

通常情况下,最好对 先验概率 \(P(c_j)\)条件概率 \(P(w_i | c_j)\) 都进行 加一平滑

对于先验概率,有可能训练集中不存在某个类别的数据(当然这种可能性比较小),此时会导致先验概率为0,那么分类的时候可能会导致出现错误。

对于条件概率,有可能训练集中一个类别中某个单词从俩没有出现过,此时也会导致概率为0,从而导致结果错误。

所以,对先验概率经过 加一平滑 后有:

\[P(c_j) = \frac{|D_{c_{j}}| + 1}{|D| + N} \]

其中 \(N\) 为类别个数。

对后验概率经过 加一平滑 后有:

\[P(w_i | c_j) = \frac{C(w_i, c_j) + 1}{\sum_{w\in V} C(w, c_j) + |V|} \]

其中 \(|V|\) 为词汇量大小。

PS:之前在做作业的过程中,只是对条件概率进行了加一平滑,包括课件中的示例也是如此,我猜测这是基于训练集中各个类别的都保证有数据的情况下才这么做。但即便如此,对先验概率也进行加一平滑也是好的,毕竟有可能存在训练集中各类别数据数量不平衡之类的、训练出现过拟合等情况,此时加一平滑从一定程度上可以避免这些情况的发生。这些只是我自己的见解,有问题尽管指出。


2.3 未知词

朴素贝叶斯分类器在大部分情况下,不会给未知单词分配概率,也就是说,直接将未知单词当作不存在。


2.4 典型示例

示例来源于课件,只对条件概率进行了加一平滑。




3. 二分类评估

3.1 混淆矩阵

混淆矩阵\(\text{confusion matrix}\))也称误差矩阵,是表示精度评价的一种标准格式,用 \(n \times n\) 的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。

在机器学习中,混淆矩阵特别用于监督学习,在无监督学习一般叫做匹配矩阵。

对于一个二分类系统,将实例分为 正类\(\text{Positive}\))、负类\(\text{Negative}\)

模式分类器有四种分类结果:

  • \(\text{TP}\)\(\text{True Positive}\)):将正类预测为正类

  • \(\text{FN}\)\(\text{False Negative}\)):将 正类判定为负类

  • \(\text{FP}\)\(\text{False Positive}\)):将 负类判定为正类

  • \(\text{TN}\)\(\text{True Negative}\)):将负类判定为负类


3.2 准确率

所有的预测正确(正类负类)的占总的比重。

\[\text{Accuracy} = \frac{\text{TP + TN}}{\text{TP + TN + FP + FN}} \]

虽然准确率能够判断总的正确率,但是在样本不均衡的情况下,并不能作为很好的指标来衡量结果。


3.3 精确率

也称为 查准率,即 正类预测为正 的占 全部预测为正(正类预测为正 + 负类预测为正)的比例。

\[\text{Precision} = \frac{\text{TP}}{\text{TP + FP}} \]

精确率代表对正样本结果中的预测准确程度。


3.4 召回率

正确预测为正 的占 全部实际为正(正类预测为正 + 正类预测为负)的比例。

\[\text{Recall} = \frac{\text{TP}}{\text{TP + FN}} \]


3.5 \(F_1\)

精确率和召回率互相影响,理想状态下肯定追求两个都高,但是实际情况是两者相互“制约”:追求精确率高,则召回率就低;追求召回率高,则通常会影响精确率。

因此有了 \(F_1\) 值:

\[\begin{split} & \frac{2}{F_1} = \frac{1}{\text{Precision}} + \frac{1}{\text{Recall}} \\\\ & F_1 = \frac{2 \text{TP}}{2 \text{TP + FP + FN}} \end{split} \]




4. 多分类评估

在多分类问题中,评估一个模型的性能需要检查模型在所有类别上的表现。

4.1 宏平均、微平均

为了方便表示,将 \(\text{Precision、Recall、F1值}\) 简写为 \(P, R, F\)

  • 宏平均\(\text{Macro-average}\))是对每个类别评估指标计算平均值,给每个类别同等的重要性。

    \[P_{\text{macro}} = \frac{1}{n}\sum_{i=1}^nP_i \]

    \[R_{\text{macro}} = \frac{1}{n}\sum_{i=1}^nR_i \]

    \[F_{\text{macro}} = \frac{2 \times P_{\text{macro}} \times R_{\text{macro}}}{P_{\text{macro}} + R_{\text{macro}}} \]

  • 微平均\(\text{ Micro-average}\))是将所有类别的贡献累加后计算指标,对数据集中的每一个实例不分类进行统计建立全局混淆矩阵,会放大高频类别的影响。

    \[P_{\text{micro}} = \frac{\sum_{i=1}^n \text{TP}_i}{\sum_{i=1}^n \text{TP}_i + \sum_{i=1}^n \text{FP}_i} \]

    \[R_{\text{micro}} = \frac{\sum_{i=1}^n \text{TP}_i}{\sum_{i=1}^n \text{TP}_i + \sum_{i=1}^n \text{FN}_i} \]

    \[F_{\text{micro}} = \frac{2 \times P_{\text{micro}} \times R_{\text{micro}}}{P_{\text{micro}} + R_{\text{micro}}} \]




参考

《机器学习》 周志华

为什么朴素贝叶斯在做拉普帕斯平滑的时候,对先验概率也做了拉普拉斯平滑?

评价指标中的宏平均和微平均

posted @ 2024-01-05 21:16  MarisaMagic  阅读(116)  评论(0编辑  收藏  举报