# 机器学习小组练习作业设计方案
## ——线性回归 · 逻辑回归 · 朴素贝叶斯

> **配套网站**：`机器学习小组练习作业网站.html`（单文件，双击即可离线打开，自动判分与成绩统计）
> **适用课程**：《机器学习基础》《人工智能导论》《Python 数据分析》等
> **作业形式**：线上个人测验（网站自动判分）+ 小组实践任务 + 教师线下评定
> **建议安排**：课内 2 课时 + 课后 1 周

---

## 一、作业基本信息

| 项目 | 内容 |
|---|---|
| 作业主题 | 经典监督学习三模型：线性回归（回归）、逻辑回归（分类）、朴素贝叶斯（概率分类） |
| 组织形式 | **固定 8 支队伍**（第1队~第8队）；每队首位登录者自动成为**队长**并维护本队名单；线上部分个人独立完成，实践部分小组协作完成 |
| 工具环境 | 作业网站（任意现代浏览器）+ Python 3.x + scikit-learn |
| 成绩构成 | 线上测验（自动）+ 小组实践（教师评）+ 个人协作（教师评），总评 100 分 |
| 数据保存 | 本地版：浏览器 localStorage；公网版：学生成绩通过「成绩回执码」回传给教师汇总（详见第六节第 5 条） |

## 二、教学目标

1. **知识目标**：掌握三大模型的核心公式与思想——
   - 线性回归：模型 ŷ = wx + b、最小二乘目标 L(w,b) = (1/n)Σ(yᵢ − ŷᵢ)²、梯度下降更新、决定系数 R²；
   - 逻辑回归：Sigmoid 函数 σ(z) = 1/(1 + e⁻ᶻ)、阈值判决、交叉熵损失、线性决策边界；
   - 朴素贝叶斯：贝叶斯公式 P(Y|X) = P(X|Y)P(Y)/P(X)、"朴素"= 特征条件独立假设、拉普拉斯平滑。
2. **能力目标**：能用 scikit-learn 完成数据读取 → 建模 → 预测 → 评估（MSE/R²、准确率/混淆矩阵、Precision/Recall）的完整流程。
3. **素养目标**：小组分工协作、结果解读与答辩表达。

## 三、分组与分工

- **全班固定分为 8 支队伍**（第1队~第8队），由系统预置，无需教师建组；
- **队长机制**：每队**第一位登录**的同学自动成为队长（系统二次确认），队长负责在「登录 / 我的队伍」页录入本队队员姓名，并可移出队员；
- **队员**：必须使用队长录入的姓名登录；名单外的姓名会被拒绝，需联系队长添加；
- **建议每队 4~6 人**，队内可参考以下角色分工（可兼任）：

| 角色 | 职责 | 产出 |
|---|---|---|
| 队长 | 建名单、统筹进度、确认实践任务提交、对接教师 | 名单、进度记录、任务提交确认 |
| 数据工程 | 数据获取、清洗、划分 | 数据集与预处理脚本 |
| 建模工程师 | 三个模型的训练与调参 | model_a/b/c 代码 |
| 测评工程师 | 指标计算、结果验证 | 评估报告（指标表） |
| 报告撰写 | 公式推导简述与实验报告 | 小组报告（PDF/Word） |
| 答辩人 | 10 分钟汇报与答疑 | 答辩 PPT |

## 四、作业内容设计

### 4.1 线上个人测验（网站自动判分，每人必做）

- **结构**：三个模块各 5 题（4 道单选 + 1 道计算填空），每题 20 分；
- **满分**：每模块 100 分，三模块合计 **300 分**；
- **流程**：打开网站 → 进入「登录」→ 选择队伍 + 输入姓名（每队首位登录者即队长）→ 队长录入本队名单 → 队员登录 → 逐模块作答 → 提交后立即判分并**解锁该模块的参考答案与代码**；
- **答案隐藏规则**：答题页面不包含任何答案、解析或代码；只有提交后，结果页才生成一个默认折叠的「🔓 查看参考答案与代码」面板（每题含正确答案、解析、Python/scikit-learn 参考代码）；未提交的模块无法查看；
- **成绩回执**：三模块完成后，学生在结果页点「复制回执码」把回执发给教师；教师在「成绩统计 → 导入学生成绩回执」中粘贴导入，即可汇总全班成绩（详见第六节第 6 条）。

**题目考点对照表**：

| 模块 | 题号 | 考点 | 题型 |
|---|---|---|---|
| 线性回归 | A1 | 模型 ŷ = wx + b 中参数含义（斜率/截距） | 单选 |
| | A2 | 最小二乘目标：最小化残差平方和 Σ(yᵢ − ŷᵢ)² | 单选 |
| | A3 | 代入计算：ŷ = 2x + 1，x = 5 求预测值 | 填空 |
| | A4 | 决定系数 R² 的含义（越接近 1 拟合越好） | 单选 |
| | A5 | 学习率 α 过大导致震荡/发散 | 单选 |
| 逻辑回归 | B1 | Sigmoid 函数表达式 | 单选 |
| | B2 | 计算 σ(0) = 0.5 | 填空 |
| | B3 | 与线性回归本质区别：分类 vs 回归 | 单选 |
| | B4 | 二分类常用交叉熵损失 | 单选 |
| | B5 | 概率 0.8 与阈值 0.5 的判决 | 单选 |
| 朴素贝叶斯 | C1 | "朴素" = 特征条件独立假设 | 单选 |
| | C2 | 贝叶斯公式形式 | 单选 |
| | C3 | 贝叶斯后验计算（垃圾邮件概率 0.75） | 填空 |
| | C4 | 拉普拉斯平滑的作用（消除零概率） | 单选 |
| | C5 | 按最大后验概率判决类别 | 单选 |

### 4.2 小组实践任务（每组提交一套，1 周内完成）

| 任务 | 内容 | 数据集建议 | 必交产出 | 评分点 |
|---|---|---|---|---|
| A 线性回归 | 拟合一条/多维回归线并评估 | 加州房价、身高体重（自造也可） | 代码 + 拟合图 + MSE、R² | 代码可运行(6) 图表规范(4) 指标解读(5) |
| B 逻辑回归 | 完成二分类并评估 | sklearn 自带乳腺癌数据集 | 代码 + 准确率 + 混淆矩阵 | 代码可运行(6) 混淆矩阵正确(4) 阈值讨论(5) |
| C 朴素贝叶斯 | 文本分类并评估 | 短信垃圾分类（SMS Spam）或 20news | 代码 + Precision/Recall | 代码可运行(6) 平滑说明(4) 指标解读(5) |

- **参考代码解锁**：三个任务各配一套完整参考代码（数据加载 → 建模 → 评估），默认锁定；队长在「小组实践」页点击「✔ 本组已提交，解锁参考代码」后全队可见，也可撤销重新锁定。

**提交物**：① 三个任务的代码（.py/.ipynb）；② 小组报告（含每个模型的公式推导简述、实验结果截图、结论）；③ 答辩 PPT（10 分钟汇报 + 5 分钟答疑）。

## 五、评分体系与成绩统计

### 5.1 总评构成（满分 100）

| 成绩项 | 原始分 | 折算 | 评价人 | 统计方式 |
|---|---|---|---|---|
| 线上个人测验 | 300 分（3 × 100） | **50 分**（测验总分 ÷ 3 × 0.5） | 网站自动 | 每人每模块得分、总分、均分 |
| 小组实践 | 100 分（代码 40 + 报告 40 + 答辩 20） | **40 分**（组内同分） | 教师 | 教师评一次，全组共享 |
| 个人协作表现 | 100 分（出勤/分工完成度/组内互评） | **10 分** | 教师 | 每人单独评 |

- **线下综合分**（0~100）= 小组实践分 × 0.8 + 个人协作分 × 0.2，由教师合并后**录入网站**；
- **总评（网站自动计算）= 测验总分 ÷ 3 × 0.5 + 线下综合分 × 0.5**；
  例：某同学线上测验 240 分（均分 80），线下综合分 85，则总评 = 80 × 0.5 + 85 × 0.5 = **82.5 分**；
- 线下综合分未录入时，网站按 0 计并在成绩表中显示"—"提醒教师补录。

### 5.2 教师手动评分细则（实践任务 100 分）

| 维度 | 满分 | 评分参考 |
|---|---|---|
| 代码质量 | 40 | 三个任务均可运行复现（30）；结构清晰、有注释（10） |
| 实验报告 | 40 | 公式推导正确（15）；指标完整且解读合理（15）；格式规范（10） |
| 答辩表现 | 20 | 讲解清晰（10）；答问准确（10） |

### 5.3 个人协作表现评分参考（100 分）

基础分 70；分工任务按期完成 +10；组内互评前 20% +20；出勤/参与度酌情 ±（0~20 扣分）。

## 六、成绩统计方案（网站如何统计每个同学）

1. **队伍与名单**：系统预置 8 支队伍；每队首位登录者成为队长（系统二次确认），队长在「登录 / 我的队伍」页录入本队名单；队员用名单中的姓名登录后，答题成绩自动写入；
2. **自动统计**："成绩统计"页实时显示每位同学的——线性回归得分、逻辑回归得分、朴素贝叶斯得分、测验总分（300）、测验均分、线下综合分、总评、**队内排名、全班排名**；顶部统计卡显示应考人数、已完成人数、平均总评、最高总评，并附 8 支队伍概览（人数 / 完成人数 / 队均分）；
3. **教师录入**：在成绩表的"线下综合分"输入框直接填写（失焦自动保存），总评与排名即时重算；
4. **导出归档**：点击"导出 CSV 成绩表"生成含全部字段的表格文件（含队伍、角色、队内排名），可直接用 Excel/WPS 打开；
5. **公网版的成绩回执（重要）**：网站部署到公网后，学生的答题数据保存在**各自设备**的浏览器里，教师端看不到。为此网站内置「成绩回执」机制——
   - 学生在结果页点「复制回执码」，得到形如 `MLHW2-xxxx-12345` 的字符串，发给教师（也可由队长统一收齐）；
   - 教师在「成绩统计 → 导入学生成绩回执」中粘贴回执（支持一次粘贴多条，每行一条），点击「导入回执」；
   - 系统按"队伍 + 姓名"自动建人并合并成绩（同一学生多次导入时保留较新的记录），随后总评、队内排名、全班排名与 CSV 导出立即可用；
   - 回执带校验位，可发现复制不完整或随意改动；它用于**汇总便利**，不是防作弊手段，教师可结合课堂观察与答题过程核验；
6. **重做管理**：教师可在「教师管理」页"重置全部成绩（保留名单）"，或"重置 8 支队伍"（清空名单与成绩）；单个模块需重做时，可由队长移出该成员后重新添加（会清空其成绩），或教师重置该队成绩；
7. **数据位置说明**：本地版使用浏览器 localStorage，**数据保存在录入名单的那台电脑、那个浏览器里**。建议：① 固定使用教师机同一浏览器；② 每次课后在"成绩统计"页导出一次 CSV 备份；③ 请勿使用浏览器"无痕模式"。公网版则以教师机的导入结果为准，学生设备上的本地记录仅用于生成回执。

## 七、实施流程

| 步骤 | 时间 | 事项 | 责任人 |
|---|---|---|---|
| 1 | 发布前 | 打开「教师管理」确认 8 支队伍就绪，准备好课堂分组名单 | 教师 |
| 2 | 第 1 次课 | 课堂发布：讲解作业要求与评分规则（10 分钟），演示网站操作（10 分钟） | 教师 |
| 3 | 第 1 次课内/课后 3 天 | 学生完成线上三模块测验（提交即锁定），并把「成绩回执码」发给教师 | 每位学生 |
| 4 | 课后 1 周 | 小组完成三个实践任务，提交代码+报告+PPT | 各小组 |
| 5 | 第 2 次课 | 各组答辩（每组 10+5 分钟），教师评实践分与协作分 | 小组/教师 |
| 6 | 答辩后 3 天内 | 教师导入回执、录入线下综合分，核对总评排名，导出 CSV 归档 | 教师 |

## 八、网站使用说明

### 教师端（5 步）
1. 双击打开 `机器学习小组练习作业网站.html`（或访问公网地址）；
2. 进入「教师管理」确认 8 支队伍就绪（如需清空重来，用"重置 8 支队伍"）；
3. 课堂上让各队**第一位同学**登录并成为队长，由队长在「登录 / 我的队伍」录入本队名单；
4. 收齐学生发来的「成绩回执码」，进入「成绩统计 → 导入学生成绩回执」→ 粘贴（每行一条）→ 点「导入回执」；再录入每人的"线下综合分"；
5. 点击「导出 CSV 成绩表」完成归档。

### 学生端（5 步）
1. 打开网站（公网地址或教师机上的本地文件）→ 进入「登录」；
2. 选择自己所在的队伍 + 输入真实姓名（每队第一位登录者即队长，其余同学需队长先录入姓名）；
3. 进入「开始答题」，依次完成三个模块（每模块 5 题，可分次完成；**提交前不要刷新页面**）；
4. 提交后立即看到得分；答案与参考代码在结果页的折叠面板中，**只有提交后才能展开**；
5. 三个模块完成后，在结果页点「复制回执码」发给老师（公网版必做，否则老师收不到你的成绩）。

### 常见问题
- **找不到自己的名字**：让队长在「登录 / 我的队伍」里添加后再登录；
- **不小心成了队长**：首位登录者会自动成为队长（有二次确认）；若认领错误，教师可「重置 8 支队伍」后重新组织；
- **误提交想重做**：默认锁定；可由队长把该成员移出再重新添加（清空其成绩），或教师重置该队成绩；
- **换电脑打开网站没有数据**：成绩保存在录入名单的那台设备的浏览器中；公网版请用回执汇总；
- **公网版教师端看不到学生成绩**：属正常现象（浏览器本地存储不互通），请让学生发「成绩回执码」并在「成绩统计」页导入；
- **导入回执提示"校验失败"**：多半是复制不完整或被截断，请学生重新复制整串代码（以 `MLHW2-` 开头）。

## 九、注意事项与建议

1. **公平性**：线上测验建议当堂限时完成（网站提交即锁定）；答案与代码提交后才解锁，避免提前对答案；
2. **队伍管理**：每队首位登录者会成为队长，建议教师在课堂上按分组名单点名，让指定同学先登录认领队长，避免误认领；
3. **重名处理**：系统按"队伍 + 姓名"识别，同队内重名会被拒绝添加，请让学生使用可区分的姓名（如"张伟A"）；
4. **难度弹性**：题目按"概念 4 + 计算 1"设计，面向初学者；如需提高难度，可要求报告加入正则化（岭回归/L1）、阈值调整对混淆矩阵的影响等扩展讨论并加分；
5. **数据集替代**：无网络环境时，任务 A 可用教师下发的 CSV，任务 B 用 sklearn 自带数据集，任务 C 可用教师分发的离线短信语料；
6. **隐私与合规**：成绩含学生姓名，仅限教学管理使用，导出的 CSV 请妥善保存。

## 十、公网部署（Tailscale Funnel）

| 项目 | 说明 |
|---|---|
| **主访问地址** | **https://ml-homework.tail83f79e.ts.net/** |
| 备用地址 | https://ml-group-homework-tpqoevmb.edgeone.cool（EdgeOne Pages 静态镜像） |
| 配套方案页 | https://ml-homework.tail83f79e.ts.net/plan.html |
| 技术栈 | 教师机本地静态服务（127.0.0.1:8080）+ Tailscale Funnel 反向代理（HTTPS 自动证书） |
| 启动方式 | 双击 `D:\现代信息\启动公网服务.bat`，自动起服务并打开公网地址 |

**运行依赖（重要）**：
1. 教师机保持开机联网，Tailscale 客户端保持登录（服务随系统自启动）；
2. 本地 8080 静态服务需在运行——关闭命令窗口或重启电脑后，双击 `启动公网服务.bat` 即可恢复；
3. 本机若开启代理软件（如 127.0.0.1:7890），请把 `*.ts.net` 加入直连名单，否则教师机自身可能打不开；学生设备通常不受影响。

**常用排障命令**：
- 查看 Funnel 状态：`"C:\Program Files\Tailscale\tailscale.exe" funnel status`
- 查看节点状态：`"C:\Program Files\Tailscale\tailscale.exe" status`
- 关闭 Funnel：`"C:\Program Files\Tailscale\tailscale.exe" funnel --https=443 off`
- 本地自测：浏览器打开 `http://127.0.0.1:8080/`

**数据说明**：公网版数据仍保存在各学生设备浏览器中，教师端通过「成绩回执码」汇总（见第六节第 5 条）；EdgeOne 镜像与 ts.net 主站使用同一套页面，数据互不相通，全班统一使用一个地址即可。

---

*本方案与配套网站均可在本地离线使用（双击 HTML 即可），也可部署到公网（Tailscale Funnel / 腾讯 EdgeOne Pages）；公式记法与《中学数学知识全解_公式大全.md》保持一致（Unicode 文本公式）。*
