Day 106 — 机器学习基础:图解
1. 机器学习工作流全景图
┌──────────────────────────────────────────────────────────────────────┐
│ 机器学习完整工作流 │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ 📁 数据收集 │
│ ┌─────────────┐ │
│ │ CSV / API │ │
│ │ 数据库 / 爬虫│ │
│ └──────┬──────┘ │
│ ↓ │
│ 🔍 数据探索 (EDA) │
│ ┌─────────────┐ │
│ │ 统计摘要 │ │
│ │ 可视化 │ │
│ │ 相关性分析 │ │
│ └──────┬──────┘ │
│ ↓ │
│ 🧹 数据预处理 │
│ ┌─────────────┐ │
│ │ 缺失值填充 │ │
│ │ 特征编码 │ │
│ │ 特征缩放 │ │
│ │ 特征选择 │ │
│ └──────┬──────┘ │
│ ↓ │
│ ✂️ 数据拆分 │
│ ┌─────────────────────────────────────┐ │
│ │ ┌──────────────────┐ ┌──────────┐ │ │
│ │ │ 训练集 80% │ │ 测试集20%│ │ │
│ │ └──────────────────┘ └──────────┘ │ │
│ └──────────────────┬──────────────────┘ │
│ ↓ │
│ 🤖 模型训练 & 评估(循环) │
│ ┌──────────────────────────────────────┐ │
│ │ train → fit → predict → evaluate │ │
│ │ ↑ ↓ │ │
│ │ 调参 ←────┘ │ │
│ └──────────────────────────────────────┘ │
│ ↓ │
│ 🚀 部署 & 预测 │
│ ┌─────────────┐ │
│ │ 新数据输入 │ │
│ │ 模型预测输出 │ │
│ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────┘
2. 三大学习范式对比
┌─────────────────────────────────────────────────────────────────────┐
│ 三大学习范式 │
├────────────────┬──────────────────┬──────────────────┬──────────────┤
│ │ 监督学习 │ 无监督学习 │ 强化学习 │
├────────────────┼──────────────────┼──────────────────┼──────────────┤
│ 数据 │ 有标签 │ 无标签 │ 奖励信号 │
│ │ (X, y) │ (X) │ (s,a,r,s') │
├────────────────┼──────────────────┼──────────────────┼──────────────┤
│ 目标 │ 学习输入→输出 │ 发现数据结构 │ 最优策略 │
│ │ 的映射关系 │ 聚类/降维/异常 │ 最大化累计 │
│ │ │ 检测 │ 奖励 │
├────────────────┼──────────────────┼──────────────────┼──────────────┤
│ 典型任务 │ 分类、回归 │ 聚类、降维 │ 游戏AI、 │
│ │ │ 异常检测 │ 机器人控制 │
├────────────────┼──────────────────┼──────────────────┼──────────────┤
│ 示例 │ 垃圾邮件识别 │ 客户分群 │ AlphaGo │
│ │ 房价预测 │ 文档主题聚类 │ 自动驾驶 │
├────────────────┼──────────────────┼──────────────────┼──────────────┤
│ 类比 │ 老师教学生做题 │ 自己总结规律 │ 打游戏试错 │
└────────────────┴──────────────────┴──────────────────┴──────────────┘
3. 混淆矩阵图解
预 测 值
┌────────────┬────────────┐
│ 预测为正 │ 预测为负 │
┌───────────┼────────────┼────────────┤
实 │ 实际为正 │ TP ✅ │ FN ❌ │
际 │ │ 真正例 │ 假负例 │
值 │ │ (正确预测) │ (漏报) │
├───────────┼────────────┼────────────┤
│ 实际为负 │ FP ❌ │ TN ✅ │
│ │ 假正例 │ 真负例 │
│ │ (误报) │ (正确预测) │
└───────────┴────────────┴────────────┘
指标关系:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
准确率 = (TP + TN) / (TP + TN + FP + FN) ← "猜对了多少"
精确率 = TP / (TP + FP) ← "猜正的对不对"
召回率 = TP / (TP + FN) ← "正的被找到没"
F1 = 2 × 精确率 × 召回率 / (精确率 + 召回率) ← 综合
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4. train_test_split 拆分示意图
原始数据集 (150 条)
┌──────────────────────────────────────────────────────────────┐
│ ★★★★ ★★★★ ★★★★ ★★★★ ★★★★ ★★★★ ★★★★ ★★★★ ★★★★ ★★★★ ... │
└──────────────────────────────┬───────────────────────────────┘
│
train_test_split(test_size=0.2)
│
┌───────────────┴───────────────┐
↓ ↓
┌──────────────────────────┐ ┌──────────────────────┐
│ 训练集 (80%, 120 条) │ │ 测试集 (20%, 30 条) │
│ ★★★★ ★★★★ ★★★★ ... │ │ ★★★★ ★★★★ ... │
│ 用于: fit() 训练模型 │ │ 用于: predict() 评估 │
└──────────────────────────┘ └──────────────────────┘
⚠️ 关键:测试集绝对不能参与训练!
5. Scikit-learn API 统一模式
所有 sklearn 模型都遵循相同的 3 步 API:
┌─────────────────────────────────────────────────┐
│ │
│ Step 1: model = XxxModel(hyperparams) │
│ 创建模型对象 │
│ │
│ Step 2: model.fit(X_train, y_train) │
│ 用训练数据拟合模型 │
│ ↓ │
│ 模型内部学习参数 │
│ │
│ Step 3: y_pred = model.predict(X_test) │
│ 用新数据预测 │
│ ↓ │
│ 输出预测结果 │
│ │
│ 附加: score = model.score(X_test, y_test) │
│ 计算评估指标 │
│ │
└─────────────────────────────────────────────────┘
记忆口诀:创建 → 拟合(fit) → 预测(predict) → 评估(score)