机器学习是什么
监督/无监督/强化、ML Engineer 职责。
30 分钟
机器学习是什么
这一课你将能做到
- 用一句话说清机器学习和传统编程的区别,并能向面试官完整解释
- 说出监督学习、无监督学习、强化学习各自解决什么问题,并各举一个本站场景的例子
- 亲手跑通第一个机器学习模型:根据做题记录预测一道题会不会做对
为什么要学
传统编程是「人写规则」: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))