9-1 逻辑回归与二分类算法
📌 一、 课程导入(10分钟)
在前两节课中,我们学习了线性回归,用来预测连续的数值(如房价、月薪)。
抛出新场景与问题: 假设我们学校的宿舍管理系统要新增一个“学生违纪风险预警”功能,或者电商平台要预测“用户是否会购买商品”:
- 输出的结果不再是一个具体数值,而是 “是/否”、“合格/不合格”、“违纪/正常”。
- 能不能直接用线性回归线(例如 $y = wx + b$)来输出这种“非 0 即 1”的结果?
核心矛盾: 线性回归的输出区间是 $(-\infty, +\infty)$,直接用来做分类会出现预测值超过 1 或小于 0 的不合理现象。因此,我们需要一个**“概率转换器”**,把任意数值压缩到 $0 \sim 1$ 之间的概率区间。
- 👨🏫 教师活动:在黑板或 PPT 上展示“预测房价(连续值)”与“预测考试是否及格(0/1)”的对比图,引导学生思考两者的区别。
- 🧑🎓 学生活动:对比分析两种业务场景,指出分类问题的输出只有固定的几个类别。
从连续数值预测引出离散类别预测,揭示线性回归处理分类问题时的局限,顺理成章地引出逻辑回归与 Sigmoid 函数。
📖 二、 解决问题过程(一):逻辑回归原理与 Sigmoid 函数(25分钟)
1. 从线性回归到逻辑回归
逻辑回归的核心逻辑是:先用线性模型算出一个得分,再用 Sigmoid 函数把得分转成概率。
$$\text{线性得分 } z = w_1 x_1 + w_2 x_2 + \dots + b$$2. Sigmoid 激活函数
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$- Sigmoid 函数两大特性:
- 定义域:$(-\infty, +\infty)$,值域:$(0, 1)$。完美对应“概率”概念!
- 当 $z = 0$ 时,$\sigma(z) = 0.5$。
- 当 $z > 0$ 时,$\sigma(z) > 0.5$ $\rightarrow$ 判定为类别 1;
- 当 $z < 0$ 时,$\sigma(z) < 0.5$ $\rightarrow$ 判定为类别 0。
3. 决策边界与分类规则
默认以 $0.5$ 作为临界阈值:
$$P(y=1\vert{}x) \ge 0.5 \implies \text{预测为类别 1}$$$$P(y=1\vert{}x) < 0.5 \implies \text{预测为类别 0}$$
- 👨🏫 教师活动:绘制 Sigmoid 函数的 S 型曲线图,重点演示当输入值 $z$ 变大或变小时,输出概率如何在 $(0, 1)$ 之间变化。
- 🧑🎓 学生活动:手算简单数值(如 $z=0$ 时概率为 $0.5$),理解 Sigmoid 的映射机制。
突破教学难点,让学生明白“逻辑回归本质上还是线性模型,只是外包了一层 Sigmoid 映射”,消除对分类算法的恐惧感。
💻 三、 解决问题过程(二):使用 Scikit-Learn 实现逻辑回归(25分钟)
在 Python 中,使用 sklearn.linear_model.LogisticRegression 即可完成分类模型的搭建与预测。
- 👨🏫 教师活动:在 Notebook 中演示代码,强调
.predict()与.predict_proba()的输出差异,展示概率之和恒等于 1 的特性。 - 🧑🎓 学生活动:编写并运行代码,尝试修改
X_new的数值(如改为学习 0.5 小时),观察预测概率的变化。
通过真实贴近学生生活的“考试及格预测”案例,让学生掌握工业级二分类 API 的调用,重点区分标签预测与概率预测的区别。
✍️ 四、 解决问题过程(三):课堂练习与巩固(20分钟)
📝 五、 课堂小结(5 分钟)
flowchart LR
root["📊 9-1 逻辑回归与二分类"]
subgraph C1["💡 核心概念"]
direction TB
A1["任务类型:二分类(0/1)"]
A2["核心思想:线性得分 + 概率转换"]
end
subgraph C2["📐 Sigmoid 函数"]
direction TB
B1["公式:1 / (1 + e^-z)"]
B2["值域:0 到 1 之间(映射概率)"]
B3["决策阈值:默认 0.5 分界"]
end
subgraph C3["💻 Sklearn 实现"]
direction TB
C1_node["LogisticRegression 模块"]
C2_node["predict:输出类别 0 或 1"]
C3_node["predict_proba:输出具体概率"]
end
root --> C1
root --> C2
root --> C3
style root fill:#4b6cb7,stroke:#253b6e,color:#fff,stroke-width:2px,rx:8px,ry:8px
style C1 fill:#e3f2fd,stroke:#2196f3,stroke-width:1px
style C2 fill:#fff3e0,stroke:#ff9800,stroke-width:1px
style C3 fill:#e8f5e9,stroke:#4caf50,stroke-width:1px