🤖 阶段二:机器学习
第1课:机器学习是什么?
核心思想
传统编程 → 人写规则,电脑执行 机器学习 → 电脑自己从数据中学习规则生活中的机器学习
- 垃圾邮件过滤
- 抖音/小红书推荐算法
- 语音助手(Siri、小爱同学)
- 人脸识别
机器学习的三种类型
| 类型 | 说明 | 例子 |
|---|---|---|
| 监督学习 | 有"标准答案" | 预测房价、识别猫狗 |
| 无监督学习 | 没有标准答案,自己找规律 | 用户分群、图片聚类 |
| 强化学习 | 通过奖励/惩罚学习 | AlphaGo、游戏 AI |
监督学习的两个主要任务
- 分类:预测类别(这封邮件是垃圾邮件吗?)
- 回归:预测数值(这套房子能卖多少钱?)
💡 核心比喻:机器学习 = 拟合函数
你有一堆散点,机器学习帮你画一条最贴合这些点的曲线。 以后来一个新的 x,就能用这条曲线预测 y。
测验答案:B — 用历史房价数据训练模型,预测新房价(有标准答案 = 监督学习)
第2课:第一个机器学习项目
用 sklearn 训练一个判断鸢尾花品种的模型。
完整代码
python
# 1. 导入工具 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # 2. 加载数据 iris = load_iris() X = iris.data # 特征(花的大小数据) y = iris.target # 标签(品种编号:0,1,2) # 3. 拆分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42 ) # test_size=0.3 → 70%训练,30%测试 # 4. 选择模型并训练 model = KNeighborsClassifier(n_neighbors=3) model.fit(X_train, y_train) # 训练! # 5. 预测并评估 y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(f"模型准确率: {accuracy * 100:.1f}%") # 6. 用自己的数据试试 new_flower = [[5.1, 3.5, 1.4, 0.2]] prediction = model.predict(new_flower) print(f"预测品种: {iris.target_names[prediction[0]]}")代码解读
- train_test_split:不能把所有数据都用来训练,要留一部分来"闭卷考试"
- KNeighborsClassifier:看新数据周围最近的 3 个邻居是什么品种,少数服从多数
- accuracy_score:模型说对了百分之多少
如何在 Google Colab 运行
- 打开 colab.research.google.com
- 新建笔记本
- 粘贴代码,按
Shift + Enter运行
测验题目:train_test_split的作用是什么?
- A. 把数据按行拆成训练和测试两部分 ✅
- B. 把数据按列拆成特征和标签
- C. 用来训练模型的主体函数
- D. 用来评估模型准确率的函数
第3课:过拟合与泛化 ⚠️
这是机器学习最重要的概念,理解了它你就超越了 80% 的初学者。
什么是过拟合?
生活比喻:
小明背下了所有练习题的答案,考试遇到新题就不会了 →过拟合小红理解了解题思路,遇到新题也能做对 →泛化能力强✅
三种状态对比
| 状态 | 训练集表现 | 测试集表现 | 说明 |
|---|---|---|---|
| 欠拟合 | 差 | 差 | 模型太简单,没学会 |
| 刚好 | 好 | 好 | 理想状态 ✅ |
| 过拟合 | 极好(100%) | 差 | 背下了训练数据 ⚠️ |
防止过拟合的 4 种方法
- 更多数据— 数据越多,模型越难"背答案"
- 正则化(Regularization)— 给模型加约束,不让它太复杂
- 交叉验证— 多次拆分训练/测试集,确保模型稳定
- 早停(Early Stopping)— 测试集误差开始上升时立即停止训练
判断口诀
训练集误差 ↓ 测试集误差 ↓ → 泛化能力强 ✅ 训练集误差 ↓ 测试集误差 ↑ → 过拟合!⚠️ 训练集误差 ↑ 测试集误差 ↑ → 欠拟合 ⚠️代码示例:绘制学习曲线
python
from sklearn.model_selection import learning_curve import matplotlib.pyplot as plt train_sizes, train_scores, val_scores = learning_curve( model, X, y, cv=5 ) # 两条曲线差距很大 → 过拟合 # 两条曲线都很高(误差大) → 欠拟合测验答案:B — 训练集准确率高但测试集准确率低,说明可能过拟合了