正在加载中...

展开本页目录
算法教程朴素贝叶斯

朴素贝叶斯

No.026 · 在线教程

朴素贝叶斯(Naive Bayes, NB)是一类基于贝叶斯定理的生成式分类模型。其核心假设是:在给定类别 y 的条件下,各特征 xj 相互条件独立。该模型计算后验概率并选择最大后验类作为预测结果,具有计算高效、可解释性强、对高维特征鲁棒等优点。

朴素贝叶斯算法(Naive Bayes)

1. 方法概述

朴素贝叶斯(Naive Bayes, NB)是一类基于贝叶斯定理的生成式分类模型。其核心假设是:在给定类别 \(y\) 的条件下,各特征 \(x_j\) 相互条件独立。该模型计算后验概率并选择最大后验类作为预测结果,具有计算高效、可解释性强、对高维特征鲁棒等优点。

设共有 \(n\) 个样本、\(d\) 个特征,数据集表示为

$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$

其中 \(y_i\) 为类别标签(分类)。

2. 公共部分(预处理与特征工程)

系统在模型训练前支持缺失处理、编码、缩放、特征构造、特征选择与降维等步骤(均在训练集上拟合,再作用于测试集或交叉验证折内,避免数据泄漏)。

2.1 标准化与归一化

Z-score 标准化: $$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$

Min-Max 归一化: $$ z_{ij}=\frac{x_{ij}-\min x_j}{\max x_j-\min x_j+\varepsilon} \tag{3} $$

2.2 One-Hot 编码(类别型变量)

$$ x^{(k)}_{ij}= \begin{cases} 1,& x_{ij}=\text{cat}_k\\ 0,& \text{otherwise} \end{cases} \tag{4} $$

2.3 多项式特征

$$ \phi(x)=\{x_1^{a_1}x_2^{a_2}\cdots x_d^{a_d}\mid a_1+\cdots+a_d\le d_p\} \tag{5} $$

2.4 特征选择(方差阈值 / 互信息)

方差阈值: $$ \operatorname{Var}(x_j)=\frac{1}{n-1}\sum_{i=1}^{n}(x_{ij}-\mu_j)^2 \tag{6} $$

互信息: $$ I(X;Y)=\sum_{x\in X}\sum_{y\in Y}p(x,y)\log\frac{p(x,y)}{p(x)p(y)} \tag{7} $$

2.5 降维(PCA)

协方差矩阵: $$ \Sigma=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})(x_i-\bar{x})^\top \tag{8} $$

主成分解释率: $$ \eta_k=\frac{\lambda_k}{\sum_{j=1}^{d}\lambda_j} \tag{9} $$

2.6 IQR 异常值截断(可选)

$$ \text{IQR}=Q_3-Q_1,\quad x\leftarrow \min(\max(x,Q_1-k\cdot\text{IQR}),\,Q_3+k\cdot\text{IQR}) \tag{10} $$

3. 朴素贝叶斯理论基础

3.1 贝叶斯公式

$$ P(y\mid x)=\frac{P(y)\,P(x\mid y)}{P(x)} \tag{11} $$

3.2 条件独立假设(朴素假设)

$$ P(x\mid y)=\prod_{j=1}^{d} P(x_j\mid y) \tag{12} $$

于是后验概率可写为

$$ P(y\mid x)\propto P(y)\prod_{j=1}^{d}P(x_j\mid y) \tag{13} $$

实际实现中常取对数以避免下溢:

$$ \log P(y\mid x) = \log P(y)+\sum_{j=1}^{d}\log P(x_j\mid y)+C \tag{14} $$

其中 \(C\) 为与 \(y\) 无关的常数。

4. 分类版(Naive Bayes Classification)

4.1 决策规则(最大后验)

$$ \hat{y}=\arg\max_{y\in \mathcal{Y}} P(y)\prod_{j=1}^{d}P(x_j\mid y) \tag{15} $$

4.2 变体与条件概率建模

(1) GaussianNB(连续特征)
假设 \(x_j\mid y=c \sim \mathcal{N}(\mu_{jc},\sigma_{jc}^2)\):

$$ P(x_j\mid y=c)=\frac{1}{\sqrt{2\pi\sigma_{jc}^2}}\exp\left(-\frac{(x_j-\mu_{jc})^2}{2\sigma_{jc}^2}\right) \tag{16} $$

(2) MultinomialNB(计数/非负特征)
设特征为非负计数,类别先验为 \(\theta_{jc}\):

$$ P(x\mid y=c)\propto \prod_{j=1}^{d}\theta_{jc}^{x_j},\quad \sum_{j=1}^{d}\theta_{jc}=1 \tag{17} $$

带拉普拉斯平滑(\(\alpha>0\)):

$$ \theta_{jc}=\frac{N_{jc}+\alpha}{\sum_{k=1}^{d}N_{kc}+d\alpha} \tag{18} $$

(3) BernoulliNB(二值特征)
适用于 0/1 特征:

$$ P(x\mid y=c)=\prod_{j=1}^{d} \theta_{jc}^{x_j}(1-\theta_{jc})^{1-x_j} \tag{19} $$

(4) ComplementNB(不均衡/高维文本场景)
对每一类 \(c\) 使用“其余类”的统计来估计参数(提升鲁棒性),常配合 \(\alpha\) 平滑:

$$ \theta_{jc}\propto \frac{N_{\neg c,j}+\alpha}{\sum_{k}N_{\neg c,k}+d\alpha} \tag{20} $$

4.3 变体自动选择(系统实现)

系统对处理后的特征做启发式选择:

  1. 若启用 标准化PCA/KPCA → 选择 GaussianNB;
  2. 若特征全为 \(\{0,1\}\) → 选择 BernoulliNB;
  3. 若特征非负 → 选择 MultinomialNB;
  4. 其它情况默认 GaussianNB。

注意:MultinomialNB/BernoulliNB/ComplementNB 要求特征非负;若出现负值,应关闭标准化/降维或改用 GaussianNB。

4.4 类别不均衡权重(可选)

系统支持按训练集频率的逆频率为样本加权(仅影响训练):

$$ w_i=\frac{1}{n_{y_i}},\quad n_{y_i}=\text{第 }y_i\text{ 类的训练样本数} \tag{21} $$

加权目标等价于在训练损失中增强少数类贡献。

4.5 交叉验证(k 折)

$$ \overline{M}=\frac{1}{k}\sum_{t=1}^{k} M_t \tag{22} $$

为衡量波动性,可计算方差与标准差:

$$ \operatorname{Var}(M)=\frac{1}{k-1}\sum_{t=1}^{k}(M_t-\overline{M})^2 \tag{22a} $$

$$ \operatorname{Std}(M)=\sqrt{\operatorname{Var}(M)} \tag{22b} $$

4.6 分类评价指标

设 \(TP,FP,TN,FN\) 为混淆矩阵四要素,则

Accuracy: $$ \text{Acc}=\frac{TP+TN}{TP+FP+TN+FN} \tag{23} $$

Precision / Recall: $$ \text{Precision}=\frac{TP}{TP+FP},\quad \text{Recall}=\frac{TP}{TP+FN} \tag{24} $$

F1: $$ F1=\frac{2\cdot \text{Precision}\cdot \text{Recall}}{\text{Precision}+\text{Recall}} \tag{25} $$

ROC / AUC: $$ \text{TPR}=\frac{TP}{TP+FN},\quad \text{FPR}=\frac{FP}{FP+TN} \tag{26} $$

PR / AP(平均精度)
AP 通常为 PR 曲线下的面积(数值积分):

$$ AP=\int_0^1 \text{Precision}(r)\,dr \tag{27} $$

系统输出:混淆矩阵、分类报告、ROC/PR 曲线、阈值曲线、校准曲线与学习曲线。

4.7 先验与参数估计(与系统实现一致)

类别先验: $$ P(y=c)=\frac{n_c}{n} \tag{28} $$

其中 \(n_c\) 为类别 \(c\) 的样本数。

GaussianNB 参数估计: $$ \mu_{jc}=\frac{1}{n_c}\sum_{i:y_i=c}x_{ij},\quad \sigma_{jc}^2=\frac{1}{n_c}\sum_{i:y_i=c}(x_{ij}-\mu_{jc})^2 \tag{29} $$

为提升数值稳定性,系统使用平滑项 \( \text{var\_smoothing} \):

$$ \tilde{\sigma}_{jc}^2=\sigma_{jc}^2+\text{var\_smoothing} \tag{30} $$

Multinomial / Bernoulli / Complement 平滑:
系统使用拉普拉斯平滑参数 \(\alpha\)(见式(18)、(19)、(20))。

类别不均衡权重(可选): $$ w_i=\frac{1}{n_{y_i}} \tag{31} $$

其中 \(n_{y_i}\) 为样本 \(i\) 所属类别的训练集样本数。系统在训练阶段以 \(w_i\) 加权(仅影响拟合,不影响测试评价)。

4.8 系统参数与含义(与代码一致)

nn_params(模型参数)

参数 含义 代码默认
test_size 测试集比例(float)或样本数(int) 0.2
random_state 随机种子 42
cv_folds 交叉验证折数(0 表示不启用) 0
nb_variant 变体(gaussian/multinomial/bernoulli/complement/auto) auto
alpha 拉普拉斯平滑 1.0
var_smoothing GaussianNB 方差平滑 1e-9
class_weight_auto 逆频率加权 False

preprocess(特征工程)

  • missing_enabled / missing:缺失处理策略(drop_rows / drop_cols / mean 等)
  • one_hot:是否启用 One-Hot
  • scaling_enabled / scaling:缩放策略(standard / minmax / none)
  • feature_select / dim_reduce / poly_features:特征选择/降维/多项式特征

约束:当 one_hot 关闭时必须存在数值特征;Multinomial/Bernoulli/Complement 要求特征非负。

4.9 系统输出与 Excel 结构

系统输出目录包含图表与 Excel 文件。Excel 常见 Sheet:

  • 原始数据 / 处理后数据
  • 指标 / 预测 / 混淆矩阵 / 分类报告
  • 学习曲线(可选)
  • 图表清单
  • 参数
  • CV折k_预测(若启用并导出)

图表清单中记录相对路径(文件名),便于论文直接引用。

5. 回归版(不适用/系统不支持)

朴素贝叶斯是分类算法,本系统仅支持分类任务。若研究目标为连续数值预测,请使用回归模型(如线性回归、SVR、随机森林回归等)。

若研究必须使用贝叶斯思想处理回归问题,可考虑:

  1. 将连续变量离散化后进行分类;
  2. 使用贝叶斯回归模型(Bayesian Ridge 等)。

6. 符号说明表

符号 含义
\(n\) 样本数量
\(d\) 特征维度
\(x_i\) 第 \(i\) 个样本特征向量
\(y_i\) 第 \(i\) 个样本标签
\(\hat{y}\) 预测类别
\(\mu_j,\sigma_j\) 第 \(j\) 个特征的均值与标准差
\(\alpha\) 拉普拉斯平滑参数
\(\text{var\_smoothing}\) GaussianNB 方差平滑项
\(n_c\) 类别 \(c\) 样本数
\(w_i\) 样本权重(逆频率)
\(TP,FP,TN,FN\) 混淆矩阵四要素
\(k\) 交叉验证折数
\(\theta_{jc}\) 类别 \(c\) 下特征 \(j\) 的条件概率参数

7. 结果解释与论文写作建议

建议论文按“表—图—解释”组织:

  1. 模型参数表:变体类型(Gaussian/Multinomial/Bernoulli/Complement)与超参数(\(\alpha\)、var_smoothing)。
  2. 整体指标表:Accuracy、F1、AUC/AP 等。
  3. 混淆矩阵与分类报告:展示误判类型与类别差异。
  4. ROC/PR 与阈值曲线:用于阈值选择与风险权衡。
  5. 学习曲线:用于分析样本量对性能的影响。

说明时应强调:

  • 变体选择依据(特征取值范围、是否标准化等);
  • 类别不均衡处理策略(是否启用 class_weight_auto);
  • 交叉验证折数与稳定性结论。

8. 与代码实现的对应关系

朴素贝叶斯程序的真实实现位于 具体的算法/朴素贝叶斯/core/critic_calculator.pyui/upload_widget.py。从代码可以看到,系统并不是简单固定某一种 NB 变体,而是把“特征工程结果 -> 变体判定 -> 分类训练 -> 图表与 Excel 导出”串成了一条完整链路。

实现层面需要特别说明的内容如下:

  1. 系统仅支持分类,不支持回归
    这不是理论层面的泛泛表述,而是代码中明确限定的任务类型。因此论文中若引用该程序结果,应直接表述为“朴素贝叶斯分类模型”。

  2. NB 变体存在自动判定逻辑
    程序会结合处理后特征是否标准化、是否出现负值、是否为二值特征等信息,在 GaussianNB、MultinomialNB、BernoulliNB、ComplementNB 之间做启发式选择。
    因此论文中若写“采用何种朴素贝叶斯变体”,应以程序最终实际选择为准,而不是只依据主观预设。

  3. 结果 Excel 含有完整分类证据链
    常见工作表包括:原始数据处理后数据指标预测混淆矩阵分类报告学习曲线图表清单参数,在启用交叉验证时还会附加 CV折i_预测 等逐折明细。

  4. 二分类时会额外输出概率与阈值相关图表
    当模型可提供概率输出时,程序会进一步生成 ROC、PR、阈值分析与校准曲线;这些图不是所有 NB 说明文档都会有,但在本程序中确实属于默认的重要结果产物。

  5. 参数与图表都可以追溯到具体运行
    程序会把目标列、测试集比例、随机种子、平滑参数、交叉验证折数、特征工程配置与导出选项写入结果文件,便于复现实验过程。

  6. 结果目录同样采用时间戳目录模式
    Excel 与图像文件位于同一结果目录中,适合论文附录、答辩材料或项目留档。

9. 论文写作模板

方法描述模板:
“本文采用朴素贝叶斯分类模型对样本类别进行识别。首先对原始数据进行缺失值处理、编码、标准化及必要的特征工程,再依据处理后特征的取值特性选择合适的朴素贝叶斯变体。模型在训练集上完成参数估计后,在测试集上输出预测类别、分类指标及概率相关分析结果。为评估模型稳健性,进一步结合交叉验证与学习曲线进行辅助分析。”

结果描述模板:
“程序结果文件包含处理后数据、逐样本预测结果、混淆矩阵、分类报告、学习曲线、图表清单及参数配置等内容。对二分类任务,还可同时获得 ROC、PR、阈值分析与校准曲线。因而论文中不仅可以报告 Accuracy 或 F1,还可以进一步说明模型概率输出质量、阈值敏感性以及特征处理方式对变体选择的影响。”

10. 单篇终审补充

10.1 图题与表题对齐建议

  • 原始数据 表可写为:表X 朴素贝叶斯原始数据表。
  • 处理后数据 表可写为:表X 朴素贝叶斯处理后数据表。
  • 指标 表可写为:表X 朴素贝叶斯分类指标表。
  • 预测 表可写为:表X 朴素贝叶斯逐样本预测结果表。
  • 混淆矩阵 表可写为:表X 朴素贝叶斯混淆矩阵表。
  • 分类报告 表可写为:表X 朴素贝叶斯分类报告表。
  • 图表清单 表可写为:表X 朴素贝叶斯图表索引表。
  • 参数 表可写为:表X 朴素贝叶斯参数设置表。
  • confusion_matrix.png 建议写为:图X 朴素贝叶斯混淆矩阵图。
  • roc.png 建议写为:图X 朴素贝叶斯 ROC 曲线图。
  • pr.png 建议写为:图X 朴素贝叶斯 PR 曲线图。
  • threshold_f1.png 建议写为:图X 朴素贝叶斯阈值-F1 曲线图。
  • threshold_tpr_fpr.png 建议写为:图X 朴素贝叶斯阈值-TPR/FPR 曲线图。
  • calibration.png 建议写为:图X 朴素贝叶斯校准曲线图。
  • class_distribution_triptych.png 建议写为:图X 朴素贝叶斯类别分布图。

10.2 终审说明

  • 当前最适合作为终审证据的代表性目录可采用 具体的算法/朴素贝叶斯/results/朴素贝叶斯分析结果_20260329_163707。该目录同时具备结果簿、实体图、输入快照和 repro 脚本。
  • 真实工作表为 原始数据/处理后数据/指标/预测/混淆矩阵/分类报告/图表清单/参数。与文档自述相比,这个代表性目录没有额外的 学习曲线 sheet,因此终审说明应以真实结果簿为准,而不是沿用“常见工作表”的泛化表述。
  • 当前真实图文件稳定为 confusion_matrix.pngroc.pngpr.pngthreshold_f1.pngthreshold_tpr_fpr.pngcalibration.pngclass_distribution_triptych.png,并附带 class_distribution_full.png。正文通常使用前七张即可。
  • 当前复现脚本为 repro_naive_bayes_20260329_163707.py,采用脚本同目录输入快照 SRC_FILE = 'nb_window1_input.csv',不是 repro_inputs/...。因此这篇文档也应写成“脚本同目录 CSV 快照复现”。
  • 这篇的终审重点应放在“最终实际选择的 NB 变体”和“概率相关图集是否真实产出”两个点上,不能只按理论四种 NB 变体泛泛叙述。

10.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法/朴素贝叶斯,本次采用的代表性结果目录为 具体的算法/朴素贝叶斯/results/朴素贝叶斯分析结果_20260329_163707

该目录当前只保留一份主结果工作簿:

  • 朴素贝叶斯分析结果_20260329_163707.xlsx

实测工作表为:

  • 原始数据
  • 处理后数据
  • 指标
  • 预测
  • 混淆矩阵
  • 分类报告
  • 图表清单
  • 参数

因此这轮真实结果簿没有 学习曲线 工作表,也没有逐折预测表。正文可以引用指标、预测、混淆矩阵和分类报告,但不应把“常见支持学习曲线”写成本轮必然产物。

当前目录中的真实图文件为:

  • confusion_matrix.png
  • roc.png
  • pr.png
  • threshold_f1.png
  • threshold_tpr_fpr.png
  • calibration.png
  • class_distribution_triptych.png
  • class_distribution_full.png

这说明当前分类概率相关图已经存在,尤其是 ROC、PR、阈值图与校准图;若论文讨论概率质量或阈值选择,可以直接引用这组图。

复现实物方面,该目录实际包含:

  • 具体的算法/朴素贝叶斯/results/朴素贝叶斯分析结果_20260329_163707/repro_naive_bayes_20260329_163707.py
  • 具体的算法/朴素贝叶斯/results/朴素贝叶斯分析结果_20260329_163707/nb_window1_input.csv

脚本中明确写成 SRC_FILE = 'nb_window1_input.csv'。因此这篇当前的真实复现口径也是“结果目录同级输入快照 + repro 脚本”,不是 repro_inputs/... 子目录方案。

10.4 软件实现核查补充(2026-07)

  • 朴素贝叶斯当前是纯分类任务,分类器变体包含 gaussianmultinomialbernoullicomplementauto;其中 multinomial / bernoulli / complement 需要非负特征,这一点应在文档中写明。
  • 结果目录真实包含混淆矩阵、ROC/PR、阈值曲线、校准曲线和类别分布图,说明概率输出和阈值分析是软件的实际能力,而不仅是教科书公式。
  • 复现脚本与输入快照同在结果目录下,文中应按 repro_naive_bayes_*.py + nb_window1_input.csv 的口径描述。
  • 文档中的先验估计、参数估计和分类评价指标可以保留为理论补充,但最终解释应回到实际导出的指标、预测和分类报告。