本课目标

用一个房价预测项目跑通 ML 工程全流程:问题定义 → 数据 → 特征 → 训练 → 评估 → 预测服务。建立全局地图,知道后面每一讲在地图上的位置。


大多数 ML 课程第一课讲线性回归的数学推导。我们不讲那个。我们第一课直接写一个能跑的房价预测——五行动手代码,一个完整的 ML 闭环。

数学在后面需要的时候补,但工程直觉现在就要建立:ML 项目不是"调一个模型"——它是一整套跟软件工程对应的流程。本讲给你这张地图。

核心内容

什么时候该用 ML?先问自己三个问题

  1. 规则写得完吗? 图像识别、语音转文字——规则写不完。ML。
  2. 规则经常变吗? 风控策略今天拦 A 明天拦 B——维护成本比训练成本高。ML。
  3. 有历史数据吗? 销量预测、用户分群——数据在数据库里躺着的。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 工程能力。

动手练习

  1. 跑通房价预测,把 RandomForestRegressor 换成 LinearRegression,对比 RMSE
  2. 从你自己工作中找一个需求,按三个标准判断该不该用 ML