用 GitHub 环境教学: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
本文基于课程仓库中的 for-teachers.md(德语版为 translations/de/for-teachers.md)整理,面向希望把这套 12 周、26 课的经典机器学习课程搬进课堂的教师。文章覆盖两条完整落地路线:基于 GitHub Classroom 的"每课一仓库"模式,以及不依赖 Classroom、用 GitHub Issues 收作业与测验的"原仓库直用"模式,并结合仓库中的测验应用(quiz-app)、Docsify 离线文档站点和课程目录结构,给出可直接执行的操作步骤。
1. 课程结构:为什么这套仓库适合"仓库即课堂"
要理解教师文档给出的教学方案,先看仓库本身的组织方式。ML-For-Beginners 是 Microsoft Cloud Advocates 提供的 12 周、26 课经典机器学习课程,主打 Scikit-learn、刻意避开深度学习(深度学习内容在其姊妹课程 AI for Beginners 中)。README.md 明确了课程设计原则:
- 项目驱动(project-based):内容与项目绑定,"边做边学";
- 高频测验(frequent quizzes):课前 pre-lecture quiz 设定学习意图,课后 post-lecture quiz 强化留存;
- 统一主题贯穿:以世界文化为线索,把经典技术套用到各地数据集上。
仓库按"主题模块 → 单课目录"两级组织,共 9 个模块目录:
| 模块目录 | 主题 | 包含课程 |
|---|---|---|
| 1-Introduction | 机器学习入门 | 概念、历史、公平性、ML 技术 |
| 2-Regression | 回归 | Python/Scikit-learn 工具、数据清洗、线性回归、逻辑回归(南瓜价格数据集) |
| 3-Web-App | Web 应用 | 用 Flask 部署训练好的模型 |
| 4-Classification | 分类 | 数据准备、分类器一/二、推荐系统应用(亚洲印度料理数据集) |
| 5-Clustering | 聚类 | 数据可视化、K-Means(尼日利亚音乐口味数据集) |
| 6-NLP | 自然语言处理 | NLP 入门、常见任务、翻译与情感分析、酒店评论情感分析 |
| 7-TimeSeries | 时间序列 | 预测入门、ARIMA、SVR(全球用电量数据集) |
| 8-Reinforcement | 强化学习 | Q-Learning、Gym("帮助 Peter 躲开狼") |
| 9-Real-World | 真实世界 | 实际应用、用 RAI dashboard 调试模型 |
每一课目录内都遵循统一的"教学套件"结构,这也是后续所有教学操作(收作业、评测验)的文件基础。以 2-Regression/1-Tools 为例:
2-Regression/1-Tools/ ├── README.md # 课程正文(含 knowledge checks、challenge) ├── assignment.md # 课后作业(含评分 rubric) ├── notebook.ipynb # 动手练习 notebook ├── solution/ # 参考实现(Python ipynb + R 的 .Rmd/.html) └── images/ # 课程配图README.md 中"Each lesson includes"一节列出了完整清单:可选 sketchnote、可选补充视频、部分课程的视频讲解、pre-lecture 热身测验、课程正文、项目步骤指引、knowledge checks、challenge、补充阅读、assignment、post-lecture 测验。学生标准学习闭环为:课前测验 → 阅读课程并完成活动 → 课后测验 → 完成 challenge → 完成 assignment → 学完一组课程后到 Discussion Board 填写 PAT(Progress Assessment Tool)rubric。
值得注意的还有多语言支持:仓库包含 50 余种语言的翻译(见 translations 目录,德语版为 translations/de/README.md),每种语言约 99 个 Markdown 文档和 51 个 notebook 的翻译。教师如果面向非英语学生授课,可以直接采用翻译目录下的课程文档,而图片翻译存放在 translated_images 目录(按语言分目录的 webp 文件)。
由于翻译目录显著增大下载体积,README.md 提供了 sparse checkout 方式,只拉取课程本体,这对课堂机器批量克隆很有用:
git clone --filter=blob:none --sparse https://github.com/microsoft/ML-For-Beginners.git cd ML-For-Beginners git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'Windows CMD 下同样可用,只需把引号换成双引号:git sparse-checkout set --no-cine "/*" "!translations" "!translated_images"(原样照抄 README 中的"/*"写法即可)。这样得到的仓库包含完成全部课程所需的一切,但下载更快。
2. 路线一:GitHub Classroom —— 每课一个仓库
for-teachers.md 给出的第一条路线是使用 GitHub Classroom(classroom.github.com)把课程纳入 GitHub 平台管理。教师文档的核心操作要求是:
- Fork 本仓库到你的 GitHub 账号/组织;
- 为每一课单独建一个仓库:把每个课程目录(如
2-Regression/3-Linear/)提取为独立仓库; - 这样 GitHub Classroom 可以逐课(per-lesson)识别并认领每一个 lesson。
为什么必须拆到"一课一仓库"粒度?因为 GitHub Classroom 的 assignment 机制以 repository 为单位派发:每个 lesson 仓库对应一条 Classroom assignment,学生 fork 后提交,教师即可按课追踪完成情况和作业内容。把 9 个模块、26 课混在一个大仓库里,Classroom 无法按课拆分进度,也就失去了这套课程"高频小步快跑"的教学节奏。
提取单课目录的常用方式(以逻辑回归一课为例,在你自己的 fork 基础上操作):
# 克隆自己的 fork 后,用 sparse-checkout 只取目标课程目录 git clone --filter=blob:none --sparse https://github.com/<你的账号>/ML-For-Beginners.git cd ML-For-Beginners git sparse-checkout set 4-Classification/3-Classifiers-2然后在本地新建一个空仓库(如lesson-12-classifiers-2),把提取出的目录内容拷入、提交并推送,即得到该课的独立仓库。26 个课程目录(docs/_sidebar.md 侧边栏列出了全部 26 课的相对路径清单)逐一处理即可。
教师文档还引用了 GitHub Blog 的完整搭建教程(Set up your digital classroom with GitHub Classroom)作为外部参考。Classroom 建好的标准流程为:创建 classroom → 添加 assignment(关联各 lesson 仓库)→ 学生接受邀请并自动 fork。
3. 路线二:原仓库直用(不使用 GitHub Classroom)
教师文档指出:完全可以不引入 GitHub Classroom,直接把仓库"现状"用于教学。此时教师需要口头/文档明确告知学生当前要学哪一课。文档给出两种组织形式:
3.1 公开协作式(open & collaborative)
适用在线课堂(Zoom、Teams 或其他平台):
- 用Breakout Rooms组织测验(quiz)环节,导师(mentor)在房间里帮助学生进入学习状态;
- 到指定时间,让学生把测验答案作为 Issue 提交(submit as "issues");
- 作业(assignment)可以走同样的公开协作流程——鼓励学生"在公开场合协作完成"(work collaboratively out in the open)。
这套流程与仓库的文件结构天然契合:每课都有一个assignment.md(例如 2-Regression/1-Tools/assignment.md 就给出了作业说明和四档评分 rubric 表),教师可以直接把该文件作为 Issue 模板正文,学生按 rubric 自查后提交。
3.2 私有提交式(private format)
如果偏好更私密的形式,教师文档的方案是:
- 要求学生逐课 fork课程到自己的私有仓库(private repo);
- 把教师加为协作者,授予访问权限;
- 学生在自己仓库中私下完成测验和作业;
- 通过课堂仓库(classroom repo)的 Issue 渠道把结果提交给教师。
3.3 两种形式对比
| 维度 | 公开协作式(3.1) | 私有提交式(3.2) |
|---|---|---|
| 学生仓库可见性 | 公开(公开 fork) | 私有,教师加协作者 |
| 测验提交 | 指定时间以 Issue 提交 | 完成后以 classroom repo 的 Issue 提交 |
| 作业风格 | 公开、协作(out in the open) | 私下独立完成 |
| 适用场景 | 在线课堂 + Breakout Rooms | 需要隐私保护或防抄袭的场景 |
| 依赖工具 | 仓库 Issue + 会议软件 | fork + collaborator 授权 + Issue |
文档最后也强调:在线课堂中让这套流程跑起来的方式有很多种,鼓励教师反馈"哪种方式对你最有效"(let us know what works best for you)——这是课程维护者持续迭代教学建议的输入渠道,可通过 CONTRIBUTING.md 说明的 Issue/PR 机制反馈。
4. 配套工具:quiz-app 本地运行与部署
README.md 说明:课程全部 52 个测验(每个 3 题)都包含在 quiz-app 目录中,课程正文内嵌了测验链接,但该应用也可以本地运行或部署到 Azure。教师文档路线二中"组织学生做测验"时,一个可靠的抓手就是自己托管一套 quiz-app。
quiz-app 是一个 Vue 项目,quiz-app/package.json 显示它基于 Vue 3(vue: ^3.5.12)、vue-router、vue-i18n(这也是测验支持多语言的原因),由 vue-cli 5.x 构建。常用命令(来自 quiz-app/README.md):
cd quiz-app npm install # 安装依赖 npm run serve # 开发模式:编译并热重载 npm run build # 生产构建(压缩打包) npm run lint # 代码检查并自动修复单页应用的路由由 quiz-app/public/routes.json 处理:所有路径(/*)都回退到index.html,即静态部署时无需服务器端路由支持。
quiz-app/README.md 还给出了部署到 Azure Static Web Apps 的完整步骤:
- Fork 仓库,确保静态站代码在你的 GitHub 仓库中;
- 在 Azure portal 中"Create a resource" → 搜索 "Static Web App" → Create;
- 配置基础信息(订阅、资源组、名称、区域);
- 部署详情:Source 选 GitHub,授权 Azure 访问你的 GitHub 账号、组织、仓库和分支;
- 构建详情:Build Preset 选框架(此项目为 Vue)、App Location、Output Location(构建产物目录);
- 审查并创建后,Azure 会在你的仓库自动生成 GitHub Actions 工作流文件(
.github/workflows/azure-static-web-apps-<name>.yml),后续构建与部署由 Actions 自动完成,可在仓库 Actions 标签页监控。
README 中给出的工作流示例要点:on: push/pull_request(branches: main)、job 运行在ubuntu-latest、核心步骤使用Azure/static-web-apps-deploy@v1,并传入azure_static_web_apps_api_token、repo_token、app_location: "/quiz-app"(源在仓库的 quiz-app 子目录)、output_location: "dist"。教师部署到自己的 fork 后即可得到一条班级专用测验 URL,配合 3.1/3.2 的 Issue 提交流程使用。
5. 离线与打印:Docsify 站点和 PDF
课堂网络不稳定或需要纸质材料时,仓库自带两个方案:
Docsify 离线站点:README.md 的 "Offline access" 一节说明,Fork 仓库并在本地安装 Docsify 后,在仓库根目录执行:
docsify serve文档站点即在本机 3000 端口启动(localhost:3000)。站点的入口是根目录的 index.html,其中内嵌的window.$docsify配置设置了name: 'Machine Learning for Beginners'与relativePath: true(允许从子目录页面按相对路径加载各课 README),侧边栏由 docs/_sidebar.md 驱动——该文件按 Introduction、Regression、Web App、Classification、Clustering、NLP、Time Series、Reinforcement Learning、Real World ML 九个分组列出全部 26 课的入口链接,正好可以作为班级课程表使用。
PDF 版本:仓库根目录的 package.json 定义了"convert": "node_modules/.bin/docsify-to-pdf"脚本,配合 docsifytopdf.js 使用;成品 PDF 存放在 pdf/readme.pdf。README 同时提供了一份带链接的 PDF 版本入口。
6. 快速参考:教师备课卡片
把 for-teachers.md 的要点与仓库结构合并,整理成一张可直接使用的备课清单:
| 教学环节 | 依赖的仓库资产 | 组织方式 |
|---|---|---|
| 课程排期 | README.md 中 26 课总表(含学习目标、作者)、docs/_sidebar.md | 按 9 个模块、12 周节奏排课 |
| 课前热身 | quiz-app 中的 pre-lecture quiz(共 52 组测验) | 自托管 quiz-app 或引用课程内链接 |
| 课中实践 | 每课notebook.ipynb、solution/参考实现、knowledge checks、challenge | Breakout Rooms / 导师辅导 |
| 课后测验 | quiz-app 中的 post-lecture quiz | 指定时间以 Issue 提交(公开式)或私有提交(私有式) |
| 作业 | 每课assignment.md(自带 rubric 表) | Issue 提交,按 rubric 评分 |
| 复盘 | Discussion Board PAT rubric、CONTRIBUTING.md 反馈渠道 | 学完一组课程后填写 PAT |
| 非英语班级 | translations 下 50+ 语言文档与 notebook、translated_images 图片 | 选用对应语言目录的课程内容 |
需要特别说明的适用前提:路线一依赖 GitHub Classroom 服务(需组织/账号具备权限,且需要把 26 课目录拆成 26 个独立仓库,是一次性的准备工作);路线二仅依赖仓库的 fork/Issue/协作者机制,零额外服务,但进度追踪要靠教师手动核对 Issue。两种方式都可以在 CONTRIBUTING.md 约定的社区渠道把"什么最有效"的经验反馈给课程维护者,帮助这套课程对后续使用者持续优化。
【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考