ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ML-For-Beginners 分类器参数调优实战:以“菜系分类器 2“课程为核心的参数实验指南

ML-For-Beginners 分类器参数调优实战:以“菜系分类器 2“课程为核心的参数实验指南 ML-For-Beginners 分类器参数调优实战以菜系分类器 2课程为核心的参数实验指南【免费下载链接】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 开源课程第四部分Classification第 3 课菜系分类器 2及其课后作业Parameter Play为主体系统讲解如何围绕 Linear SVC、K 近邻、SVC、随机森林与 AdaBoost 五类分类器开展参数调优实验说明每个核心参数对模型质量的影响机理。读者学完后将能基于仓库中的cleaned_cuisines.csv数据集独立构建一个调参—复训—解释三合一的 Notebook并掌握用 VS Code Intellisense 与 scikit-learn 度量工具验证参数效果的方法。作业任务解读Parameter Play 到底要做什么本课作业要求原文见 translations/da/4-Classification/3-Classifiers-2/assignment.md英文原版见 4-Classification/3-Classifiers-2/assignment.md非常明确可拆解为三个动作探索默认参数这些分类器在实例化时内置了大量默认参数利用 VS Code 的 Intellisense自动补全与签名提示逐层展开构造函数的参数列表选型复训从本课4-Classification/3-Classifiers-2/README.md介绍的分类技术中选取一种通过调整不同参数值重新训练模型解释差异产出一个 Notebook详细说明为什么某些参数调整提升了模型质量而另一些却使其退化。评分标准同样围绕这三件事展开达到Exemplary示范级需要呈现一个完整构建的分类器、完成参数调整并在文本框Markdown Cell中解释每处改动仅部分呈现或解释不清属于Adequate合格存在错误或缺失则为Needs Improvement需改进。也就是说这篇作业的考察重点不是调出最高分而是对参数与模型质量因果关系的理解深度。前置条件与数据准备作业建立在课程假设之上已完成此前课程并在data目录下备好清洗后的数据集cleaned_cuisines.csv位于 4-Classification/data/cleaned_cuisines.csv。本课的 notebook.ipynb 已加载该数据集并完成 X/y 切分import 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列是分类标签indian、chinese、japanese、korean、thai其余 380 列是 0/1 编码的食材特征。随后导入分类所需库并按 70/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)注意cross_val_score与precision_recall_curve在导入列表中已经就位——它们是调参实验中验证参数改动是否真的有效的重要工具见下文第六节。先用分类器选择地图定方向调参之前先要回答该调哪个模型。本课引用了 scikit-learn 提供的算法选择作弊表cheat sheet它比之前课程中微软的速查表更细粒度能帮助缩小估计器estimator即分类器的另一称谓的选择范围结合本数据集的特征可以沿着决策路径走到结论样本数 50目标是预测类别分类任务数据有标签监督学习样本数 100K✨ 因此首选Linear SVC若效果不佳因数据为数值型尝试 ✨KNeighbors 分类器仍不理想再尝试 ✨SVC与 ✨集成分类器Ensemble Classifiers。这条路径本身就是参数实验的实验设计每走一步都是在用一组默认/预设参数验证一个假设。课程与作业正是沿着这条路径逐个构建分类器并观察结果。逐个分类器核心参数与默认值全解析在 4-Classification/3-Classifiers-2/README.md 中五个分类器被放入同一个字典通过统一循环完成训练、预测与报告输出。这一结构非常适合做参数实验——只需修改字典中某个分类器的构造参数即可横向对比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))下面逐一说明每个分类器的参数含义、默认值及其对模型质量的潜在影响——这正是作业要求在文本框里解释的内容。1. Linear SVCkernel、C、probability 与 random_state支持向量聚类SVC是支持向量机SVM家族用于分类任务的成员。本课在构造函数中显式设置了四个参数kernellinear决定如何对标签聚类。SVC 支持多种核函数线性、多项式、RBF 等这里显式指定linear确保利用线性 SVC的优势C10即正则化参数调节特征对模型的影响程度。C 越大模型越倾向严格拟合每个训练样本可能过拟合C 越小则允许更多误分类以换取更平滑的决策边界可能欠拟合。课程源码中先定义C 10再传入正是为了方便后续调参——这是作业改动成本最低、解释价值最高的参数之一probabilityTrue默认值为False开启后模型会额外估计概率内部需调用 Platt 缩放代价是训练时间增加课程将其设为True是为了获取概率估计便于配合precision_recall_curve等概率依赖的评估工具random_state0固定随机种子以打乱数据、保证概率估计与实验可复现。调参实验必须固定 random_state否则结果差异无法归因于参数改动。课程运行结果为 78.6% 准确率chinese 与 thai 的召回率偏低0.67/0.86提示模型对这五类菜系的区分并非均衡——这是后续参数实验可瞄准的改进点。2. KNN 分类器KNeighborsClassifier(C)与 n_neighborsK 近邻K-Neighbors属于 neighbors 方法家族可用于监督与非监督学习。它创建预定数量的点将数据聚集在点周围从而对数据预测泛化标签。课程序列中 KNN 的写法是KNeighborsClassifier(C)把原本给 SVC 用的C10直接当作位置参数传给了 KNN——它实际落到了 KNN 的第一个构造参数n_neighbors上邻居数 k。这一点极具教学价值同一个数值10在 SVC 里是正则化强度在 KNN 里却是邻居数量参数语义完全由模型决定。n_neighbors默认 5决定分类时参考多少个近邻样本k 过小决策对噪声敏感、易过拟合k 过大边界过于平滑、易欠拟合。课程以C10即 k10得到的准确率为 73.8%低于 Linear SVC 的 78.6%其中 korean 的召回率仅 0.58、precision 却高达 0.94——典型的少数近邻主导失衡信号。作业中可尝试 k3、5、15 等值并解释曲线变化。3. SVC全默认参数的价值与风险SVC()完全不传参数意味着 kernel 默认为rbf径向基函数、C 默认为 1.0、probability 默认为 False。RBF 核允许非线性决策边界因此在数值特征空间里反而取得了 83.2% 的更好成绩明显优于显式线性设置。这也是作业里一个绝佳的对比实验同一个模型族SVC仅 kernel 与 C 不同准确率从 78.6%linear, C10跃升到 83.2%rbf, C1.0。这说明默认参数并非简单的最优解而是与数据分布本数据 380 维稀疏 0/1 特征的匹配问题。SVM 的核心思想是将训练样本映射到空间中最大化两个类别之间的距离再对新数据按其在空间中的位置预测类别4. 集成分类器Random Forest 与 AdaBoost 的 n_estimators课程走到路径终点尝试两种集成分类器RFST: RandomForestClassifier(n_estimators100), ADA: AdaBoostClassifier(n_estimators100)集成方法组合多个基估计器的预测来提升模型质量但两者的机制截然不同Random Forest随机森林属于平均法averaging构建一片由决策树组成的森林通过注入随机性避免过拟合。n_estimators即树的数量——太少则方差大、不稳定太多则边际收益递减且训练变慢。课程结果 84.5%五类菜系的 precision/recall 都较为均衡是五个分类器中的最佳表现AdaBoost属于提升法boosting先拟合一个分类器再在同一数据集上拟合它的副本并聚焦于被错误分类样本的权重逐次调整下一次拟合以纠正前序错误。n_estimators是迭代轮数。课程结果仅 72.4%chinese 召回率跌到 0.49——提升法在噪声标签或类别重叠较多时可能放大错误这解释了为什么某些参数这里是算法机制会降低质量。从源码实现看两个模型的n_estimators参数语义相似都指基学习器个数但对质量的影响路径完全不同是作业中对比解释的优质素材。基准结果汇总调参前先有基线课程与官方解决方案solution/notebook.ipynb给出了两组可复现的基线数据。由于train_test_split未固定 random_state两次划分略有差异但相对排序稳定分类器关键参数课程基线准确率解决方案准确率Linear SVCkernellinear, C1078.6%76.4%KNNn_neighbors1073.8%70.7%SVC默认rbf, C1.083.2%80.1%Random Forestn_estimators10084.5%82.8%AdaBoostn_estimators10072.4%71.1%两组数字的差异本身就是一个值得在作业中讨论的现象划分随机性也会引入结果波动。这正是调参实验必须固定random_state在train_test_split与模型构造处的原因否则无法区分参数改善与抽样运气。系统化调参的方法论从 Intellisense 到交叉验证要满足作业详细解释的要求建议按以下步骤组织 Notebook用 Intellisense 做参数盘点在 VS Code 中键入SVC(、KNeighborsClassifier(等构造函数悬停或触发补全即可看到全部参数签名、默认值与类型。例如SVC(C1.0, kernelrbf, degree3, gammascale, ...)、KNeighborsClassifier(n_neighbors5, weightsuniform, ...)、RandomForestClassifier(n_estimators100, max_depthNone, ...)。把这些默认值抄录进 Markdown 文本框就完成了探索环节一次只改一个参数保持其余参数与 random_state 不变记录准确率、precision、recall、f1-score 的变化。例如把 Linear SVC 的 C 从 10 调成 1、0.1、100观察准确率与过拟合倾向把 KNN 的 n_neighbors 从 5 调到 3、10、20用度量工具解释为什么classification_report按类别给出 precision/recall/f1可定位某个参数损害了哪个类别的识别confusion_matrix可观察具体错分模式precision_recall_curve配合probabilityTrue可评估阈值敏感性cross_val_score可检验参数改动在多次折切分下是否稳健而不是单次划分的偶然区分提升与退化的机理结合每个参数的定义给出因果解释——C 影响正则化强度与过拟合、n_neighbors 影响决策平滑度、n_estimators 影响集成稳定性、probability 影响训练代价与概率可用性。解释得越具体越接近 Exemplary 标准。延伸多语言与多框架的对照实验本课还提供了 R 语言解决方案4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb使用 tidymodels 生态kernlab、ranger、xgboost、kknn等包完成同样的分类实验并配有 R Markdown 版 lesson_12.Rmd 与 HTML 渲染 lesson_12.html。若作业希望做到Exemplary可以对照 Python 与 R 两套实现验证同一批参数如 k 近邻的 k、随机森林的树数在不同框架下对模型质量的影响是否一致——这既加深了对参数语义的理解也展示了跨语言迁移调参经验的能力。结语Parameter Play 作业的真正价值不在于找到最优参数而在于建立参数—数据—模型质量之间的因果直觉。借助本课的五个分类器、VS Code Intellisense 的参数盘点、classification_report与cross_val_score的量化验证以及课程与解决方案中两组基线的对照任何学习者都能产出一个结构完整、解释详尽的调参 Notebook达到示范级评分标准。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表