避免过拟合的秘诀:莫烦Python tutorials K折交叉验证与网格搜索参数调优实战

发布时间:2026/9/19 11:42:19
避免过拟合的秘诀:莫烦Python tutorials K折交叉验证与网格搜索参数调优实战 避免过拟合的秘诀莫烦Python tutorials K折交叉验证与网格搜索参数调优实战【免费下载链接】tutorials机器学习相关教程项目地址: https://gitcode.com/gh_mirrors/tut/tutorials在机器学习项目中模型训练集上考99分、真实场景却不及格的现象就是过拟合。莫烦Python tutorials 的 sklearn 教程提供了 K折交叉验证与网格搜索Grid Search的完整实战代码帮你用最小代价找到稳定、不过拟合的最优模型是新手参数调优的最佳入门路径。为什么单次训练-测试划分不够可靠很多新手的第一反应是把数据切成训练集和测试集然后盯着测试集准确率调参数。问题在于单次划分的得分带有随机性——换个随机种子分数可能上下浮动好几个百分点你根本无法判断模型是真的变好了还是只是运气好。教程中 sk4_learning_pattern.py 演示了最基础的train_test_split划分方式X_train, X_test, y_train, y_test train_test_split( iris_X, iris_y, test_size0.3)它能跑通但只能告诉你这一次的结果。要得到可复现、可比较的评估就需要下一节的 K 折交叉验证。快速上手cross_val_score 一键计算 K 折得分K 折交叉验证K-Fold Cross Validation的思想很直观把数据分成 K 份轮流用其中 1 份当验证集、其余 K-1 份训练最终取 K 次得分的平均值。K 取 5 或 10 都是常见做法。莫烦教程用鸢尾花Iris数据集演示了这一过程核心就一行见 full_code.pyscores cross_val_score(knn, X, y, cv5, scoringaccuracy)新手要记住的 3 个要点cv5表示 5 折数据被分成 5 份轮流验证得分更稳健scoringaccuracy分类任务用准确率回归任务可换成mean_squared_error拿到scores是 K 个值用它们的均值和方差来判断模型是否稳定而不是只看某一个。同目录下的 for_you_to_practice.py 是留白练习版适合你自己动手补全这三段逻辑效果比直接看答案好得多。 小提示仓库代码沿用了早期 scikit-learn 的cross_validation模块名新版 sklearn 中已迁移为model_selection函数用法完全一致替换导入路径即可。用交叉验证选参数画出 K 值与准确率曲线验证机制建好后就能解决参数调优的第一大问题KNN 的邻居数 k 该取多少教程的做法非常巧妙——把 k 从 1 遍历到 30每个 k 都跑一次 10 折交叉验证把平均准确率画成折线图见 full_code.pyfor k in k_range: knn KNeighborsClassifier(n_neighborsk) scores cross_val_score(knn, X, y, cv10, scoringaccuracy) k_scores.append(scores.mean()) plt.plot(k_range, k_scores)读图有两个关键经验k 太小 → 过拟合曲线左端准确率虚高模型对训练数据过度敏感k 太大 → 欠拟合曲线右端趋于平缓甚至下滑模型失去区分能力。取曲线高位平台区的 k 值就是在偏差与方差之间取得平衡——这正是避免过拟合的核心操作。网格搜索GridSearchCV参数调优的终极武器当模型有多个参数需要同时调整时手写循环就不够用了。网格搜索Grid Search会自动枚举你给定的所有参数组合内部用交叉验证逐一评估最后直接输出最优参数。以 SVM 为例现代 sklearn 的写法是from sklearn.model_selection import GridSearchCV param_grid {C: [0.1, 1, 10], gamma: [0.01, 0.1, 1]} grid GridSearchCV(SVC(), param_grid, cv5, scoringaccuracy) grid.fit(X_train, y_train) print(grid.best_params_, grid.best_score_)它和手动交叉验证是同一套思想的自动化交叉验证是考官网格搜索是批量考试best_params_就是最终录取名单。参数网格不宜太密否则计算量会爆炸。调参前别忘了先做归一化否则量纲差异大的特征会拖垮 SVM 等距离敏感模型。教程 sk7_normalization.py 展示了preprocessing.scale的标准用法X preprocessing.scale(X) # normalization step clf SVC() clf.fit(X_train, y_train)学习曲线与验证曲线判断过拟合的可视化手段调完参数还要回答一个问题我的模型到底是过拟合、欠拟合还是刚刚好sklearn 提供了两条诊断曲线教程用 digits 手写数字数据集做了完整演示。1. 学习曲线learning_curve——诊断数据够不够sk9_cross_validation2.py 改变训练集比例10% → 100%同时记录训练集与交叉验证集的得分两条曲线都高且接近 → 模型健康训练得分高、验证得分低且差距大 →过拟合需要更多数据或更强正则化两条曲线都低且接近 → 欠拟合需要更复杂的模型。2. 验证曲线validation_curve——诊断某个参数对不对sk10_cross_validation3.py 固定模型、只扫描 SVM 的gamma参数。gamma太小曲线整体低迷欠拟合gamma太大训练曲线飙高而验证曲线塌陷——那条塌陷的绿线就是过拟合最直观的证据。 一句话总结学习曲线回答要不要更多数据验证曲线回答这个参数该往哪调配合网格搜索就能完成闭环调优。学习路径与代码索引按以下顺序跟着仓库代码走一遍K 折交叉验证与网格搜索调参就能完全掌握步骤文件学什么1sk4_learning_pattern.py单数据集划分训练的基线写法2sk7_normalization.py数据归一化调参前的必修课3sk8_cross_validation/full_code.pycross_val_score KNN 参数曲线4sk9_cross_validation2.pylearning_curve 学习曲线5sk10_cross_validation3.pyvalidation_curve 参数诊断6sk11_save.py训练好的模型持久化保存避坑清单交叉验证的 fold 划分要在划分后再做且每折内部独立归一化否则会发生数据泄漏得分虚高调参只用训练集测试集只在最终验收时看一次交叉验证分数是均值方差一起看0.92 ± 0.03远好于孤零零的0.92。掌握 K 折交叉验证 网格搜索这套组合拳你的模型评估将从碰运气升级为有依据这正是机器学习工程化最重要的第一步。【免费下载链接】tutorials机器学习相关教程项目地址: https://gitcode.com/gh_mirrors/tut/tutorials创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考