CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
机器学习入门/课时/机器学习是什么
RawBlame
课时目录12 节

机器学习入门

  1. 01机器学习是什么
  2. 02数学基础
  3. 03Python 与数据栈
  4. 04数据预处理
  5. 05监督学习
  6. 06无监督学习
  7. 07模型评估
  8. 08Scikit-learn 工作流
  9. 09深度学习基础
  10. 10NLP 与 Transformer
  11. 11TensorFlow 与 PyTorch
  12. 12综合练习

机器学习是什么

监督/无监督/强化、ML Engineer 职责。

30 分钟

机器学习是什么

这一课你将能做到

  1. 用一句话说清机器学习和传统编程的区别,并能向面试官完整解释
  2. 说出监督学习、无监督学习、强化学习各自解决什么问题,并各举一个本站场景的例子
  3. 亲手跑通第一个机器学习模型:根据做题记录预测一道题会不会做对

为什么要学

传统编程是「人写规则」:if 答对基础题多 and 平均用时短 then 掌握。规则越写越多、越写越乱,换个场景就失效,而且你根本说不清「掌握」到底由哪几条规则决定。机器学习把思路反过来:把历史数据(几千条做题记录)和结果(做对没做对)一起喂给算法,让它自己找出规律——这就是「从数据中学习」。

本站有两个真实需求正适合机器学习:根据用户做题记录预测「每个知识点的掌握度」,根据全站作答数据给「题目估难度」。这两件事手写规则很难做好。面试中「介绍一个你的机器学习项目」,答案就从这一课开始长出来。

先建立图像

传统编程:  规则 + 数据  →  答案
机器学习:  数据 + 答案  →  规则(模型)

本站例子:
输入特征                          标签
┌─────────┬─────────┬──────┐     ┌────────┐
│ 做题数   │ 平均用时 │ 知识点 │     │ 是否答对 │
├─────────┼─────────┼──────┤     ├────────┤
│ 12      │ 45s     │ 循环  │ ──▶ │   1    │
│ 3       │ 180s    │ 多线程│ ──▶ │   0    │
│ 8       │ 60s     │ 集合  │ ──▶ │   1    │
└─────────┴─────────┴──────┘     └────────┘
模型学到的「规则」就是一个函数 f(做题数, 用时, 知识点) ≈ 答对概率

跟着做

步骤 1:准备环境

Python 3.11+,建虚拟环境并安装本课最小依赖:

python -m venv .venv
.venv\Scripts\activate              # Windows;macOS/Linux 用 source .venv/bin/activate
pip install scikit-learn numpy

步骤 2:感受「规则 vs 学习」的差别

新建 intro_demo.py:

from sklearn.linear_model import LogisticRegression
import numpy as np

# 每行特征:[做题数, 平均用时(秒)],标签:1=答对 0=答错
X = np.array([
    [12, 45], [8, 60], [10, 50], [15, 40],   # 练得多、速度快 → 做对
    [3, 180], [2, 200], [4, 160], [1, 220],  # 练得少、卡壳久 → 做错
])
y = np.array([1, 1, 1, 1, 0, 0, 0, 0])

model = LogisticRegression()
model.fit(X, y)                    # 训练:从数据里学规律

# 预测一个新用户:做题 9 次、平均用时 55 秒
prob = model.predict_proba([[9, 55]])[0, 1]
print(f"答对概率: {prob:.2f}")     # 约 0.9 左右

运行 python intro_demo.py,输出答对概率。你没有写任何 if 规则,模型从 8 条数据里自己学出了「做题多且快 → 大概率答对」。

步骤 3:看看模型学到了什么

print("系数:", model.coef_.round(3))
print("截距:", model.intercept_.round(3))

系数含义:做题数每 +1,答对的对数几率上升;用时每增加,对数几率下降。规则被模型「写」出来了——这就是简单模型的可解释性。

步骤 4:给模型出 4 组新样本

X_new = np.array([[9, 55], [2, 190], [14, 42], [5, 120]])
print(model.predict(X_new))                       # [1 0 1 1]
print(model.predict_proba(X_new)[:, 1].round(2))

最后一组(做题 5 次、用时 120 秒)处于模糊地带,概率接近 0.5——真实系统里这种情况就该先推简单题巩固,而不是硬判「掌握」。

讲清楚要点

  1. 模型是函数,训练是拟合:模型就是 f(x) → y,训练过程用数据找一组合适的参数,让预测和真实答案的差距最小。
  2. 监督 / 无监督 / 强化三大类:有标准答案(标签)是监督学习(预测掌握度);没有标签、从数据里自己找结构是无监督(把题目自动聚成难度档);靠试错和奖励学习是强化(自适应出题策略)。
  3. 分类 vs 回归:预测离散结果(做对/做错、掌握/未掌握)叫分类;预测连续数值(难度分 0-100、预计用时)叫回归。同一个业务问题两种建模都可能成立,取决于产品要什么输出。
  4. 特征决定上限,模型只是逼近它:用时长、做题数、知识点这些特征选得好,简单模型也能很准;特征拉胯,再强的模型也救不回来。
  5. 先跑通,再谈精度:8 条数据就能把「训练→预测」闭环走通,几千条数据才谈得上调精度。初学者最容易犯的错是一开始就追求完美。

你可能会懵的地方

  • 机器学习、AI、深度学习是什么关系? AI 是最大集合(还包括搜索、专家系统等);机器学习是 AI 的子集(从数据中学习);深度学习又是机器学习的子集(用多层神经网络)。本课程到 ml-dl 之前都是传统机器学习,表格数据上它至今仍是首选。
  • 模型和算法有什么区别? 算法是训练过程(怎么找到参数,比如梯度下降),模型是训练产物(找到参数后的那个函数)。LogisticRegression 是算法类,model.fit(...) 之后内存里的 model 对象才是模型。
  • 数据要多少才够? 没有绝对数,经验上每个特征至少几十到几百条样本起步。本站每天产生的做题记录远超需求,真正的瓶颈通常是数据质量而不是数量。
  • 为什么第一课就用 LogisticRegression? 它是最简单的有解释性的分类模型,一行 fit 一行 predict,能完整演示机器学习闭环,而且是面试必考题。理解它,后面所有模型都是它的变体或组合。
  • 传统编程什么时候反而更好? 规则明确且稳定时直接写 if,比如「密码长度必须 ≥ 8」。机器学习适合规则说不清楚、但数据管够的场景。不要用大炮打蚊子。

错法对照

错法问题正解
一上来就问「用什么神经网络」跳过问题定义先明确:预测什么?有没有标签?分类还是回归?
把所有列都塞给模型无关特征稀释信号挑和结果有相关/因果关系的特征
训练集上看到 99% 就宣布成功可能是背题不是学习留出测试集,用没见过的数据验证
用全站平均正确率当个人掌握度抹掉了个体差异按用户特征建模,预测个人概率
脏数据直接 fit垃圾进垃圾出先查缺失、异常值(ml-preprocess 详讲)

卡点急救

  1. ModuleNotFoundError: No module named 'sklearn':虚拟环境没激活或装错了地方。确认命令行提示符前面有 (.venv),再执行 pip install scikit-learn。
  2. predict_proba 输出看不懂:返回两列 [P(答错), P(答对)],取 [:, 1] 才是答对概率。
  3. 中文路径报错:Python 脚本和数据文件放在纯英文路径下,避开编码坑。

面试常问

  • 什么是机器学习?和传统编程的核心区别? 传统编程是人写规则处理数据得到答案;机器学习是用「数据 + 答案」自动学出规则(模型)。核心区别在规则是学出来的还是写出来的,学出来的规则能随数据分布变化而更新。
  • 监督学习和无监督学习的区别?举个例子。 监督学习有标签,如用历史做题记录预测是否答对;无监督没有标签,目标是发现数据结构,如把题目按作答表现聚成难度档。本站预测掌握度属于监督学习,题目自动分组属于无监督。
  • 分类和回归怎么选? 看预测目标:离散类别用分类(掌握/未掌握),连续数值用回归(难度分、预计用时)。产品需要概率就用分类的概率输出,需要一个分数就用回归。

自测三问

  1. 「数据 + 答案 → 规则」对应机器学习流程里哪两个环节?
  2. 预测「用户在知识点 X 的掌握度分数(0-100)」是分类还是回归?
  3. model.fit 和 model.predict 各干了什么?

小结一句话

机器学习用数据自动学出规则:特征进、预测出;监督/无监督/强化三大类,分类/回归两种输出——先把闭环跑通,再谈精度。

延伸

  • scikit-learn 官方文档
  • 下一课:ml-math 数学基础——不搞公式推导,只建立向量、概率、梯度下降三个直觉。
加载本节练习…
下一课 →数学基础