# 从 FDE 视角重读吴恩达机器学习课程

> 新版用 Python 取代 Octave，正是客户现场常见的 notebook，每周 10 小时约两个月学完。

原文: https://fdetimes.net/zh/books-courses/andrew-ng-machine-learning-specialization-fde/

Machine Learning 原版课程上线十年后，DeepLearning.AI 重新设计了讲课和作业。团队在博客中解释，自课程首次推出以来，这一领域已有了很大变化。最明显的改动是：讲课和作业现在改用 Python，不再使用原课程的 Octave。

这看似是个小细节，但对想做前线部署工程师（FDE）的人来说很重要。在客户现场，几乎碰不到 Octave；打开的多半是装着 NumPy、scikit-learn 或 TensorFlow 的 Python notebook。学新版课程，也就顺带练熟了项目第一周就要用到的工具。

## 一套名副其实的入门课程

课程正式名称是机器学习专项课程（Machine Learning Specialization），由 [DeepLearning.AI](https://www.deeplearning.ai/courses/machine-learning-specialization/) 与 Stanford Online 联合打造，发布在 [Coursera](https://www.coursera.org/specializations/machine-learning-introduction) 上。

整套课程共三门，Coursera 定为初学者级别，预计每周 10 小时、约两个月学完。对有全职工作的开发者来说，只要保持稳定的节奏，这个进度完全吃得消。

DeepLearning.AI 称其为一套对初学者友好的三门课程，并明确表示不需要深厚的数学背景：最重要的是你想学 AI 和 ML，其余的他们会在学习过程中帮你补上。对多年没碰过线性代数的开发者来说，这是门槛最低的入口。

## 按什么顺序学？

按 1、2、3 的顺序学，但不要平均分配时间。第 1 门课教你用 NumPy 和 scikit-learn 构建 ML 模型。第 2 门课教你用 TensorFlow 训练神经网络，完成多分类任务。

第 3 门课名为 Unsupervised Learning, Recommenders, Reinforcement Learning，其中包括构建一个深度强化学习模型。如果目标是 FDE 岗位，把大部分时间投入第 1、2 门课。

第 3 门课里，推荐系统部分值得细学，因为推荐是商业企业常提的需求；强化学习部分掌握概念即可，不必深陷其中。

**要点:** 把一个简单模型吃透到根上，胜过能叫出十个复杂模型的名字。

## NumPy 部分不要偷懒

第 1 门课同时用到 NumPy 和 scikit-learn。建议不要为了尽快用上库而略过 NumPy 部分：正是这些手写的计算，让你看清模型内部在做什么。客户问模型为什么给出某个预测时，你要用原理来回答，而不是报一个函数名。

scikit-learn 则让你快速出结果。到客户那里，第一件事就是在第一天下午搭好基线，作为所有更复杂方案都必须超越的基准。

## 70% 的准确率可能毫无意义

第 2 门课用 TensorFlow 讲多分类，这类问题在部署工作中随处可见。设想一家公司要把 1,000 张客服工单自动分到 4 个类别，其中 700 张属于“账单”类。

一个偷懒的模型把所有工单都猜成“账单”，照样能拿到 70% 的准确率，却一张技术类工单都没分对。在 scikit-learn 里，几行代码就能搭出这个偷懒模型和一个真正的逻辑回归基线，并打印各类别召回率：

```python
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

lazy = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
print(lazy.score(X_test, y_test))   # 约 0.70：起跑线

model = LogisticRegression(max_iter=1000).fit(X_train, y_train)
print(classification_report(y_test, model.predict(X_test)))  # 每个类别的召回率和 F1
```

下表是一个假设结果，用来说明这个陷阱。神经网络的准确率最高，抓到的技术类工单却比逻辑回归少。

| 模型（假设） | 准确率 | “账单”类召回率 | “技术”类召回率 |
|---|---|---|---|
| DummyClassifier（预测最常见类别） | 70% | 100% | 0% |
| LogisticRegression | 81% | 93% | 47% |
| TensorFlow 神经网络 | 84% | 97% | 40% |

如果客户需要把技术类工单分给对口的人，那么尽管准确率更好看，表中的神经网络反而是更差的选择。所以 FDE 首先要问的是：各类别如何分布，客户真正需要分对的是哪一类。

一条实用规则：只有当神经网络同时胜过 DummyClassifier 和 LogisticRegression，而且不只是准确率更高，在客户关心的类别上召回率或 F1 也更高时，才推荐它。课程给了你训练网络的工具，这张对比表得靠你自己做。

## 推荐系统是客户真会提的问题

第 3 门课的推荐系统部分，把理论和 FDE 经常遇到的“给用户推荐商品”需求联系了起来。

接到推荐需求时，第一步是要求查看真实的交互数据，然后再承诺任何模型。

## 适合谁学，简历上怎么写

这门课适合想转做 FDE、从未训练过模型的后端或全栈开发者。有几年 ML 经验的人略读即可。不要在简历上只列一张证书。

不如写这样一行：“使用 TensorFlow 将工单分为 4 类，并以 scikit-learn 基线为对照”，再附上准确率和最重要类别的召回率。这行字说明你不仅会跑模型，还会对照最低基准来评估模型。

这门课不会把你变成数据科学家。但它给你足够的底子，坐在客户身边时不至于手足无措，对 FDE 来说，这已经是不小的优势。

**本周动手试试:**

- 在 Coursera 上以旁听方式注册第 1 门课，本周完成第一个 NumPy 实验
- 从当前工作中找一个带标注的数据集，例如工单或日志，搭一个 scikit-learn 基线，记录准确率、最常见类别的占比和各类别召回率
- 按“问题、模型、指标、与基线对比”的公式，为这个项目写一行简历描述

## 信源

- [Machine Learning Specialization (Coursera)](https://www.coursera.org/specializations/machine-learning-introduction)

- [Machine Learning Specialization – DeepLearning.AI](https://www.deeplearning.ai/courses/machine-learning-specialization/)

- [Andrew Ng Machine Learning Specialization (DeepLearning.AI blog)](https://www.deeplearning.ai/blog/andrew-ng-machine-learning-specialization)
