近邻朴素贝叶斯与决策树入门 - SpiralKernel/bioinfo-wiki-migrated GitHub Wiki
近邻朴素贝叶斯与决策树入门
更新:2026-10-26;状态:可用;验证范围:2026-10-26核对原始与官方资料;本页Python微型计算已执行;人工数据不代表专业软件或真实研究性能。
这三类分类器分别依据“相似对象投票”“特征给出类别证据”“逐层划分规则”预测标签。它们适合建立可解释的机器学习起点。读完应能各算一个预测,并知道算法输出不是已被验证的诊断结论。
前置为距离标准化与相似性、条件概率和数据泄漏与交叉验证。以下人工数据展示规则,不执行临床预测或真实组学建模。
三个目标与决策过程
k近邻(kNN)保存训练样本,预测时寻找最近k个标签投票;小k对局部噪声敏感,大k更平滑但可能淹没少数类别。距离、缩放、加权投票和并列规则都需记录。预测时扫描大量高维训练数据可能很慢。
朴素贝叶斯使用$P(c|x)\propto P(c)\prod_jP(x_j|c)$,假设给定类别后各特征条件独立。对文本/计数常用Multinomial,对二元特征可用Bernoulli,对连续特征可用Gaussian;分布与输入类型应匹配。重复高度相关的特征会重复计入证据,概率校准可能不好,见官方朴素贝叶斯指南。
分类树选择特征与阈值,将样本划分为更纯的子集。Gini不纯度为$1-\sum_cp_c^2$;分裂后按子节点样本数加权,选择降低不纯度的划分。贪心局部分裂不保证全局最佳树,深树容易过拟合,见决策树官方说明。
三个能核对的预测
训练点0、1标A,9、10标B,查询8.5,k=3时最近为9B、10B、1A,预测B。朴素贝叶斯例用类别先验各0.5,两个已观测二元特征在A类出现概率0.8、0.7,在B类0.2、0.3;未归一证据0.28和0.03,A后验约0.9032。树的例子若四点在5处分开,可得到两个纯叶,Gini从0.5降至0。
本页例子在项目根目录的Python中运行;标准库例子无需安装包,含NumPy/SciPy的例子先按R包Python包与可复现环境建立项目环境。Windows命令使用
python,macOS/Linux可使用python3;代码块可复制进该环境的Python交互会话,或保存为项目根目录下的临时脚本再用该环境解释器运行;不要保存到examples目录或任意外部目录后假定项目导入路径仍相同。除特别说明外,只向屏幕输出,不写文件。
train = [(0.,'A'),(1.,'A'),(9.,'B'),(10.,'B')]
neighbors = sorted(train,key=lambda row:abs(row[0]-8.5))[:3]
prediction = max(('A','B'),key=lambda c:sum(label==c for _,label in neighbors))
a_score, b_score = .5*.8*.7, .5*.2*.3
posterior_a = a_score/(a_score+b_score)
gini_parent = 1-(.5**2+.5**2)
print('kNN', neighbors, prediction)
print('NB_P_A', round(posterior_a,6))
print('tree_Gini_gain', gini_parent-0)
assert prediction == 'B' and abs(posterior_a-28/31)<1e-12
assert gini_parent == .5
检查点B、0.903226和0.5。此处条件概率人为给定,未从真实数据估计;树只演示一个候选阈值,不是完整树搜索。将三个数放在一起比较大小没有意义,它们表示不同量。
参数如何影响实际结果
| 方法 | 关键参数/选择 | 增强复杂度常见影响 |
|---|---|---|
| kNN | k、距离、缩放、权重 | 小k更拟合训练局部,方差可能高 |
| 朴素贝叶斯 | 分布、平滑、类别先验 | 零概率需合适平滑,先验随场景变化 |
| 树 | 深度、叶最小样本、剪枝 | 更深/更小叶可降低训练误差,未必泛化 |
朴素贝叶斯计数出现0会使整类乘积为0,常用平滑避免“没见过就绝不可能”;具体平滑必须与模型配套。树对单调变量变换的分割顺序往往较稳定,但kNN对尺度敏感。树的重要性又可能偏向可划分取值多的变量,不能据此单独宣称生物机制。
实操应怎样验证
先锁定预测对象,如独立新个体或新批次,再按其层级划分训练/测试。特征选择、缩放、填补和调参都在训练流程内完成。用多数类基线对照,报告混淆矩阵、precision/recall与必要的概率校准,不能只看训练准确率。高维组学常有p远大于n,同一供体的多个细胞不应随机散入训练测试两侧。
| 症状 | 优先检查 |
|---|---|
| 测试接近完美且异常好 | 标签泄漏、同供体重复、先全数据选特征 |
| 总预测多数类 | 类别不平衡、特征无信息、阈值 |
| NB概率接近0或1但不可靠 | 特征相关、先验变化、缺乏校准 |
| 树规则轻微换样本就大变 | 样本少、树太深、分裂不稳定 |
自测与答案
问:树画得易懂就没有过拟合吗? 答:不是,几十层树仍可能记住样本。问:NB假设不完全成立就一定不能用吗? 答:不一定,分类表现可在验证中评估,但概率解释必须谨慎。问:最好的k能在测试集上挑吗? 答:不能,测试集应留作最后独立评价。
接着读什么
距离标准化与相似性 → 数据泄漏与交叉验证 → R包Python包与可复现环境 → 分类指标ROC与PR曲线 → 方法与算法系统学习指南。学习顺序与练习入口见方法与算法系统学习指南。
运行本页的完整小例
先下载项目并进入含README与examples的根目录,环境准备见方法与算法系统学习指南。用项目环境的Python运行以下命令(macOS/Linux路径示例;Windows用.venv\Scripts\python.exe):
.venv/bin/python examples/methods_foundations_demo.py --case classifiers --output examples/output/methods-classifiers
输出summary.json保存本页计算与检查结果。目录非空时拒绝覆盖,再练习请更换--output目录;页面内短代码只打印结果。标准库case也可用系统Python直接运行。
公式里的矩阵、下标或对数不熟时,可回查读懂方法公式的最小数学基础。