🤖 阶段二:机器学习
第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 --- 训练集准确率高但测试集准确率低,说明可能过拟合了