首页
/ ML-For-Beginners 分类练习实战指南:用课程数据集匹配 Scikit-learn 算法完成分类方法探索

ML-For-Beginners 分类练习实战指南:用课程数据集匹配 Scikit-learn 算法完成分类方法探索

2026-09-05 19:18:50作者:曹令琨Iris

本文围绕 ML-For-Beginners 分类模块第一课的作业《Explore classification methods》展开。该作业要求你在 Scikit-learn 监督学习文档中做一场"分类方法寻宝":从课程自带的数据集中挑选一个、为它提出一个可以回答的问题、再匹配一种分类技术,最终产出覆盖 3~5 种算法、解释详尽的对比表格。读完本篇,你将掌握如何盘点仓库中的五个真实数据集、判断它们适合二分类还是多分类、为每个数据集设计可验证的分类问题,并按作业评分标准(Rubric)产出一份完整的算法-数据集匹配表。

作业原始要求:Scavenger Hunt 式的分类方法探索

作业定义在 assignment.md 中,核心指令是一段"寻宝"任务:

In Scikit-learn documentation you'll find a large list of ways to classify data. Do a little scavenger hunt in these docs: your goals is to look for classification methods and match a dataset in this curriculum, a question you can ask of it, and a technique of classification. Create a spreadsheet or table in a .doc file and explain how the dataset would work with the classification algorithm.

拆解开来,交付物包含四个必须齐全的要素:

  1. 一个分类方法:来自 Scikit-learn 官方文档"Supervised learning(监督学习)"章节中列出的分类技术清单;
  2. 一个课程数据集:必须是本仓库课程中真实使用过的数据集(而非随意下载的新数据);
  3. 一个可以问数据集的问题:即该数据集上的具体分类目标,例如"给定一组特征,它属于哪一类?";
  4. 一份说明文档:用电子表格或 .doc 文件中的表格,解释该数据集是如何与该分类算法配合工作的。

这不是要求你训练出最准确的模型,而是考察**"数据集-问题-算法"三者之间的匹配能力**:能否根据数据形态(类别数、特征类型、样本量)选择合适的分类技术。

二分类与多分类问题

分类问题分为二分类(binary)与多分类(multiclass)两大族,这是匹配算法前先要回答的第一个问题。

评分标准:Exemplary 线要求覆盖 5 种算法

作业附带了一张明确的 Rubric 表格,建议直接按其达标线规划工作量:

Criteria Exemplary Adequate Needs Improvement
分类方法探索 提交一份概览文档,覆盖 5 种算法及其对应分类技术,解释详尽且有深度 提交一份概览文档,覆盖 3 种算法及其对应分类技术,解释详尽且有深度 覆盖少于 3 种算法,且解释既不详尽也不深入

由此得到两条可操作建议:

  • 数量底线:至少写满 3 种算法才能达到 Adequate;建议直接按 Exemplary 标准覆盖 5 种以上;
  • 质量要求:每种算法不能只报名字,必须"well-explained and detailed"——说明它为什么适合这个数据集、输入输出是什么、预期如何评估效果。

第一步:盘点仓库中的候选数据集

作业限定"match a dataset in this curriculum",所以先把仓库里课程实际使用的数据集全部列出。以下信息均来自仓库中的真实 CSV 文件与对应课程文档。

1. 亚洲与印度菜肴数据集(分类主数据集,多分类)

文件 cuisines.csv,共 2448 行数据、385 列。结构特征:

  • cuisine 列是标签,只有 5 个取值:korean(799)、indian(598)、chinese(442)japanese(320)、thai`(289);
  • 其余 383 列全部是 0/1 编码的食材特征(almondgarlicgingerlemongrass…),每行代表一道菜用了哪些食材。

这正是一个典型的多分类、类别不均衡、高维稀疏二值特征问题:给定一组食材,判断这道菜属于哪个菜系。可提的问题例如:"给定一篮子食材,它最可能是一道泰式菜还是韩式菜?" 或降维为二分类:"这份食材清单会不会做出一道印度菜(是/否)?"

菜肴数据集类别分布

cuisines.csv 中五个菜系的样本量分布明显不均(korean 799 对 thai 289),这正是分类第一课要求先用 SMOTE 均衡的原因。

该数据集在第一课 1-Introduction/README.md 中完成了清洗与 SMOTE 均衡,产出 3995 行的 cleaned_cuisines.csv(五个菜系各 799 行),后续两节分类课(2-Classifiers-13-Classifiers-2)都基于它做模型对比——它是本作业最顺手的主料。

2. 美国南瓜市场价格数据(适合二分类/多分类的改造)

US-pumpkins.csv 共 1756 行,字段包括 DateLow PriceHigh PriceVarietyOriginItem SizeColor 等。它原本用于回归(预测价格),但可以自然改造成分类问题:例如按 Origin(产地州)做多分类,或按"High Price 是否超过某阈值"构造二分类标签"高价/低价"。这演示了"同一数据集可以问不同类别的问题"。

3. UFO 目击报告数据(适合二分类)

ufos.csv 共 80332 行,字段包括 shapeduration (seconds)commentslatitudelongitude 等。可用的分类问题:按 shape(cylinder、light、sphere、triangle…)做多分类识别目击物形状;或构造二分类"事件时长是否超过 1 小时"。样本量大、类别明确,适合练习文本特征(comments 分词/计数)与数值特征混合的分类场景。

4. 尼日利亚歌曲数据(分类与聚类的交界)

nigerian-songs.csv 共 530 行,含 artist_top_genredanceabilityenergyacousticnesstempo 等音频特征。它原本用于聚类课,但 artist_top_genre 是现成的类别标签,完全可拿来做"给定音频特征向量,预测歌曲流派"的多分类练习。

5. 电网能耗时间序列(适合按日模式分类)

energy.csv 共 26304 行,记录月度能耗。可以构造弱分类问题:按"工作日/周末"或"季节"对样本打标签后,用历史特征做模式分类。这个例子能帮助你说明:并非所有数据集都天然适合分类,有些要先做标签工程——这本身就是 Rubric 要求"解释算法如何与数据集工作"的好素材。

第二步:为数据集设计"问题"——先分清二分类与多分类

作业要求写出"a question you can ask of it"。写问题前,先套用第一课的核心区分(见 README.md 的引入部分):

  • 二分类:标签只有两个值。例如"这封邮件是不是垃圾邮件""南瓜价格是不是高价档";
  • 多分类:标签有 3 个及以上值。例如"这道菜属于哪个菜系""这个 UFO 目击报告的形状类别是什么"。

一个实用的检验方法:看标签列的取值数。cuisine 有 5 个取值 → 多分类;如果人为把 5 个菜系合并成"含大量香料的菜系 / 其他"两组,就变成了二分类。同一个数据集两种问法,匹配到的算法与评估指标都会不同,写进文档时这种对比会直接体现"well-explained"。

第三步:从 Scikit-learn 分类技术清单中挑选算法

Scavitger hunt 的"宝藏"位于 Scikit-learn 官方文档的 supervised learning 章节。结合本仓库后续课程的真实用法(可以从各课 solution notebook 中确认),建议优先考察以下算法,它们正好满足 Exemplary 的 5 种要求:

算法 课程中的实际出处 适配的数据形态
LogisticRegression(逻辑回归) 2-Classifiers-1 课程 import 与 solution notebook 线性可分性较好、特征数量中等的二/多分类(multinomial 目标);cuisines 的 0/1 食材特征正是典型输入
SVC(支持向量机) 同上课程,与 LogisticRegression 对照训练 中高维特征空间、样本量中等;边界复杂时可用核技巧
KNeighborsClassifier(K 近邻) 3-Classifiers-2 solution notebook 无需训练阶段、直观可解释;特征最好先做尺度统一
RandomForestClassifier(随机森林) 同上课程 solution notebook 高维稀疏特征、存在噪声列;自带特征重要性输出
决策树 / Naive Bayes 等(自选补充) Scikit-learn 监督学习文档清单 决策树适合可解释性优先的场景;朴素贝叶斯适合独立假设较强的计数类特征

写文档时,每种算法建议固定回答三句话:它属于哪一类分类技术(线性模型/核方法/集成/实例学习…)、它接收什么样的特征与标签、在所选数据集上你预期它会好在哪、差在哪。这第三句是"well-explained"的关键。

第四步:交付物模板——一份可直接套用的匹配表

把上面三步的产出合并,作业的 .doc/电子表格文档可以用如下表格骨架填充(示例行基于仓库真实数据,供参考格式,不代表唯一正确答案):

Dataset(课程数据集) Question(分类问题) Technique(分类技术) How it works(算法与数据如何配合)
cuisines.csv 给定 383 个 0/1 食材特征,这道菜属于 5 个菜系中的哪一个?(多分类) LogisticRegression 输入是均衡后 cleaned_cuisines.csv 的食材矩阵,标签为 cuisine;线性边界在多分类下按 multinomial 方式输出各类概率,用 train_test_split 留出测试集后以 accuracy / classification_report 评估
同上 给定食材清单,是否为一印度菜?(二分类) SVC 二分类下 SVM 找最大间隔超平面;0/1 稀疏特征维度高,核选择影响显著,可与逻辑回归对照准确率
US-pumpkins.csv 该笔南瓜交易属于哪个产地(Origin)? RandomForestClassifier 日期、价格区间、品种、尺寸等混合特征,树模型可处理缺失值与不同量纲,且能输出产地预测的特征重要性
ufos.csv 目击报告的 shape 属于哪一类? KNeighborsClassifier 将时长、坐标等数值化特征统一尺度后,以 K 个最近邻投票判定形状类别;样本量大(8 万余条),建议抽样训练
nigerian-songs.csv 给定音频特征向量,预测 artist_top_genre 流派? 自选(如决策树或朴素贝叶斯) 说明所选技术如何消费 danceability/energy/tempo 等特征,并指出与聚类课用法(无标签)的差异

填表时注意两点:一是"Question"列要写出具体的预测目标(预测哪一列),而不是泛泛的"分类这个数据";二是"How it works"列要落到特征与标签的衔接方式上,例如 cuisines 场景中 cuisine 列为标签、其余 0/1 列为特征,评估时用 accuracy_scoreconfusion_matrixclassification_report 等指标(这些 import 可见于 2-Classifiers-1/README.md 的代码段)。

最小可运行验证:在 cuisines 上走通一次分类流程

为了让表格中的"how it works"不流于纸面,可以在课程配套 notebook 中跑通最小流水线。以下代码组件(库 import、标签切分方式)与 2-Classifiers-1 课程的 solution 一致:

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

cuisines_df = pd.read_csv("4-Classification/data/cleaned_cuisines.csv")
labels = cuisines_df["cuisine"]                     # 标签:5 个菜系
features = cuisines_df.drop("cuisine", axis=1)      # 特征:0/1 食材矩阵

X_train, X_test, y_train, y_test = train_test_split(
    features, labels, test_size=0.2, random_state=42)

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
preds = model.predict(X_test)

print(accuracy_score(y_test, preds))
print(classification_report(y_test, preds))

跑通后,把得到的准确率与报告中各菜系的 precision/recall 填进你的表格"how it works"列,即从"我认为它适合"升级为"它实测如何"。后续课程(2-Classifiers-1、3-Classifiers-2 的 solution notebook)还演示了 SVCKNeighborsClassifierRandomForestClassifier 的同类流程,可直接照抄替换 model = ... 一行完成对比实验。

交付前自检清单

  1. 算法数量:表格是否覆盖 5 种分类技术(Exemplary 线),至少 3 种(Adequate 线)?
  2. 四要素齐全:每一行是否同时含"课程数据集 + 具体问题 + 分类技术 + 工作方式解释"?
  3. 数据集合法性:所选数据集是否全部来自本仓库的 data 目录(cuisines、US-pumpkins、ufos、nigerian-songs、energy 等),而非外部下载?
  4. 问题类型标注:每个问题是否明确标出了二分类或多分类?
  5. 深度而非罗列:每种算法是否解释了"为什么这个数据集适合/不适合它",而不是只写算法名?
  6. 可选加分:是否跑通了最小流水线,用实测指标(accuracy、confusion matrix)佐证了至少一行结论?

完成以上检查,这份作业就从"算法名词清单"变成了"数据集驱动的技术选型文档"——这正是分类模块第一课希望你在进入 More classifiersYet other classifiers 之前建立起来的思维方式。

登录后查看全文
热门项目推荐
相关项目推荐