机器学习进阶文档深度页
KNN、贝叶斯与 SVM 对比
三类模型分别依赖邻居、概率假设和最大间隔,应在同一验证协议下公平比较。
学习前需要掌握
背景与问题
不同预处理要求必须由各自 Pipeline 体现,不能为了统一而省略必要步骤。
概念定义
模型比较不是只看最高平均分,还要比较尺度需求、训练/预测成本、稳定性、概率和解释方式。
直观理解
让每位选手使用合法装备、在同一赛道和计分规则下比赛。
核心原理
固定折、指标和随机种子;报告平均、标准差和耗时;测试集不参与候选选择。
数学表达
核心表达
固定折、指标和随机种子;报告平均、标准差和耗时;测试集不参与候选选择。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1注册候选 Pipeline
- 2固定 StratifiedKFold
- 3cross_validate 多指标
- 4比较均值/波动/耗时
代码对应位置
示例 1KNN、贝叶斯与 SVM 对比 实现:对应文档中的训练与预测逻辑。
计算与实现步骤
- 1
注册候选 Pipeline
- 2
固定 StratifiedKFold
- 3
cross_validate 多指标
- 4
比较均值/波动/耗时
- 5
锁定模型
- 6
最终测试
代码实现
示例 1
KNN、贝叶斯与 SVM 对比 实现
KNN、贝叶斯与 SVM 对比 实现
scikit-learn
example_01.py用途:对应文档中的训练与预测逻辑。
models={"knn":knn,"gnb":gnb,"svm":svm}
for name,model in models.items():
scores=cross_val_score(model,X,y,cv=cv)
print(name,scores.mean(),scores.std())代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
对应文档中的训练与预测逻辑。
X- 完整特征矩阵,每行一个样本、每列一个特征。
y- 目标标签或连续目标值。
model- 组合预处理和估计器的模型对象。
mean- 训练特征逐列均值。
std- 训练特征逐列标准差。
scores- 交叉验证各折的评价分数。
Step 1 · 1–4 行
只从训练数据逐列计算均值与标准差,对应标准化公式中的 μ 和 σ。
models={"knn":knn,"gnb":gnb,"svm":svm}
for name,model in models.items():
scores=cross_val_score(model,X,y,cv=cv)
print(name,scores.mean(),scores.std())代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
每个模型的交叉验证平均分和标准差。
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 不同折比较
- 测试分数选模型
- 忽略预处理成本
实际应用
- 算法选型
- 基线比较
常见错误
不同折比较
测试分数选模型
忽略预处理成本
文档来源
04|近邻、贝叶斯与支持向量机原始文档
学习资料/learning_tech/04_neighbors_bayes_svm.md- §4 三种模型的直接比较
- §5 在同一数据上公平比较
推荐学习资料
GitHub 仓库B 级
scikit-learn/scikit-learn
经典机器学习算法、模型选择、预处理和评估工具的核心实现仓库。
scikit-learn Contributors · GitHub
仓库信息
研究 scikit-learn 实现和贡献流程
主要语言:Python / Cython包含数据集或实验需要额外环境