本课目标
用一个房价预测项目跑通 ML 工程全流程:问题定义 → 数据 → 特征 → 训练 → 评估 → 预测服务。建立全局地图,知道后面每一讲在地图上的位置。
大多数 ML 课程第一课讲线性回归的数学推导。我们不讲那个。我们第一课直接写一个能跑的房价预测——五行动手代码,一个完整的 ML 闭环。
数学在后面需要的时候补,但工程直觉现在就要建立:ML 项目不是"调一个模型"——它是一整套跟软件工程对应的流程。本讲给你这张地图。
核心内容
什么时候该用 ML?先问自己三个问题
- 规则写得完吗? 图像识别、语音转文字——规则写不完。ML。
- 规则经常变吗? 风控策略今天拦 A 明天拦 B——维护成本比训练成本高。ML。
- 有历史数据吗? 销量预测、用户分群——数据在数据库里躺着的。ML。
能用 if-else 解决的别上 ML。这是对工程成本的尊重。
ML 项目 vs 软件项目:同一套工具体系,不同的叫法
| 软件工程 | ML 工程 |
|---|---|
| 需求分析 | 问题定义:分类 / 回归 / 聚类 / 排序 |
| 代码 | 特征工程 + 模型代码 |
| 单元测试 | 评估指标(RMSE、准确率、F1) |
| CI/CD | 训练流水线 + 模型发布 |
| 监控告警 | 数据漂移、效果衰减监控 |
你不是在学一门新学科,你是在给软件工程的每一项找对应的 ML 工具。这个心理锚点能帮你快速定位"我现在卡在哪里、下一步该干什么"。
房价预测:五行代码跑通完整闭环
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestRegressor(n_estimators=100, n_jobs=-1, random_state=42)
model.fit(X_train, y_train)
rmse = mean_squared_error(y_test, model.predict(X_test), squared=False)
print(f"RMSE: {rmse:.3f}") # 约 0.5,即平均误差 5 万美元
五行代码,但每一行都对应一个工程问题:
- 为什么切分 8:2 而不是全量训练?(数据泄露——用测试集训练 = 考试前看过答案)
- 为什么选随机森林做基线而不是线性回归?(不用调参,不容易过拟合,先给个"及格线")
- RMSE 0.5 算好还是坏?(约 5 万美元误差,对于 10 万-50 万美元的房价来说偏大——可以改进,方向在后几讲)
基线思维:你职业生涯最重要的 ML 纪律
永远先跑最简单的模型作为基线。后续所有复杂方案,必须显著超越基线才有存在价值。别一上来就上深度学习——你连"比随机森林好多少"都说不清,凭什么说服别人你的复杂方案是必要的?
这个思维方式跟软件工程的"先写一个能跑的版本再优化"完全一样。你不是在学 ML,你是在用工程直觉做 ML。
本讲的全局地图
02 讲补全 scikit-learn 工具链 → 03/04 讲进入深度学习两大框架 → 05/06 讲图像与文本实战 → 07 讲评估调参与部署 → 08 讲推荐系统综合实战。每讲是一块拼图,八讲拼完你的 ML 工程能力。
动手练习
- 跑通房价预测,把
RandomForestRegressor换成LinearRegression,对比 RMSE - 从你自己工作中找一个需求,按三个标准判断该不该用 ML