WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
s01 AI概述 — exercise.py 练习指南
练习目标
通过补全感知机的三个核心组件,深入理解感知机的数学原理和代码实现。完成这个练习后,你将能够:
- 用一行 NumPy 代码实现阶跃激活函数(理解向量化操作)
- 实现感知机的预测方法(理解
的完整流程) - 掌握感知机权重更新规则(理解"朝正确方向微调参数"的直觉)
预备知识
在开始练习前,确保你已经理解了以下概念(参见 demo.py 代码详解 中对这些概念的详细解释):
- 感知机的数学模型:
- 阶跃函数的定义:
- 感知机学习规则:
(仅当误分类时) - 向量化运算:
np.dot()和np.where()的用法
任务清单
任务1:实现阶跃激活函数 _activation(z)
在 PerceptronExercise 类的 _activation 方法中,你需要实现阶跃函数。
- 提示:使用
np.where(condition, value_if_true, value_if_false)实现向量化判断 - 期望行为:
时输出 时输出
- 测试方法:输入
np.array([-1, 0, 1]),期望输出[-1, 1, 1]
任务2:实现预测方法 predict(X)
在 PerceptronExercise 类的 predict 方法中,你需要完成两个步骤:
- 计算线性组合
(对所有样本批量计算) - 将
通过激活函数得到类别标签
- 提示:
- 使用
np.dot(X, self.w) + self.b进行批量计算(是 矩阵, 是 向量,结果自动广播) - 调用
self._activation()将得分转换为类别
- 使用
- 需要调用的函数:
np.dot():矩阵乘法self._activation():你在任务1中实现的阶跃函数
- 期望输出:返回形状为
的数组,每个元素为 或
任务3:实现感知机权重更新规则
在 fit 方法中,找到 TODO 3 标记的位置。当条件 y_i * z <= 0 成立(即样本被误分类)时,实现权重和偏置的更新。
- 用到的公式:
- 直觉解释:
- 如果
但预测为 :把 往 的正方向推 - 如果
但预测为 :把 往 的反方向推
- 如果
- 需要调用的变量:
self.learning_rate:学习率x_i:当前样本的特征向量y_i:当前样本的真实标签self.w:权重向量(需要就地修改)self.b:偏置标量(需要就地修改)
- 期望输出:训练完成后,对线性可分数据应达到 100% 准确率,损失曲线(误分类数)单调下降至 0
验证标准
运行 python exercise.py,如果你的实现正确:
- 训练过程中的误分类数逐渐减少到 0
- 最终打印
训练集准确率: 100.00% - 显示
✓ 完美!你的感知机实现正确,所有样本分类正确。 - 可视化图显示清晰的决策边界将红蓝两类数据完全分开
源码位置
clone 后打开(相对仓库根目录):
docs/ml/foundations/ai-overview/code/exercise.py