拓冰建站拓冰建站
首页 / 资讯中心 / 正文

ML-For-Beginners 分类器参数调优实战:基于菜系数据集探究超参数对模型质量的影响

ML-For-Beginners 分类器参数调优实战基于菜系数据集探究超参数对模型质量的影响【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners本文以 ML-For-Beginners 课程第 4 章「菜系分类」系列实验4-Classification/3-Classifiers-2为背景系统讲解 Linear SVC、K-Neighbors、SVC、Random Forest 与 AdaBoost 五类分类器在 Scikit-learn 中的参数配置、默认值来源与调优思路并完整呈现课程作业「Parameter Play参数游戏」的实验设计、评分标准与 notebook 写法。读完本文你将掌握如何借助 VS Code Intellisense 挖掘分类器参数、如何通过逐个调整参数值重训模型并解释模型质量升降的原因从而建立一套可复用的超参数实验方法论。作业背景什么是「参数游戏」在完成 4-Classification/3-Classifiers-2/README.md 的课程正文后学员会面对名为Parameter Play参数游戏的课后作业。该作业在西班牙语翻译版 translations/es/4-Classification/3-Classifiers-2/assignment.md 中的指令是使用这些分类器时有大量参数默认配置好。VS Code 中的 Intellisense 可以帮助你深入探索它们。选取本课中的一种机器学习分类技术通过调整不同的参数值重新训练模型。创建一个 notebook详细解释为什么某些参数改动会提升模型质量而另一些改动会使其劣化。作业的核心意图不在于「跑出一个更高准确率」而在于训练学员理解每个超参数对模型行为的因果影响。评分维度只有一列见下表满分标准是「一个完全构建好的分类器、其参数被调整过且改动原因在文本框中得到解释」这明确要求 notebook 必须同时包含代码与解释性文本标准卓越合格需改进评分提交的 notebook 包含一个完全构建好的分类器参数经过调整且改动在文本框中解释清楚notebook 部分完成或解释不佳notebook 存在 bug 或缺陷因此本文后续将围绕五类分类器逐一展开其关键参数语义、默认值、调优方向与实验证据这正是完成该作业所需的全部素材。前置准备数据与基线代码作业建立在课程正文的基础上。在 4-Classification/3-Classifiers-2/notebook.ipynb 中数据来自清洗后的菜系数据集4-Classification/data/cleaned_cuisines.csvimport pandas as pd cuisines_df pd.read_csv(../data/cleaned_cuisines.csv) cuisines_label_df cuisines_df[cuisine] # 标签列 cuisines_features_df cuisines_df.drop([Unnamed: 0, cuisine], axis1) # 380 个食材特征列数据集每一行是一条菜谱cuisine列是类别标签chinese / indian / japanese / korean / thai其余 380 列是食材的 0/1 出现标记。随后按 30% 比例切分训练与测试集并导入全部所需的分类器与评估工具from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score, precision_score, confusion_matrix, classification_report, precision_recall_curve import numpy as np X_train, X_test, y_train, y_test train_test_split( cuisines_features_df, cuisines_label_df, test_size0.3 )课程正文推荐了一条「分类器选择路径」样本数 50、预测类别、有标签、样本 100K 时先尝试 Linear SVC若效果不佳再尝试 KNeighbors最后是 SVC 与集成分类器。Scikit-learn 提供的分类器选择地图ML Map正是这条路径的可视化依据参考实现位于 4-Classification/3-Classifiers-2/solution/notebook.ipynb其中一次性构建了五个分类器并以循环统一训练评估C 10 classifiers { Linear SVC: SVC(kernellinear, CC, probabilityTrue, random_state0), KNN classifier: KNeighborsClassifier(C), SVC: SVC(), RFST: RandomForestClassifier(n_estimators100), ADA: AdaBoostClassifier(n_estimators100) } for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred classifier.predict(X_test) accuracy accuracy_score(y_test, y_pred) print(Accuracy (train) for %s: %0.1f%% % (name, accuracy * 100)) print(classification_report(y_test, y_pred))需要特别指出KNeighborsClassifier(C)这种写法其实把正则化常数C10传给了n_neighbors参数KNN 的第一个位置参数这是课程正文为了演示「参数误用」而保留的代码恰恰是「Parameter Play」作业值得探究的起点之一——它印证了理解每个参数位置语义的必要性。Linear SVCkernel、C 与 probability 三参数的调优实验支持向量分类器SVC属于支持向量机SVM家族。其核心参数语义如下kernel核函数决定如何将样本映射到高维空间以聚类标签。可选项包括linear、poly、rbf、sigmoid等。本课设为linear即利用线性 SVC 处理数值型稀疏特征。C正则化参数调节「参数的影响力」控制误分类惩罚与决策边界复杂度的权衡。C 越大模型越倾向拟合每一个训练样本边界越复杂越容易过拟合C 越小边界越平滑可能欠拟合。probability默认False置为True时启用 Platt 缩放以输出概率估计本课需要概率用于后续可视化。random_state设为0固定随机种子保证实验可复现。基线代码与结果来自课程正文 4-Classification/3-Classifiers-2/README.mdC 10 classifiers { Linear SVC: SVC(kernellinear, CC, probabilityTrue, random_state0) }Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199调参实验建议可直接写入 notebook 的文本框将C从 10 分别降到 1、0.1、0.01观察准确率与类别均衡度变化。通常 C 过小如 0.001会让决策边界过于简单thai / chinese 等易混淆类别 recall 明显下滑。将kernel改为rbf对比线性核与径向基核在 380 维稀疏特征上的表现差异——rbf 核计算代价更高且在小样本下更易过拟合。将probabilityFalse验证概率估计开关是否影响predict结果不影响类别预测只影响predict_proba借此说明该参数属于「推理期行为」而非「拟合期行为」。K-Neighborsn_neighbors 与距离度量的敏感性实验K 近邻K-Neighbors属于「neighbors」家族既可监督也可无监督。其思想是为每个待预测点划定预定义数量的邻近点数据围绕这些点聚集从而预测泛化标签。课程正文中基线代码是KNN classifier: KNeighborsClassifier(C)即n_neighbors10结果为Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199调参实验建议n_neighbors邻居数默认 5分别尝试 3、5、10、20、50。k 越小决策边界越崎岖、方差越大k 越大边界越平滑但可能丢失局部结构。本任务中 k 从 10 降到 5 或升到 20korean 类的 recall 波动会非常明显基线中 korean recall 仅 0.58说明该类别在特征空间中边界分散。weights默认uniform改为distance让近邻按距离加权投票通常能小幅提升精度但更容易被噪声点带偏。metric距离度量默认minkowski可尝试manhattan即 p1对 380 维 0/1 稀疏特征而言曼哈顿距离往往比欧氏距离更稳健——这是本数据集上值得记录的一个「正向调参」案例。默认 SVC观察默认参数下的表现差异课程正文紧接着加入SVC: SVC()即完全使用默认参数RBF 核、C1、gammascale结果反而优于显式配置的 Linear SVCAccuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199SVM 的原理是把训练样本映射到空间中并最大化两类之间的间隔之后新数据被映射进同一空间完成预测原理示意见下调参实验建议SVC 默认参数中值得逐一验证的有gammaRBF 核宽度默认scale可改0.1、0.01、C默认 1可改 0.1、10、100、degree多项式核次数。在 notebook 中记录「为什么默认 RBF 核在这个数据上超过线性核」——一个合理的解释方向是菜系特征存在非线性交互RBF 核能隐式捕捉这些交互而线性核只能给出超平面分割。集成分类器Random Forest 与 AdaBoost 的参数对比课程正文沿选择路径走到终点加入两个集成分类器RFST: RandomForestClassifier(n_estimators100), ADA: AdaBoostClassifier(n_estimators100)Accuracy (train) for RFST: 84.5% Accuracy (train) for ADA: 72.4%集成方法「组合多个基学习器的预测」来提升模型质量。二者机理不同Random Forest随机森林一种平均averaging方法构建充满随机性的「决策树森林」以避免过拟合。n_estimators即树的数量——树越多方差越小但训练成本线性上升对 1199 条测试样本100 棵树已足够继续加到 500 收益甚微。AdaBoost先拟合一个分类器再在同一数据集上拟合其副本并聚焦于被分错样本的权重逐步修正下一个分类器。默认基学习器是决策树桩max_depth1。调参实验建议Random Forest调节n_estimators10/50/100/300、max_depth默认 None可设 5/10/20、max_features默认sqrt可改log2或整数、min_samples_split。记录「为什么增大 max_depth 会同时提升训练准确率并加剧过拟合风险」。AdaBoost调节n_estimators与learning_rate默认 1.0可降为 0.5、0.1。学习率越小每轮步长越小通常需要更多轮数在 baseline 中 ADA 准确率仅 72.4%一个值得探究的实验是「降低 learning_rate 并同步增大 n_estimators能否挽回精度」。注意random_state对森林类模型固定随机种子才能让两次实验具备可比性这也是作业要求「解释参数改动原因」的前提。完成作业的 notebook 结构建议对照评分标准「分类器完整构建 参数调整 文本框解释改动原因」推荐按以下结构组织提交的 notebook数据准备 cell加载cleaned_cuisines.csv切分 X/y 与训练测试集可直接复用 4-Classification/3-Classifiers-2/notebook.ipynb 前三步。基线 cell用默认参数训练选定分类器输出classification_report。参数扫描 cell35 组每次只改一个参数如C、n_neighbors、n_estimators、learning_rate、max_depth固定其他参数与随机种子重训并输出指标。解释文本框每组改动后紧跟 Markdown 文本框说明「这个参数控制什么 → 改动后指标如何变化 → 为什么」。例如「将 C 从 10 降到 0.01准确率从 78.6% 降到 71.2%因为 C 是误分类惩罚权重C 过小使决策边界过于平滑模型欠拟合」。结论 cell汇总一张对比表参数 / 取值 / 准确率 / f1-macro / 原因分析呼应评分标准中「详细作答」的要求。调参实验的通用方法论从上述五个分类器的实验中可以提炼出三条普适原则这也是作业希望学员内化的能力一次只改一个参数多参数同时变动无法归因也就无法在文本框中解释「哪个改动起了作用」。理解每个参数的物理含义再动手C是正则化强度、n_neighbors是投票范围、n_estimators是基学习器数量、learning_rate是步长、max_depth是树深——参数之间往往此消彼长如 AdaBoost 的learning_rate与n_estimators。用指标而非直觉判断至少同时观察accuracy与classification_report中的 macro avg / weighted avg因为某些改动会牺牲少数类如本数据集的 thai来换取整体准确率单看 accuracy 会被误导。课程正文的 4-Classification/3-Classifiers-2/README.md 在文末的 Challenge 中给出了同样的建议逐一调研每个算法的默认参数并思考调整它们对模型质量意味着什么——这正是「Parameter Play」作业与课程正文相互呼应的设计。参考实现可对照 4-Classification/3-Classifiers-2/solution/notebook.ipynb 查看五分类器的完整训练输出R 语言版本见 4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb可作为跨语言对照。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门