<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>机器学习基础 : 写写记记</title>
    <link>https://blog.zkmhy.top/ml/index.html</link>
    <description>机器学习基础</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://blog.zkmhy.top/ml/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>1-1环境配置与认知启蒙</title>
      <link>https://blog.zkmhy.top/ml/01-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/01-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：理解 WinPython 的免安装特性与目录结构；掌握 PATH 环境变量的作用与多 Python 版本共存的原理；熟悉 VS Code、Spyder、Jupyter Notebook 三种开发工具的核心功能定位。 ⚙️ 能力目标：能够独立完成 WinPython 的解压安装与环境验证；能够使用三种方法（py launcher、改 PATH、绝对路径）指定 Python 解释器；能够在 Jupyter Notebook 中熟练运用核心快捷键和魔法命令完成基础数据可视化任务。 💡 素养目标：建立“环境即基础设施”的专业意识，养成遇到 import 报错时首先检查解释器路径的排查习惯；理解工具链协作的价值，为后续机器学习项目开发奠定规范化的工作流基础。 【重点与难点】&#xA;🟢 教学重点：WinPython 的安装与环境验证；Jupyter Notebook 的核心操作（单元格模式、快捷键、魔法命令）；机器学习第一个程序（KNN 分类与可视化）的完整运行。 🟡 教学难点：多 Python 版本共存的原理与 PATH 环境变量的优先级机制；理解 VS Code、Spyder、Jupyter 三者如何共用同一个 Python 解释器。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 主题：机器学习课程的环境准备</description>
    </item>
    <item>
      <title>3-1 NumPy数据的容器及数据集划分</title>
      <link>https://blog.zkmhy.top/ml/03-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/03-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：&#xA;理解 NumPy 与 Python 原生列表的区别； 深刻掌握 ndarray 的核心数据类型（type）、数据元素类型（dtype）与空间维度逻辑结构（shape/ndim）； 掌握 np.array()、np.arange()、np.zeros() 和 np.ones() 等常用创建方法； 掌握二维数组的索引与精准切片语法； 理解数据集划分（训练集与测试集）的必要性，掌握 train_test_split 的基本用法。 ⚙️ 能力目标：&#xA;能够熟练使用常用创建函数构建指定形状与初始值的 ndarray； 能够运用二维切片准确分离数据集中的“特征集 $X$”与“标签集 $y$”； 能够结合 train_test_split 规范地将数据集划分为训练集与测试集，并正确核对维度形状（shape）。 💡 素养目标：&#xA;通过性能对比实验，体会 NumPy 向量化计算相较于原生循环的巨大效率优势； 建立数据预处理中的“防过拟合（防作弊）”工程意识与数据流空间维度思维。 【重点与难点】&#xA;🟢 教学重点：ndarray 的维度逻辑结构；常用创建函数特性；二维数组切片语法 (data[行, 列])；使用 train_test_split 进行数据拆分。 🟡 教学难点：利用负数索引与步长进行的高维数据分离；train_test_split 返回的 4 个变量顺序与 shape 维度的对应关系。 📌 一、 课程导入（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 对比实验：杂物箱 vs 专用零件盒</description>
    </item>
    <item>
      <title>3-2 NumPy数据的变形与定位</title>
      <link>https://blog.zkmhy.top/ml/03-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/03-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：理解 shape 属性含义；掌握 reshape 形态变换规则及 -1 的特殊用法；掌握 argmax 与 argmin 在维度定位中的作用。 ⚙️ 能力目标：能够灵活运用 reshape 调整特征数据的维度（如单特征矩阵转换与图像展平）；能够利用 argmax 获取分类模型概率输出的最大索引。 💡 素养目标：建立严谨的“维度匹配”观念，提升解决实际机器学习报错（如维度不匹配）的调试能力与逻辑思维能力。 【重点与难点】&#xA;🟢 教学重点：shape 属性与 reshape() 改变数组形态；-1 自动推导维度的用法；argmax() 获取最大值索引。 🟡 教学难点：理解 reshape(-1, 1) 将一维数组转换为二维列向量的场景与必要性；flatten() 与 ravel() 的展平机制。 📌 一、 课程导入（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 复习抽测（5分钟） 提问：如何从 $100 \times 4$ 的数据集 data 中切片提取出特征集 $X$ 和标签 $y$？ 学生回答：X = data[:, :-1]，y = data[:, -1]。 场景引入：遇到机器学习常见的“维度报错” 场景 1：图片是 $28 \times 28$ 的二维方格，但神经网络模型只接受一维的 784 个像素特征值。 场景 2：使用单特征预测房价（只有一个特征“面积”），把一维数组 [85, 120, 60] 直接传给 scikit-learn 算法模型时，系统抛出报错：Expected 2D array, got 1D array instead。 引入课题：如何自由操控数据的“形态”，以及如何在多维度中“精准定位”？ 👨‍🏫 教师活动：在 Jupyter 中演示将一维数组传给算法库时的报错提示，让学生看懂 Expected 2D array 的关键信息。 🧑‍🎓 学生活动：观察报错日志，体会“数据总数没变，但数据形态不对”引发的问题，产生解决问题的需求。 以真实报错作为问题驱动，避免枯燥的语法讲解，直接将“形态变换”与机器学习算法的强依赖性绑定，提升学习针对性。</description>
    </item>
    <item>
      <title>3-3 NumPy数据的统计与广播</title>
      <link>https://blog.zkmhy.top/ml/03-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/03-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：掌握常用统计函数（sum, mean, std）的使用；深刻理解 axis（轴）的计算方向规则；理解广播机制（Broadcasting）的自动补全拉伸原理。 ⚙️ 能力目标：能够正确运用 axis 参数完成二维数据集的按列/按行统计；能够使用 NumPy 纯代码实现机器学习中关键的数据预处理操作——Z-score 数据标准化（$X_{\text{scaled}} = \frac{X - \mu}{\sigma}$）。 💡 素养目标：建立“数据降维与特征压缩”的抽象逻辑，体会 NumPy 广播机制对代码精简与效率提升的巨大价值，提升数据预处理的工程实践素养。 【重点与难点】&#xA;🟢 教学重点：统计函数中 axis（轴）的定向计算规则（axis=0 跨行按列求值，axis=1 跨列按行求值）；广播机制的适用条件。 🟡 教学难点：对 axis 维度的空间想象与“沿轴折叠，该维度消失”的理解；矩阵与向量广播相减时维度的自动对齐过程。 📌 一、 课程导入（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 真实场景引入：不同量纲带来的“算法灾难” 假设有一个二手房数据集，特征 1 为“房屋面积”（数值范围 50200 ㎡），特征 2 为“房间数”（数值范围 15 间）。 提问：在计算两套房子之间的“相似度/距离”时，面积数值偏大（如差值 50）会完全掩盖房间数（如差值 2）的作用！ 解决办法：数据标准化（Z-score Normalization），把所有特征压缩到均值为 0、标准差为 1 的同一量纲下： $$X_{\text{scaled}} = \frac{X - \mu}{\sigma}$$</description>
    </item>
    <item>
      <title>NumPy速查手册</title>
      <link>https://blog.zkmhy.top/ml/03-09/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/03-09/index.html</guid>
      <description>📦 一、创建数组 方法 说明 示例 np.array(list) 从列表创建 np.array([1,2,3]) → [1 2 3] np.arange(start, stop, step) 类似 range，返回数组 np.arange(0, 10, 2) → [0 2 4 6 8] np.linspace(start, stop, num) 等间隔取 num 个点 np.linspace(0, 1, 5) → [0. 0.25 0.5 0.75 1. ] np.zeros(shape) 全零数组 np.zeros((2,3)) → 2×3 全 0 np.ones(shape) 全一数组 np.ones((2,3)) → 2×3 全 1 np.eye(N) 单位矩阵 np.eye(3) → 3×3 单位阵 np.full(shape, value) 填充指定值 np.full((2,2), 7) → [[7,7],[7,7]] np.empty(shape) 未初始化（垃圾值） 通常不用，速度最快 1import numpy as np 2 3print(np.arange(5)) # [0 1 2 3 4] 4print(np.linspace(0, 1, 3)) # [0. 0.5 1. ] 5print(np.zeros((2, 2))) # [[0. 0.] [0. 0.]] 6print(np.eye(3)) # 3x3 单位矩阵 🔍 二、数组属性 属性 说明 示例 ndarray.shape 维度元组 arr.shape → (3, 4) ndarray.ndim 维度数 arr.ndim → 2 ndarray.size 元素总数 arr.size → 12 ndarray.dtype 数据类型 arr.dtype → dtype(&#39;float64&#39;) ndarray.T 转置（对二维） arr.T 1arr = np.array([[1,2,3],[4,5,6]]) 2print(arr.shape) # (2, 3) 3print(arr.size) # 6 4print(arr.T) # [[1 4] [2 5] [3 6]] ✏️ 三、索引与切片 操作 说明 示例 arr[i, j] 索引单个元素 arr[0, 1] → 第0行第1列 arr[i] 取第 i 行 arr[1] → 第二行 arr[:, j] 取第 j 列 arr[:, 0] → 第一列 arr[start:stop:step] 切片 arr[0:2, 1:3] arr[arr &gt; 5] 布尔索引 返回大于5的元素 arr[[0,2], [1,3]] 花式索引 取 (0,1) 和 (2,3) 位置 1arr = np.arange(12).reshape(3, 4) 2print(arr) 3# [[ 0 1 2 3] 4# [ 4 5 6 7] 5# [ 8 9 10 11]] 6 7print(arr[1, 2]) # 6 8print(arr[:, 2]) # [ 2 6 10] 9print(arr[arr &gt; 5]) # [ 6 7 8 9 10 11] 10print(arr[[0,2], [1,3]]) # [1, 11] → (0,1)和(2,3) 🔢 四、形状操作 方法 说明 示例 reshape(new_shape) 改变形状（返回新数组） arr.reshape(2,6) resize(new_shape) 改变形状（可修改原数组） arr.resize(2,6) flatten() 展平为一维（返回副本） arr.flatten() ravel() 展平（返回视图，更快） arr.ravel() np.concatenate((a,b), axis=0) 拼接数组 按行或列拼接 np.vstack((a,b)) 垂直堆叠 行数增加 np.hstack((a,b)) 水平堆叠 列数增加 np.split(arr, indices) 分割数组 1a = np.arange(6).reshape(2, 3) 2b = np.array([[7,8,9]]) 3print(np.vstack((a, b))) # 垂直拼接 4# [[0 1 2] 5# [3 4 5] 6# [7 8 9]] 7 8print(np.hstack((a, b.T))) # 水平拼接（注意维度匹配） 9# [[0 1 2 7] 10# [3 4 5 8]] ➕ 五、数学运算（逐元素） 运算 说明 示例 + - * / 四则运算 arr + 2 ** 幂 arr ** 2 np.sqrt(arr) 平方根 np.exp(arr) 指数 np.log(arr) 自然对数 np.sin(arr) / np.cos(arr) 三角函数 np.abs(arr) 绝对值 np.clip(arr, min, max) 截断 1arr = np.array([1, 4, 9]) 2print(np.sqrt(arr)) # [1. 2. 3.] 3print(arr ** 2) # [ 1 16 81] 4print(np.exp(arr)) # [ 2.718 54.598 8103.08] 📊 六、统计方法 方法 说明 示例 np.sum(arr, axis) 求和 np.sum(arr) 或 arr.sum() np.mean(arr, axis) 均值 np.median(arr) 中位数 np.std(arr, axis) 标准差 np.var(arr, axis) 方差 np.min(arr, axis) / np.max(arr, axis) 最值 np.argmin(arr, axis) / np.argmax(arr, axis) 最值索引 np.cumsum(arr, axis) 累积和 np.cumprod(arr, axis) 累积积 np.percentile(arr, q) 百分位数 1arr = np.array([[1,2],[3,4]]) 2print(arr.sum()) # 10 3print(arr.mean(axis=0)) # [2. 3.] 列均值 4print(arr.std()) # 1.118... 5print(np.argmax(arr)) # 3（展平索引） 🔀 七、排序与搜索 方法 说明 示例 np.sort(arr, axis) 排序（返回新数组） np.sort(arr, axis=1) arr.sort(axis) 原地排序 np.argsort(arr) 返回排序索引 np.where(condition, x, y) 条件选择 np.unique(arr) 去重并排序 np.in1d(arr, values) 检查成员 1arr = np.array([3,1,4,2]) 2print(np.sort(arr)) # [1 2 3 4] 3print(np.argsort(arr)) # [1 3 0 2] 排序后的原索引 4 5print(np.where(arr &gt; 2, arr, -1)) # [-1 -1 4 3] 6print(np.unique([1,2,2,3])) # [1 2 3] 🧮 八、线性代数（np.linalg） 方法 说明 示例 np.dot(a, b) / a @ b 矩阵乘法 np.linalg.inv(A) 矩阵求逆 np.linalg.det(A) 行列式 np.linalg.eig(A) 特征值和特征向量 np.linalg.solve(A, b) 解线性方程组 np.linalg.norm(x) 范数 1A = np.array([[1,2],[3,4]]) 2B = np.array([[5,6],[7,8]]) 3print(A @ B) # [[19 22] [43 50]] 4print(np.linalg.det(A)) # -2.0 🎲 九、随机数（np.random） 方法 分布 rand(d0, d1) 均匀 [0,1) randn(d0, d1) 标准正态 randint(low, high, size) 均匀整数 normal(loc, scale, size) 正态（指定均值和标准差） uniform(low, high, size) 均匀（指定范围） choice(a, size, replace) 从 a 中抽样 shuffle(arr) 打乱 permutation(arr) 返回打乱后的新数组 seed(n) 设置随机种子 1np.random.seed(42) 2print(np.random.rand(3)) # [0.3745 0.9507 0.732] 3print(np.random.randint(0,10,size=(2,3))) # 2x3 整数 💾 十、输入输出 方法 说明 np.save(&#39;file.npy&#39;, arr) 保存为二进制 .npy np.load(&#39;file.npy&#39;) 加载 .npy np.savetxt(&#39;file.csv&#39;, arr, delimiter=&#39;,&#39;) 保存为文本（CSV） np.loadtxt(&#39;file.csv&#39;, delimiter=&#39;,&#39;) 加载文本 🔧 十一、常用工具 方法 说明 示例 np.tile(arr, reps) 平铺重复 np.tile([1,2], 3) → [1,2,1,2,1,2] np.repeat(arr, repeats) 重复元素 np.repeat([1,2], 2) → [1,1,2,2] np.roll(arr, shift) 循环移位 np.transpose(arr, axes) 转置（更灵活） np.copy(arr) 深拷贝 📝 速查技巧 广播机制：形状不同的数组运算时，会自动扩展维度（需满足规则）。 视图 vs 副本：reshape、ravel、切片通常返回视图（修改会影响原数组），而 flatten、copy 返回副本。 轴（axis1）：axis=0 表示按行（垂直方向），axis=1 表示按列（水平方向），二维中。 axis（发音：/ˈæksɪs/）的核心含义是“轴”或“中心线”。 ↩︎</description>
    </item>
    <item>
      <title>4-1 Pandas核心容器与数据读取</title>
      <link>https://blog.zkmhy.top/ml/04-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/04-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：&#xA;理解 Pandas 在 NumPy 基础上的扩展优势（引入带标签的维度）；&#xA;掌握一维 Series 与二维 DataFrame 的底层结构及 Index 索引对象的特性；&#xA;掌握使用 pd.read_csv() 和 pd.read_excel() 读取外部数据集的语法与常用参数（encoding、sep、index_col）；&#xA;掌握数据查看与保存函数（head()、tail()、info()、to_csv()）。&#xA;⚙️ 能力目标：&#xA;能够熟练从本地读取各种格式（CSV/Excel/TXT）的真实数据集；&#xA;能够利用 .shape、.dtypes、.index、.columns 快速核查并诊断数据的结构；&#xA;能够区分并熟练提取单列 Series 与多列 DataFrame。&#xA;💡 素养目标：&#xA;建立“数据先入库、结构先核查”的数据预处理工程规范意识；&#xA;体会 Pandas 在处理异构表格数据时的便利性，激发数据分析的学习兴趣。&#xA;【重点与难点】&#xA;🟢 教学重点：Series 与 DataFrame 的逻辑结构与联系；常用数据读取函数（read_csv/read_excel）；数据结构的身份证属性（.dtypes、.columns、.shape）。 🟡 教学难点：Index 对象的不可变性与显式/隐式索引区别；文件读取时的编码报错（UnicodeDecodeError）诊断与解决；单列提取后数据类型从 DataFrame 退化为 Series 的空间维度感知。 📌 一、 课程导入（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 真实场景痛点：NumPy 遇到“异构表格”怎么办？ 上一章学习的 NumPy 虽然算得快，但要求所有数据必须是同一种纯数字类型（如全 float），且只有无意义的行列序号（0, 1, 2…）。 现实中的数据表格（如学生成绩单、二手房数据）既有文本（姓名、城市），又有数字（年龄、价格），且带有表头（“面积”、“售价”）。 数据分析神器 Pandas 闪亮登场 Pandas = Panel Data（面板数据），底层建立在 NumPy 之上。 核心优势：给数组带上了“行标签（Index）”和“列标签（Columns）”，完美对标 Excel 表格形态。 👨‍🏫 教师活动：展示一张真实的 Excel 学生数据表，对比纯 NumPy 矩阵与 Pandas 表格的视觉差异；用“带标签的超强 Excel”比喻讲解 Pandas 的定位。 🧑‍🎓 学生活动：观察对比，思考如果用 NumPy 存储“姓名+年龄+成绩”会遇到什么类型转换问题，体会 Pandas 引入的必要性。 从现实业务数据“多类型混合、含标题栏”的痛点出发，自然引出 Pandas，帮助学生理解 NumPy 与 Pandas 的分工：NumPy 搞底层矩阵计算，Pandas 搞上层表格数据分析。</description>
    </item>
    <item>
      <title>4-2 DataFrame基本与数据清洗</title>
      <link>https://blog.zkmhy.top/ml/04-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/04-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：&#xA;掌握 DataFrame 的精准索引定位（loc 显式标签索引 vs iloc 隐式位置索引）；&#xA;掌握条件过滤（布尔索引）、数据排序（sort_values）与表合并（concat/merge）；&#xA;掌握缺失值诊断与处理（isna()、fillna()、dropna()）及重复数据剔除（drop_duplicates()）；&#xA;理解连续特征离散化（pd.cut()）与哑变量转换（pd.get_dummies()）在机器学习中的作用。&#xA;⚙️ 能力目标：&#xA;能够熟练使用 loc/iloc 进行复杂条件的表格数据筛选与切片；&#xA;能够独立对脏数据集完成“去重 ➔ 补缺 ➔ 特征离散化/哑变量处理”的预处理全流程。&#xA;💡 素养目标：&#xA;建立“脏数据不能直接入模型”的数据质量与规范清洗意识；&#xA;体会逻辑条件筛选与特征工程的巧妙联动，提升工程解决问题的综合素养。&#xA;【重点与难点】&#xA;🟢 教学重点：loc 与 iloc 的区别；布尔条件筛选（如 df[df[&#39;售价&#39;] &gt; 300]）；缺失值填补 fillna()；哑变量 pd.get_dummies()。 🟡 教学难点：多条件的布尔索引逻辑组合（使用 &amp; 和 | 并加括号）；merge 连接方式（inner/outer/left）的物理意义；哑变量转换后的特征维度变化。 📌 一、 课程导入（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 真实场景痛点：拿到的数据能直接喂给机器学习模型吗？ 上节课我们学会了把 CSV 读进 DataFrame，但现实中的原始数据充满了“垃圾”：有缺失的空项、重复录入的行、杂乱的文本分类（如“男/女”、“北京/上海”）。 计算机模型只认识数字，且极度害怕 NaN（空值）。 数据预处理的两大核心任务 任务一：数据切片与组装（怎么把想要的数据筛选出来？怎么把多张表拼在一起？） 任务二：数据清洗与特征打磨（去重、补缺、数值化，打造适合模型的干净矩阵）。 👨‍🏫 教师活动：展示一张带有 NaN 和文本分类的真实二手房数据集，提出问题：“如果不处理直接让模型计算房价，会发生什么？” 🧑‍🎓 学生活动：思考并回答问题，意识到必须先对数据进行清洗和转换，才能进行后续的数学建模。 从真实数据集的“脏乱差”痛点切入，明确本节课的核心任务，帮助学生建立从“表格操作”到“模型输入预处理”的工程桥梁。</description>
    </item>
    <item>
      <title>4-3 DataFrame高级分析与特征提取</title>
      <link>https://blog.zkmhy.top/ml/04-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/04-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：&#xA;掌握数据描述性统计分析函数（describe()、mean()、value_counts()）；&#xA;深度理解并掌握“ split-apply-combine（拆分-应用-合并）”的 groupby() 分组运算及数据透视表（pivot_table()）；&#xA;掌握时间序列转换与提取（pd.to_datetime()、.dt.year/.dt.month/.dt.dayofweek）；&#xA;掌握文本向量化字符串操作（.str.contains()、.str.split()）与 category 分类类型的优化应用。&#xA;⚙️ 能力目标：&#xA;能够熟练运用 groupby 与 pivot_table 完成多维度的业务数据汇总与交叉分析；&#xA;能够从原始“交易时间”或“文本描述”列中提取出可用于机器学习建模的衍生特征（如“是否周末”、“文本关键词包含”）。&#xA;💡 素养目标：&#xA;建立从简单表格呈现提升到多维业务数据挖掘的宏观分析思维；&#xA;体会高效数据类型（category）对系统内存优化的重要性，培养严谨的算力优化意识。&#xA;【重点与难点】&#xA;🟢 教学重点：groupby() 分组聚合机制；pivot_table() 交叉分析；时间序列 .dt 提取；字符串 .str 向量化操作。 🟡 教学难点：groupby 聚合后多重索引（MultiIndex）的平铺重置（reset_index()）；利用时间与文本提取机器学习衍生特征逻辑。 📌 一、 课程导入（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 真实业务需求：除了清洗数据，我们如何从表格中挖掘规律？ 经过前面几节课的学习，我们已经能把表格洗得很干净。但老板或业务部门经常问： “不同城市的平均房价和最高房价是多少？” “不同性别的学生在各科目的成绩表现有什么差异？” “用户更喜欢在周末下单还是工作下单？交易时间里蕴含着什么特征？” 从“表格管理”升维到“数据挖掘与高级特征提取” 本节课将掌握 Pandas 的两大终极杀招：分组透视（分组统计） 与 特殊数据类型（时间/文本）的衍生特征提取。 👨‍🏫 教师活动：展示一张包含“成交时间（如 2026-06-18 14:30:00）”和“用户地址”的电商订单表，引导学生思考如何把一串时间字符串变成机器学习能看懂的“季度”、“月份”或“是否周末”。 🧑‍🎓 学生活动：积极思考并回答，体会到直接拿原始时间字符串无法计算，必须进行高阶类型转换与特征提取。 从业务统计与特征工程的实际需求出发，引入分组聚合与特殊类型处理，帮助学生完成从“数据操作者”到“数据挖掘者”的思维转变。</description>
    </item>
    <item>
      <title>Pandas速查手册</title>
      <link>https://blog.zkmhy.top/ml/04-09/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/04-09/index.html</guid>
      <description>1. 数据创建与读取 (Data I/O) 函数 / 方法 功能说明 核心参数说明 代码示例 pd.DataFrame() 创建二维数据框表格 data, index, columns, dtype df = pd.DataFrame({&#39;A&#39;: [1, 2], &#39;B&#39;: [&#39;x&#39;, &#39;y&#39;]}) pd.Series() 创建一维带标签数组 data, index, name, dtype s = pd.Series([10, 20, 30], name=&#39;score&#39;) pd.read_csv() 读取 CSV / 文本文件 filepath, sep, encoding, usecols, parse_dates df = pd.read_csv(&#39;data.csv&#39;, encoding=&#39;utf-8&#39;, usecols=[&#39;id&#39;, &#39;age&#39;]) pd.read_excel() 读取 Excel 工作簿 io, sheet_name, header, usecols, skiprows df = pd.read_excel(&#39;sales.xlsx&#39;, sheet_name=&#39;2023_Q1&#39;) pd.read_sql() 通过 SQL 查询读取数据库数据 sql, con, index_col, params df = pd.read_sql(&#34;SELECT * FROM users WHERE age &gt; 18&#34;, conn) pd.read_json() 读取 JSON 格式字符串/文件 path_or_buf, orient, lines df = pd.read_json(&#39;data.json&#39;, orient=&#39;records&#39;) 2. 数据探索与概览 (Exploration &amp; Inspection) 函数 / 方法 功能说明 核心参数说明 代码示例 df.head() / df.tail() 查看前 N 行 / 后 N 行数据 n (默认 5) df.head(10) df.tail(3) df.info() 打印数据框内存、类型及非空值统计 verbose, memory_usage df.info() df.describe() 计算数值列描述性统计指标（均值、分位数等） percentiles, include, exclude df.describe(include=&#39;all&#39;) df.shape / df.dtypes 查看数据框行列维度 / 各列数据类型 属性（无参数） rows, cols = df.shape print(df.dtypes) s.value_counts() 统计序列中各唯一值出现的频次与占比 normalize=True/False, dropna=False, bins df[&#39;category&#39;].value_counts(normalize=True) s.unique() / s.nunique() 获取唯一值数组 / 唯一值数量计数 dropna=True unique_cities = df[&#39;city&#39;].unique() num = df[&#39;city&#39;].nunique() 3. 数据选择与筛选 (Indexing &amp; Filtering) 函数 / 方法 功能说明 核心参数说明 代码示例 df[&#39;col&#39;] / df[[&#39;A&#39;,&#39;B&#39;]] 选择单列（返回 Series）或多列（DataFrame） 列名或列名列表 sub_df = df[[&#39;name&#39;, &#39;age&#39;, &#39;gender&#39;]] df.loc[] 根据标签名称进行行列切片与选择 [行标签/条件, 列标签] df.loc[df[&#39;age&#39;] &gt; 20, [&#39;name&#39;, &#39;salary&#39;]] df.iloc[] 根据整数位置索引进行切片与选择 [行索引位置, 列索引位置] df.iloc[0:10, 0:3] 布尔逻辑筛选 使用逻辑运算符进行多条件组合筛选 &amp; (与), | (或), ~ (非) df[(df[&#39;age&#39;] &gt;= 18) &amp; (df[&#39;status&#39;] == &#39;Active&#39;)] df.query() 使用字符串表达式进行高效条件查询 expr, inplace=False df.query(&#39;age &gt; 18 and city in [&#34;BJ&#34;, &#34;SH&#34;]&#39;) s.isin() 筛选列值在指定列表/集合中的行 values df[df[&#39;department&#39;].isin([&#39;IT&#39;, &#39;HR&#39;])] s.str.contains() 文本列正则/模糊子串匹配筛选 pat, case=True, regex=True, na=False df[df[&#39;email&#39;].str.contains(&#39;@gmail\.com$&#39;, na=False)] 4. 数据清洗与处理 (Data Cleaning) 函数 / 方法 功能说明 核心参数说明 代码示例 df.isna() / df.notna() 检测是否为缺失值/非缺失值（返回布尔矩阵） 无 null_counts = df.isna().sum() df.dropna() 删除包含缺失值的行或列 axis, how=&#39;any&#39;/&#39;all&#39;, subset, thresh df = df.dropna(subset=[&#39;user_id&#39;, &#39;email&#39;]) df.fillna() 填充/替换数据中的缺失值 value, method=&#39;ffill&#39;/&#39;bfill&#39;, axis df[&#39;score&#39;] = df[&#39;score&#39;].fillna(df[&#39;score&#39;].median()) df.drop_duplicates() 查找并删除重复数据行 subset, keep=&#39;first&#39;/&#39;last&#39;/False df = df.drop_duplicates(subset=[&#39;order_id&#39;], keep=&#39;first&#39;) df.rename() 重命名行索引或列名称 mapper, columns, index, inplace df = df.rename(columns={&#39;old_name&#39;: &#39;new_name&#39;}) df.astype() 显式转换序列或全表的数据类型 dtype, copy, errors=&#39;raise&#39;/&#39;ignore&#39; df[&#39;age&#39;] = df[&#39;age&#39;].astype(&#39;int64&#39;) df.replace() 替换指定的值或正则表达式匹配项 to_replace, value, regex df[&#39;gender&#39;] = df[&#39;gender&#39;].replace({&#39;M&#39;: &#39;Male&#39;, &#39;F&#39;: &#39;Female&#39;}) 5. 数据转换与衍生列 (Transformation) 函数 / 方法 功能说明 核心参数说明 代码示例 df.apply() 对数据框的行（axis=1）或列（axis=0）应用自定义函数 func, axis, raw, result_type df[&#39;total&#39;] = df.apply(lambda r: r[&#39;price&#39;] * r[&#39;qty&#39;], axis=1) s.map() 根据字典、函数或映射关系转换 Series 值 arg, na_action df[&#39;status_code&#39;] = df[&#39;status&#39;].map({&#39;OK&#39;: 200, &#39;ERR&#39;: 500}) pd.cut() 将连续数值变量按区间划分为离散分箱（Equal-width） x, bins, labels, right, include_lowest df[&#39;age_group&#39;] = pd.cut(df[&#39;age&#39;], bins=[0, 18, 60, 100], labels=[&#39;Child&#39;, &#39;Adult&#39;, &#39;Senior&#39;]) pd.qcut() 按分位数将连续变量划分为样本量等同的区间（Equal-frequency） x, q, labels df[&#39;income_quartile&#39;] = pd.qcut(df[&#39;income&#39;], q=4, labels=[&#39;Q1&#39;, &#39;Q2&#39;, &#39;Q3&#39;, &#39;Q4&#39;]) df.sort_values() 按照一列或多列的值进行排序 by, ascending, na_position df = df.sort_values(by=[&#39;dept&#39;, &#39;salary&#39;], ascending=[True, False]) pd.get_dummies() 将分类变量转换为独热编码（One-Hot / Dummy 变量） data, columns, prefix, drop_first df = pd.get_dummies(df, columns=[&#39;category&#39;], drop_first=True) 6. 分组聚合与数据透视 (GroupBy &amp; Pivot) 函数 / 方法 功能说明 核心参数说明 代码示例 df.groupby() 根据指定字段对数据进行拆分分组 by, as_index=True/False, sort grouped = df.groupby(&#39;department&#39;) groupby().agg() 对分组后的各字段应用一个或多个聚合操作 func, *args, **kwargs df.groupby(&#39;dept&#39;).agg({&#39;salary&#39;: [&#39;mean&#39;, &#39;max&#39;], &#39;age&#39;: &#39;median&#39;}) groupby().transform() 计算分组统计量并广播扩展返回与原表同等行数的结果 func df[&#39;dept_avg_sal&#39;] = df.groupby(&#39;dept&#39;)[&#39;salary&#39;].transform(&#39;mean&#39;) pd.pivot_table() 创建电子表格风格的数据透视表 values, index, columns, aggfunc, fill_value, margins pd.pivot_table(df, values=&#39;sales&#39;, index=&#39;region&#39;, columns=&#39;year&#39;, aggfunc=&#39;sum&#39;, margins=True) pd.crosstab() 计算两个或多个因子的频数交叉汇总表 index, columns, values, aggfunc, normalize pd.crosstab(df[&#39;gender&#39;], df[&#39;passed&#39;], normalize=&#39;index&#39;) 7. 数据合并与拼接 (Merge &amp; Concatenate) 函数 / 方法 功能说明 核心参数说明 代码示例 pd.merge() 类似 SQL 的主外键多表关联操作 left, right, how=&#39;inner&#39;/&#39;left&#39;/&#39;right&#39;/&#39;outer&#39;, on, left_on, right_on df_all = pd.merge(df_orders, df_users, on=&#39;user_id&#39;, how=&#39;left&#39;) pd.concat() 沿着纵轴（行）或横轴（列）物理堆叠拼接多个 DataFrame objs, axis=0/1, join=&#39;outer&#39;/&#39;inner&#39;, ignore_index=True df_combined = pd.concat([df_2022, df_2023], axis=0, ignore_index=True) df.join() 基于索引 (Index) 快速合并两个 DataFrame other, on, how=&#39;left&#39;/&#39;outer&#39;, lsuffix, rsuffix df_joined = df1.join(df2, lsuffix=&#39;_left&#39;, rsuffix=&#39;_right&#39;) 8. 时间序列处理 (Time Series / DateTime) 函数 / 方法 功能说明 核心参数说明 代码示例 pd.to_datetime() 将文本或数字列转换为标准的 datetime64 类型 arg, format, errors=&#39;coerce&#39;/&#39;raise&#39; df[&#39;date&#39;] = pd.to_datetime(df[&#39;date_str&#39;], format=&#39;%Y-%m-%d&#39;) dt 属性访问器 提取日期的年、月、日、星期、季度等属性 .dt.year / .dt.month / .dt.day / .dt.day_name() df[&#39;year&#39;] = df[&#39;date&#39;].dt.year df[&#39;weekday&#39;] = df[&#39;date&#39;].dt.day_name() pd.date_range() 生成固定频率的连续时间索引/序列 start, end, periods, freq=&#39;D&#39;/&#39;M&#39;/&#39;H&#39;/&#39;B&#39; dates = pd.date_range(start=&#39;2023-01-01&#39;, periods=12, freq=&#39;MS&#39;) df.resample() 时间序列重采样（如按月、按周重采样降采样或升采样） rule (‘D’, ‘W’, ‘M’, ‘Q’), on df.set_index(&#39;date&#39;).resample(&#39;M&#39;)[&#39;sales&#39;].sum() s.shift() 将序列中的数据向上或向下偏移 N 个周期（常用于计算同比/环比） periods, freq, fill_value df[&#39;prev_sales&#39;] = df[&#39;sales&#39;].shift(1) df[&#39;growth&#39;] = df[&#39;sales&#39;] - df[&#39;prev_sales&#39;] s.rolling() 创建滑动窗口以计算移动平均、滑动求和等指标 window, min_periods, center df[&#39;ma_7&#39;] = df[&#39;sales&#39;].rolling(window=7).mean() 9. 数据输出与导出 (Data Export) 函数 / 方法 功能说明 核心参数说明 代码示例 df.to_csv() 导出数据至 CSV 格式文件 path_or_buf, index=False, encoding=&#39;utf-8-sig&#39; df.to_csv(&#39;result.csv&#39;, index=False, encoding=&#39;utf-8-sig&#39;) df.to_excel() 导出数据至 Excel 工作薄 excel_writer, sheet_name, index=False df.to_excel(&#39;result.xlsx&#39;, sheet_name=&#39;Summary&#39;, index=False) df.to_json() 导出数据为 JSON 格式文件或字符串 path_or_buf, orient=&#39;records&#39;/&#39;split&#39;/&#39;dict&#39; df.to_json(&#39;result.json&#39;, orient=&#39;records&#39;, force_ascii=False) df.to_sql() 将 DataFrame 直接写入数据库表中 name, con, if_exists=&#39;fail&#39;/&#39;replace&#39;/&#39;append&#39;, index df.to_sql(&#39;target_table&#39;, con=engine, if_exists=&#39;append&#39;, index=False)</description>
    </item>
    <item>
      <title>5-1 Matplotlib 基础数据可视化</title>
      <link>https://blog.zkmhy.top/ml/05-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/05-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：掌握 Matplotlib 的导包与极简绘图流程；理解 plot() 函数的核心样式参数；掌握画布、坐标轴、图例、标题及网格等图表元素的配置方法。 ⚙️ 能力目标：能够独立根据给定的数据序列，运用合适的颜色、线型和标记绘制双线对比折线图，并配置规范的图表文本说明。 💡 素养目标：培养规范的数据表达习惯与代码编写严谨性，建立数据可视化呈现的审美与信息传递意识。 【重点与难点】&#xA;🟢 教学重点：plt.plot() 美化参数（颜色、线型、标记）的组合使用；图表基础辅助元素（标题、坐标轴标签、图例、网格）的完整渲染。 🟡 教学难点：多线条绘制时的参数对应与 legend() 图例映射；Windows 环境下中文字体乱码的全局配置。 📌 一、 课程导入（5分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 1. 极简代码展示： 在 Jupyter Notebook 中运行仅用 4 行代码生成的极简折线图：</description>
    </item>
    <item>
      <title>5-2 分析特征关系常用图形</title>
      <link>https://blog.zkmhy.top/ml/05-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/05-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：掌握散点图（Scatter Plot）和折线图（Line Plot）的绘制原理及应用场景；理解相关性与趋势变化的可视化表达。 ⚙️ 能力目标：能够熟练使用 ax.scatter() 与 ax.plot()，根据数据特征调整颜色、大小、透明度及标记样式，进行多维关系表达。 💡 素养目标：培养通过图表挖掘变量间潜在规律的敏感度，树立“用数据说话、用图形揭示规律”的科学探索精神。 【重点与难点】&#xA;🟢 教学重点：散点图（相关性分析）与折线图（趋势分析）的选型；透明度（alpha）、映射颜色（c）与尺寸（s）的多维展示。 🟡 教学难点：散点图中气泡图（多维数据）的映射技巧；折线图中的数据排序与连续趋势呈现。 📌 一、 课程导入（5分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 给出两组实际业务数据：</description>
    </item>
    <item>
      <title>5-3 分析特征内部数据状态常用图形</title>
      <link>https://blog.zkmhy.top/ml/05-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/05-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：掌握直方图、条形图、饼图和箱线图的作用；明确五数概括（最小值、Q1、中位数、Q3、最大值）与异常值（IQR 规则）的统计含义。 ⚙️ 能力目标：能够根据单变量特征的类型（数值型 vs 类别型），熟练运用 hist()、bar()、pie() 和 boxplot() 绘制分布与占比图表。 💡 素养目标：建立严谨的数据分布观察习惯，提升通过数据分布发现数据质量问题（如偏态、离群点）的洞察力。 【重点与难点】&#xA;🟢 教学重点：直方图与条形图的区别；箱线图的结构特征及异常值识别；各种图表在探索性数据分析（EDA）中的应用。 🟡 教学难点：直方图中组距（bins）选择对数据形态的影响；箱线图 IQR 离群点计算逻辑与图表呈现。 📌 一、 课程导入（5分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 拿出一个班级的“考试成绩”数据和“学生性别比例”数据。 提问：</description>
    </item>
    <item>
      <title>Matplotlib 速查手册</title>
      <link>https://blog.zkmhy.top/ml/05-09/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/05-09/index.html</guid>
      <description>0. 🚀 最简画图（一分钟启动） 适用场景：刚进 Jupyter，不想记任何复杂参数，只想立刻画个图看看数据长什么样。&#xA;1import matplotlib.pyplot as plt 2 3# === 1. 准备最简单的一串数据 === 4x = [1, 2, 3, 4, 5] 5y = [2, 4, 1, 5, 3] 6 7# === 2. 画图：核心 plot 方法（同时控制 点、线、颜色） === 8# marker=&#39;o&#39; -&gt; 画空心圆点 9# linestyle=&#39;--&#39; -&gt; 画虚线（两个减号） 10# color=&#39;r&#39; -&gt; 红色 (r=red, b=blue, g=green, k=black) 11# markersize=8 -&gt; 点的大小 12plt.plot(x, y, marker=&#39;o&#39;, linestyle=&#39;--&#39;, color=&#39;r&#39;, markersize=8) 13 14# === 3. 控制横竖坐标的显示范围 === 15plt.xlim(0, 6) # X轴显示 0 到 6 16plt.ylim(0, 6) # Y轴显示 0 到 6 17 18# === 4. 控制横竖坐标的刻度（显示哪些数字） === 19plt.xticks([1, 2, 3, 4, 5]) # X轴上只显示 1,2,3,4,5 20plt.yticks([0, 2, 4, 6]) # Y轴上只显示 0,2,4,6 21 22# === 5. 展示图形 === 23plt.show() 🎯 核心参数速查（最简版） 你要控制什么 写在哪里 常用选项（敲黑板） 画点 marker= &#39;o&#39;（圆）、&#39;^&#39;（三角）、&#39;*&#39;（星号）、&#39;s&#39;（方块） 画线 linestyle= &#39;-&#39;（实线）、&#39;--&#39;（虚线）、&#39;:&#39;（点线） 改颜色 color= &#39;r&#39;（红）、&#39;b&#39;（蓝）、&#39;g&#39;（绿）、&#39;k&#39;（黑）、&#39;#FF0000&#39;（自定义） 横坐标范围 plt.xlim(起点, 终点) 例：plt.xlim(-1, 10) 纵坐标范围 plt.ylim(起点, 终点) 例：plt.ylim(0, 1) 横坐标刻度 plt.xticks([列表]) 例：plt.xticks([0, 5, 10]) 纵坐标刻度 plt.yticks([列表]) 例：plt.yticks([-1, 0, 1]) 💡 动手试试：把上面代码中的 linestyle=&#39;--&#39; 改成 linestyle=&#39;-&#39;，或者把 color=&#39;r&#39; 改成 color=&#39;b&#39;，运行看看效果，这就是 Matplotlib 最底层的操作逻辑！</description>
    </item>
    <item>
      <title>6-1特征缩放——标准化与归一化</title>
      <link>https://blog.zkmhy.top/ml/06-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/06-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解为什么机器学习需要特征缩放（解决“大数吃小数”问题）。 掌握标准化（Standardization）的公式与 StandardScaler 的使用。 掌握归一化（MinMaxScaler）的公式与 MinMaxScaler 的使用。 清晰辨别标准化和归一化的区别及各自适用场景。 ⚙️ 能力目标： 能使用 sklearn.preprocessing 中的 API 对数值型特征进行缩放。 能根据算法类型（KNN/回归/神经网络）选择合适的缩放方式。 💡 素养目标： 建立“特征工程优先于模型调参”的职业习惯。 破除对数学公式的恐惧，建立用代码解决实际问题的信心。 【重点与难点】&#xA;🟢 教学重点：标准化与归一化的代码实现（StandardScaler 与 MinMaxScaler）以及在 sklearn 管道中的标准写法。 🟡 教学难点：理解为什么标准化保留了数据的“相对形状”（分布），而归一化改变了数据的“比例”；以及在距离计算（KNN）中缩放的必要性。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 情景模拟：食堂打菜“数据歧视”</description>
    </item>
    <item>
      <title>6-2分类编码、二值化与非线性转换</title>
      <link>https://blog.zkmhy.top/ml/06-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/06-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解为什么机器学习模型不能直接处理“文本”或“类别”数据。 掌握 LabelEncoder（标签编码）和 OneHotEncoder / pd.get_dummies（独热编码）的区别与使用。 了解二值化（Binarizer）的作用——把数值变为“有/无”开关。 了解非线性转换（np.log1p）的作用——压缩极端大数（如房价、收入）的分布。 ⚙️ 能力目标： 能准确判断一个特征是“有序类别”还是“无序类别”，并选择正确的编码方式。 能使用 Pandas 的 get_dummies 一键完成独热编码。 💡 素养目标： 建立“机器学习很笨，只认数字，我们要帮它翻译”的工程思维。 避免“把颜色编码成 1,2,3 导致模型认为红色大于蓝色”的经典错误。 【重点与难点】&#xA;🟢 教学重点：pd.get_dummies 独热编码的原理与代码实现（应对性别、颜色、地区等文本特征）。 🟡 教学难点：为什么要避免把“颜色”直接映射为 1,2,3 ？（即：无序分类变量绝对不能有大小顺序）。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 复习上节课：我们学会了把“体重（kg）”和“时长（分钟）”缩放到同一量级。</description>
    </item>
    <item>
      <title>6-3缺失值插补与特征衍生（多项式特征）</title>
      <link>https://blog.zkmhy.top/ml/06-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/06-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 掌握识别 Pandas 中缺失值（NaN）的方法：isnull() 和 info()。 掌握三种缺失值填充策略：均值填充（数值型）、中位数填充（防异常值）、众数填充（类别型）。 掌握 SimpleImputer 和 fillna 的使用。 理解什么是“特征交互”，掌握使用 PolynomialFeatures 生成平方项和交叉项。 ⚙️ 能力目标： 能根据数据分布特征（是否有极端值）合理选择均值/中位数插补。 能利用多项式特征将线性模型“变强”，解决“特征不足”的困境。 💡 素养目标： 树立“数据不完美是常态，预处理就是修修补补”的职业心态。 体会“特征工程”的魅力——好特征比好算法更重要。 【重点与难点】&#xA;🟢 教学重点： 使用 SimpleImputer 进行均值/中位数/众数填充的标准代码模板。 使用 PolynomialFeatures 生成交互项（如 长×宽 = 面积）的逻辑。 🟡 教学难点： 数据泄露陷阱：填充缺失值时，只能用训练集的统计数据（如均值）去填充测试集，绝对不能先用全部数据算均值再分集（这是作弊）。 多项式特征会导致特征数量爆炸（维度灾难），需要配合后面的正则化使用。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 情景模拟：老师收作业，有人没交怎么办？</description>
    </item>
    <item>
      <title>6-4降维（PCA与SVD）数据瘦身</title>
      <link>https://blog.zkmhy.top/ml/06-04/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/06-04/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解什么是“维度灾难”——特征太多带来的计算负担和过拟合风险。 掌握 PCA（主成分分析）的核心思想：将高维数据投影到低维，保留最大方差（信息量）。 了解 SVD 是 PCA 背后的数学计算引擎（知道名字和用途即可）。 掌握 sklearn.decomposition.PCA 的基本使用，尤其是 n_components 参数的设置。 ⚙️ 能力目标： 能使用 PCA 将 4 维的鸢尾花数据降维到 2 维，并用散点图可视化。 能根据业务需求（保留 95% 信息）自动确定降维维度。 💡 素养目标： 建立“降维不是丢弃信息，而是提炼精华”的工程思维。 体会可视化对于理解高维数据的重要意义。 【重点与难点】&#xA;🟢 教学重点： PCA 的核心理念：找主成分（数据分散程度最大的方向）。 使用 PCA(n_components=2) 实现二维可视化。 🟡 教学难点： 理解“方差最大”与“保留信息”之间的关系（数据越分散，区分度越高，信息越丰富）。 SVD 与 PCA 的关系：只需要告诉学生“SVD 是 PCA 的底层数学解算器”，不推公式。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 情景模拟：体检报告太详细，医生看花眼了！</description>
    </item>
    <item>
      <title>6-5 有监督学习与无监督学习</title>
      <link>https://blog.zkmhy.top/ml/06-05/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/06-05/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解有监督学习的核心定义：数据有标签（有标准答案），目标是“预测”。 理解无监督学习的核心定义：数据无标签（无标准答案），目标是“发现结构”。 掌握有监督学习的两个子任务：回归（预测连续值） 和 分类（预测离散类别）。 掌握无监督学习的两个子任务：聚类（自动分组） 和 降维（数据压缩）。 ⚙️ 能力目标： 能根据业务场景（是否有历史答案、预测目标是什么）快速判断该用哪类算法。 能将本课程后续的算法（线性回归、逻辑回归、KNN、决策树、K-Means、PCA）正确归类到对应阵营。 💡 素养目标： 建立“拿到一个业务问题，先判断有监督还是无监督”的职业习惯。 理解“数据决定问题上限，算法只是逼近上限”的行业名言。 【重点与难点】&#xA;🟢 教学重点： 区分有监督（有Y）和无监督（无Y）的本质标准。 回归与分类的区别：输出是“数值”（房价）还是“类别”（猫/狗）。 🟡 教学难点： 半监督学习概念的简单提及（有些数据有标签，有些没有，但职高阶段了解即可）。 无监督学习中的“降维”与“聚类”各自解决什么问题（聚类是分组，降维是压缩）。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 情景模拟：新来的实习生 vs 老员工</description>
    </item>
    <item>
      <title>6.6 模型评估：训练集、测试集与交叉验证</title>
      <link>https://blog.zkmhy.top/ml/06-06/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/06-06/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解为什么要将数据集划分为训练集和测试集（防止“作弊”评估）。 掌握 train_test_split 的标准用法与 random_state 的作用。 理解K折交叉验证（K-Fold Cross-Validation） 的核心思想：用多轮“模拟考”取代单次“期末考”，使评估更稳定。 了解分层交叉验证、分组交叉验证和时间序列交叉验证的存在（知道名字和适用场景）。 ⚙️ 能力目标： 能使用 sklearn.model_selection.train_test_split 正确划分数据集。 能使用 cross_val_score 一键完成 K 折交叉验证。 💡 素养目标： 建立“模型评估必须用未见过的数据”的铁律意识（杜绝数据泄露）。 理解“评估稳定比评估好看更重要”的工程哲学。 【重点与难点】&#xA;🟢 教学重点： train_test_split 的使用（参数 test_size, random_state）。 K折交叉验证的概念与 cross_val_score 的使用。 🟡 教学难点： 理解“K折交叉验证”为什么能比单次划分更可靠（减少偶然性）。 分层交叉验证（StratifiedKFold）在分类问题中的必要性。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 情景模拟：考前做模拟卷，到底怎么测才准？</description>
    </item>
    <item>
      <title>8-1 线性回归（Linear Regression）</title>
      <link>https://blog.zkmhy.top/ml/08-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/08-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解分类与回归的核心区别（离散 vs 连续）。 理解线性回归的核心思想（找到一条最优趋势线/超平面）。 掌握权重 $w$、偏置 $b$ 与均方误差（$MSE$）损失函数的概念。 ⚙️ 能力目标： 能够使用 Python 的 scikit-learn 库构建一维及多维线性回归模型。 能够根据训练好的模型对新数据进行预测分析。 💡 素养目标： 培养用“数据建模思维”解决现实问题的能力。 建立对机器学习算法“从数学原理到工程落地”的严谨科学态度。 【重点与难点】&#xA;🟢 教学重点：线性回归方程的物理意义与 sklearn 模型训练的标准全流程。 🟡 教学难点：损失函数（$MSE$）的数学含义与梯度下降法（优化算法）的直观理解。 📌 一、 课程导入：我们如何做预测？（10 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 在现实生活中，我们经常需要对未来的事物做出预测：</description>
    </item>
    <item>
      <title>8-2 机器学习模型评估（回归指标）</title>
      <link>https://blog.zkmhy.top/ml/08-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/08-02/index.html</guid>
      <description>🎯 教学目标与重难点… 📚 知识目标：&#xA;理解模型评估在机器学习全流程中的作用与意义。 掌握回归算法常用的四大核心评估指标：$MAE$（平均绝对误差）、$MSE$（均方误差）、$RMSE$（均方根误差）与 $R^2$（决定系数）。 理解 $R^2$ 的物理意义（0~1 之间的得分，越接近 1 越好）。 ⚙️ 能力目标：&#xA;能够熟练使用 sklearn.metrics 模块中的评估函数对线性回归模型进行效果打分。 能够结合业务场景选择合适的评估指标，分析模型的预测偏差。 💡 素养目标：&#xA;培养严谨的科学测试与验证思维，建立“用客观数据说话”的工程意识。 🟢 教学重点：$MAE$、$MSE$、$RMSE$ 与 $R^2$ 的定义、公式含义及 sklearn 代码实现。&#xA;🟡 教学难点：$R^2$（决定系数）的直观理解（与基准模型/均值模型的对比）及其在实际业务中的判断标准。&#xA;📌 一、 课程导入（10分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 在上节课《8-1 线性回归》中，我们学会了用 model.fit(X, y) 拟合出一条预测线。</description>
    </item>
    <item>
      <title>8-3糖尿病病情预测实战</title>
      <link>https://blog.zkmhy.top/ml/08-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/08-03/index.html</guid>
      <description>第三次课（90分钟）：真正可用！糖尿病病情预测实战 教学定位： 成就感爆发课！ 丢掉前面的底层数学手工代码，正式用 scikit-learn 工业级武器大刀阔斧解决实际问题。 对应课本： 8.3 实战（糖尿病预测） ⏱️ 90分钟时间分配与知识点： 【15分钟】认识数据（第7章数据集的具象化）：&#xA;知识点： 特征（X：年龄、性别、血压等）与标签（y：一年后病情发展的量化指标）。&#xA;实战技巧： 带学生用 Pandas 的 pd.read_csv() 或者 sklearn.datasets.load_diabetes() 把表格打印出来。告诉学生：机器学习不神秘，本质就是算这个 Excel 表格。&#xA;【40分钟】工业级 5 步法套路（核心成果落地）：&#xA;知识点： train_test_split 划分数据集、LinearRegression 模型实例化、fit() 训练、predict() 预测、mean_squared_error 评估。&#xA;备课心法： 这就是我之前说的万能填空模板。在前 25 分钟，让全班跟着你把这 5 步敲完、跑通。后 15 分钟，教他们看评估分数。</description>
    </item>
    <item>
      <title>9-1 逻辑回归与二分类算法</title>
      <link>https://blog.zkmhy.top/ml/09-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/09-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解“回归”与“分类”任务的核心区别（连续值预测 vs 离散类别预测）。 理解 Sigmoid 函数的数学形式与物理意义（将任意实数映射到 $0 \sim 1$ 的概率区间）。 掌握逻辑回归（Logistic Regression）的算法原理与决策边界概念。 ⚙️ 能力目标： 能够熟练使用 sklearn.linear_model.LogisticRegression 搭建二分类模型。 能够使用 .predict() 获取分类结果，以及使用 .predict_proba() 获取概率值。 💡 素养目标： 建立概率思维，理解现实生活中“风险预测与决策分类”的数学本质。 【重点与难点】&#xA;🟢 教学重点：Sigmoid 激活函数的作用、逻辑回归代码实现及概率输出（predict_proba）。 🟡 教学难点：为什么线性模型加上 Sigmoid 后就能做分类？概率阈值（0.5）与决策边界的理解。 📌 一、 课程导入（10分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 在前两节课中，我们学习了线性回归，用来预测连续的数值（如房价、月薪）。</description>
    </item>
    <item>
      <title>9-2 逻辑回归模型评估（分类指标）</title>
      <link>https://blog.zkmhy.top/ml/09-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/09-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解分类模型与回归模型评估逻辑的区别（预测离散标签 vs 预测连续数值）。 掌握混淆矩阵（Confusion Matrix）的四个基本概念：TP、TN、FP、FN。 掌握四大核心分类评估指标：准确率（Accuracy）、精确率（Precision）、召回率（Recall）与 F1 分数（F1-Score）。 ⚙️ 能力目标： 能够熟练使用 sklearn.metrics 模块输出分类模型评估报告（classification_report）与混淆矩阵。 能够根据医疗诊断、垃圾邮件、金融风控等不同业务场景选择合适的评估侧重点（如偏重 Precision 还是 Recall）。 💡 素养目标： 建立全面的“测试与评估”视角，避免掉入“只看准确率”的盲目自信陷阱。 【重点与难点】&#xA;🟢 教学重点：混淆矩阵结构、精确率（Precision）与召回率（Recall）的计算公式及其 sklearn 代码实现。 🟡 教学难点：精确率与召回率的矛盾与平衡（Trade-off），以及针对“样本不平衡问题”时准确率失效的原因分析。 📌 一、 课程导入（10分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 在上节课《9-1 逻辑回归》中，我们学会了用逻辑回归预测“是/否”或“0/1”的二分类问题。</description>
    </item>
    <item>
      <title>9-3 决策阈值与ROC-AUC评估</title>
      <link>https://blog.zkmhy.top/ml/09-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/09-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解决策阈值（Decision Threshold）对分类预测结果的影响机制。 掌握决策阈值调整过程中 Precision 与 Recall 的反向权衡关系（Trade-off）。 掌握 ROC 曲线的构成要素（FPR 与 TPR/Recall）以及 AUC 指标的物理意义。 ⚙️ 能力目标： 能够熟练使用 model.predict_proba() 提取预测概率值，并实现自定义阈值的逻辑截断。 能够使用 sklearn.metrics 中的 roc_curve 和 roc_auc_score 绘制 ROC 曲线并计算 AUC 分数。 能够根据安全预警（防漏报）或极准干预（防误报）等实际业务需求，灵活选择并调整模型的分类策略。 💡 素养目标： 建立“业务驱动算法”的工程视角，理解模型调优没有绝对优劣，只有是否契合实际场景需求。 【重点与难点】&#xA;🟢 教学重点：决策阈值对 P/R 的调控逻辑、predict_proba() 代码实战、ROC 曲线两轴的含义与 AUC 评估标准。 🟡 教学难点：理解 ROC 曲线在所有阈值下全局评估模型的物理意义，以及假阳性率（FPR）与真阳性率（TPR）的动态变化原理。 📌 一、 课程导入（10分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 在上节课《9-2 分类模型评估》中，我们回答了课后拓展思考题：在医疗诊断或风险预警等场景中，“漏诊（FN）”的后果远比“误诊（FP）”更严重，我们更追求高的 Recall（召回率）。</description>
    </item>
    <item>
      <title>10-1 线性模型的扩展（一）：多项式回归与过拟合</title>
      <link>https://blog.zkmhy.top/ml/10-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/10-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解为什么线性模型无法拟合非线性数据（欠拟合）。 掌握多项式回归的核心思想：将非线性问题转化为线性问题。 理解过拟合的含义和危害——模型“背答案”而不是“真学习”。 掌握 PolynomialFeatures 的使用方法。 ⚙️ 能力目标： 能使用 PolynomialFeatures + LinearRegression 实现多项式回归。 能通过调整多项式阶数（degree）观察模型从欠拟合到过拟合的变化过程。 💡 素养目标： 建立“好模型不是训练集得分越高越好”的工程思维。 理解“模型复杂度”与“泛化能力”之间的权衡关系。 【重点与难点】&#xA;🟢 教学重点： 多项式回归的代码实现（PolynomialFeatures + 管道）。 过拟合的可视化识别：训练集完美、测试集崩盘。 🟡 教学难点： 理解“非线性问题线性化”的思想——把 \( x^2 \) 当作一个新特征。 理解过拟合的本质：模型记住了噪声，而不是规律。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 复习回顾：上一章我们学了线性回归，它用一条直线 \( y = wx + b \) 来拟合数据。</description>
    </item>
    <item>
      <title>10-2 线性模型的扩展（二）：岭回归与 Lasso——正则化防过拟合</title>
      <link>https://blog.zkmhy.top/ml/10-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/10-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解正则化的核心思想：在损失函数中增加惩罚项，约束模型参数。 掌握岭回归（L2 正则化）的原理与代码实现。 掌握 Lasso（L1 正则化）的原理与代码实现。 理解岭回归与 Lasso 的核心区别：Lasso 能让部分系数变为 0，实现特征选择。 ⚙️ 能力目标： 能使用 Ridge 和 Lasso 替代 LinearRegression 来训练模型。 能通过调整 alpha 参数控制正则化强度。 能根据业务需求选择 Ridge（保留所有特征）或 Lasso（自动筛选特征）。 💡 素养目标： 建立“好模型需要约束”的工程哲学——自由越多，风险越大。 理解“特征选择”在实际项目中的价值——简化模型、提高可解释性。 【重点与难点】&#xA;🟢 教学重点： 岭回归与 Lasso 的代码实现（Ridge、Lasso）。 alpha 参数的作用——越大惩罚越重，模型越简单。 🟡 教学难点： 理解“惩罚项”如何约束参数——为什么加了惩罚就能防过拟合。 理解 L1 和 L2 的区别——为什么 Lasso 能让系数变成 0。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 复习上节课的“惨状”：</description>
    </item>
    <item>
      <title>11-1 几何与空间距离（一）：K-最近邻 (KNN)——物以类聚</title>
      <link>https://blog.zkmhy.top/ml/11-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/11-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解 KNN 的核心思想：物以类聚，人以群分——一个样本的类别由其最近的 K 个邻居投票决定。 掌握欧氏距离的计算公式（二维空间）。 理解 K 值对模型的影响：K 太小容易过拟合，K 太大容易欠拟合。 掌握 KNeighborsClassifier 的基本使用。 ⚙️ 能力目标： 能使用 sklearn.neighbors.KNeighborsClassifier 训练分类模型。 能通过调整 n_neighbors 参数观察决策边界的变化。 能理解为什么 KNN 必须配合标准化（StandardScaler） 使用。 💡 素养目标： 建立“距离”在机器学习中的重要性认知。 强化“数据预处理直接影响模型效果”的工程意识（联动第6章）。 【重点与难点】&#xA;🟢 教学重点： KNN 的“投票”机制——少数服从多数。 KNN 的代码实现与 K 值调参。 标准化对 KNN 的关键影响（联动 6.1.3 归一化）。 🟡 教学难点： 理解 KNN 是“懒惰学习”（Lazy Learning）——没有显式的训练过程，而是记住所有数据。 理解“距离”在高维空间中的局限性（维度灾难的直观感受）。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 情景模拟：如何判断一个人的“圈子”？</description>
    </item>
    <item>
      <title>11-2 几何与空间距离（二）：线性判别分析 (LDA)——有监督降维</title>
      <link>https://blog.zkmhy.top/ml/11-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/11-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 理解 LDA 的核心思想：有监督的降维——将数据投影到一条直线上，使不同类别的点尽可能分开。 掌握 LDA 的优化目标：类间距离大，类内距离小。 理解 LDA 与 PCA 的本质区别：PCA 是无监督（不看标签），LDA 是有监督（利用标签）。 掌握 LinearDiscriminantAnalysis 的基本使用。 ⚙️ 能力目标： 能使用 LinearDiscriminantAnalysis 进行降维和分类。 能根据业务需求判断该用 PCA 还是 LDA。 💡 素养目标： 理解“有标签的信息是宝贵的”——LDA 利用标签信息比 PCA 更“聪明”。 建立“不同问题选不同工具”的工程思维。 【重点与难点】&#xA;🟢 教学重点： LDA 的核心思想：投影后“类间分散，类内聚集”。 LDA 与 PCA 的对比（有监督 vs 无监督）。 🟡 教学难点： 理解“投影”的几何意义——把高维数据“压”到一条直线上。 理解“类间大、类内小”这个优化目标如何让分类更容易。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 复习回顾：上节课我们学了 KNN，它用“距离”来做分类。第 6 章我们还学了 PCA（主成分分析），它用“方差最大”来做无监督降维。</description>
    </item>
    <item>
      <title>11-3 几何与空间距离（三）：综合实战——KNN 与 LDA 对比实验</title>
      <link>https://blog.zkmhy.top/ml/11-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/11-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标： 巩固 KNN 和 LDA 的核心原理与代码实现。 掌握完整机器学习项目的标准流程：数据加载 → 预处理 → 降维 → 建模 → 评估。 理解不同算法在同一数据集上的表现差异及其原因。 ⚙️ 能力目标： 能独立完成从数据加载到模型对比的完整实验。 能根据评估结果（准确率、训练时间）选择更优模型。 能用可视化图表（降维散点图）解释模型效果差异。 💡 素养目标： 建立“没有最好的算法，只有最适合的算法”的工程认知。 强化“对比实验”意识——基于数据评估结果选择模型。 【重点与难点】&#xA;🟢 教学重点： 完整流程的代码实现（本节课的核心产出）。 KNN、LDA、PCA 三种方法在同数据集上的对比分析。 🟡 教学难点： 理解 LDA 降维后 KNN 准确率提升的原因（去除了噪声和冗余特征）。 理解 PCA 和 LDA 降维后 KNN 表现差异的原因（有监督 vs 无监督）。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 复习前两课时内容：</description>
    </item>
    <item>
      <title>12-01 规则与组合力量：决策树与随机森林（含 XGBoost 视野扩展）</title>
      <link>https://blog.zkmhy.top/ml/12-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/12-01/index.html</guid>
      <description></description>
    </item>
    <item>
      <title>13-01 边界的最大化：支持向量机 (SVM)</title>
      <link>https://blog.zkmhy.top/ml/13-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/13-01/index.html</guid>
      <description></description>
    </item>
    <item>
      <title>14-01 概率与贝叶斯思想：朴素贝叶斯 (Naive Bayes)</title>
      <link>https://blog.zkmhy.top/ml/14-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/14-01/index.html</guid>
      <description></description>
    </item>
    <item>
      <title>15-01 无监督学习（一）：聚类算法 (K-Means 等)</title>
      <link>https://blog.zkmhy.top/ml/15-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/15-01/index.html</guid>
      <description></description>
    </item>
    <item>
      <title>16-01 无监督学习（二）：数据降维 (PCA 与 SVD 奇异值分解)</title>
      <link>https://blog.zkmhy.top/ml/16-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/16-01/index.html</guid>
      <description></description>
    </item>
    <item>
      <title>17-1 神经网络基础：逻辑回归与激活函数</title>
      <link>https://blog.zkmhy.top/ml/17-01/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/17-01/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：理解逻辑回归与线性回归的本质区别；掌握 Sigmoid 函数的数学形式及其将线性输出映射为概率的机制；熟悉二元交叉熵损失函数的定义及其与均方误差的对比；了解 tanh、ReLU 等常见激活函数的数学形式与适用场景。 ⚙️ 能力目标：能够从零推导逻辑回归的梯度下降更新公式；能够使用 NumPy 实现逻辑回归的损失函数计算与梯度下降训练；能够用 matplotlib 可视化 Sigmoid、tanh、ReLU 等激活函数的曲线形态。 💡 素养目标：建立“神经网络即函数近似器”的数学直觉；理解激活函数在引入非线性中的核心作用；培养从线性模型向神经网络过渡的思维框架。 【重点与难点】&#xA;🟢 教学重点：逻辑回归的模型形式（\( \hat{y} = \sigma(w^T x + b) \)）与概率解释；Sigmoid 函数的数学性质（输出范围、导数形式）；二元交叉熵损失函数的定义与含义；常见激活函数的形态对比。 🟡 教学难点：逻辑回归的似然函数构造与交叉熵损失的推导过程；梯度下降中交叉熵损失对参数的偏导数推导；Sigmoid 函数饱和区梯度消失问题的理解。 📌 一、 课程导入（8 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 主题：从线性回归到神经网络——缺失的那一环</description>
    </item>
    <item>
      <title>17-2 神经网络的表示与基础任务</title>
      <link>https://blog.zkmhy.top/ml/17-02/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/17-02/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：理解神经网络的层级结构（输入层、隐藏层、输出层）及各层的功能定位；掌握前向传播的数学表达 \( a^{[l]} = f^{[l]}(W^{[l]} a^{[l-1]} + b^{[l]}) \)；理解神经网络用于回归和分类任务时的输出层设计与损失函数选择。 ⚙️ 能力目标：能够从零实现单隐藏层神经网络的前向传播计算；能够使用 NumPy 构建 MLP 回归模型并对比单神经元线性回归；能够分析不同输出层激活函数与损失函数的匹配关系。 💡 素养目标：建立“神经网络即复合函数”的数学直觉；理解深度与宽度的基本权衡；掌握从单一神经元向多层网络过渡的思维框架。 【重点与难点】&#xA;🟢 教学重点：神经网络的层级结构与符号体系（上标 \( [l] \) 表示层，下标 \( i \) 表示神经元索引）；前向传播的矩阵运算形式；回归任务（线性输出 + MSE）与二分类任务（Sigmoid + 交叉熵）的网络结构与损失函数配置。 🟡 教学难点：权重矩阵 \( W^{[l]} \) 与偏置向量 \( b^{[l]} \) 的维度推导；从单神经元到多神经元、从单层到多层的维度泛化；理解网络宽度（隐藏层神经元数）对模型容量的影响。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 主题：从单个神经元到神经网络</description>
    </item>
    <item>
      <title>17-3 反向传播与模型训练</title>
      <link>https://blog.zkmhy.top/ml/17-03/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/17-03/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：理解反向传播算法的核心思想——利用链式法则从输出端向输入端逐层计算梯度；掌握计算图的表示方法；熟悉回归任务和分类任务中输出层及隐藏层的梯度推导过程；理解参数初始化对训练收敛性的影响。 ⚙️ 能力目标：能够从零实现单隐藏层神经网络的反向传播与梯度下降训练；能够使用 NumPy 完成完整的训练循环（前向 → 损失计算 → 反向 → 参数更新）；能够监控训练过程中的损失变化并诊断收敛问题。 💡 素养目标：建立“自动微分”的基本概念，理解现代深度学习框架（PyTorch/TensorFlow）的底层原理；培养调试神经网络训练过程的系统性思维；理解梯度消失/爆炸问题的成因及应对策略。 【重点与难点】&#xA;🟢 教学重点：反向传播的链式法则原理；计算图的前向与反向信息流；回归网络（MSE 损失 + 线性输出）的梯度推导；二分类网络（交叉熵损失 + Sigmoid 输出）的梯度推导；参数更新规则与训练循环的完整实现。 🟡 教学难点：从输出层到隐藏层的逐层梯度反向传播推导；Sigmoid 导数 \( \sigma&#39;(z) = \sigma(z)(1-\sigma(z)) \) 在梯度计算中的化简；理解梯度消失问题的成因；权重矩阵维度转置在反向传播中的作用。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 主题：神经网络如何学习？</description>
    </item>
    <item>
      <title>17-4 MLP 应用实战</title>
      <link>https://blog.zkmhy.top/ml/17-04/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/17-04/index.html</guid>
      <description>🎯 教学目标与重难点… 【三维目标】&#xA;📚 知识目标：掌握 scikit-learn 中 MLPClassifier 和 MLPRegressor 的核心参数及其含义；理解从“从零实现”到“框架使用”的抽象层级跃迁；熟悉 MLP 模型在实际数据集上的完整使用流程（数据预处理 → 模型选择 → 训练 → 评估 → 调参）。 ⚙️ 能力目标：能够使用 MLPClassifier 完成手写数字识别等实际分类任务；能够使用 MLPRegressor 完成房价预测等回归任务；能够通过调整网络结构（隐藏层大小、激活函数、求解器等）优化模型性能；能够解读模型训练过程中的损失曲线并诊断收敛状态。 💡 素养目标：培养“先理解原理，再使用工具”的学习路径意识；理解自动微分框架（如 PyTorch/TensorFlow）与 scikit-learn MLP 接口的设计差异；建立从原型验证到工程部署的完整开发思维。 【重点与难点】&#xA;🟢 教学重点：MLPClassifier 和 MLPRegressor 的 API 使用规范；核心参数（hidden_layer_sizes、activation、solver、alpha、learning_rate_init）的含义与调参策略；分类与回归任务在数据预处理和模型评估上的差异。 🟡 教学难点：理解不同求解器（sgd、adam、lbfgs）的适用场景与收敛特性；正则化参数 alpha 对模型泛化能力的影响机制；早停法（early stopping）的用法与原理；从“从零实现”到“框架使用”的思维转换。 📌 一、 课程导入（5 分钟） ​ 📖 教学内容 👥 双边活动 🎯 设计意图 主题：从造轮子到用轮子</description>
    </item>
    <item>
      <title>24个希腊字母表</title>
      <link>https://blog.zkmhy.top/ml/alphabet/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.zkmhy.top/ml/alphabet/index.html</guid>
      <description>大写 小写 英文名 IPA（英式） 中文谐音 常见场景例句 LaTeX Α α Alpha /ˈælfə/ 阿尔法 “Set the learning rate α = 0.01.” \alpha Β β Beta /ˈbiːtə/ 贝塔 “The regression coefficient β₁ is significant.” \beta Γ γ Gamma /ˈɡæmə/ 伽马 “Apply Gamma distribution as a prior.” \gamma Δ δ Delta /ˈdɛltə/ 德尔塔 “The difference Δ equals the gradient step.” \delta Ε ε Epsilon /ˈɛpsɪlɒn/ 艾普西隆 “Add a small error term ε to avoid division by zero.” \epsilon Ζ ζ Zeta /ˈziːtə/ 泽塔 “The Riemann zeta function appears in regularization.” \zeta Η η Eta /ˈiːtə/ 伊塔 “Set the learning rate η = 0.001.” \eta Θ θ Theta /ˈθiːtə/ 西塔 “Optimize the parameter θ via gradient descent.” \theta Ι ι Iota /aɪˈoʊtə/ 艾欧塔 “The change is tiny, iota-scale.” \iota Κ κ Kappa /ˈkæpə/ 卡帕 “Use the condition number κ to check matrix stability.” \kappa Λ λ Lambda /ˈlæmdə/ 兰姆达 “Apply L2 regularization with weight λ = 0.1.” \lambda Μ μ Mu /mjuː/ 缪 “The mean μ of the Gaussian distribution is zero.” \mu Ν ν Nu /njuː/ 纽 “Set degrees of freedom ν = 5.” \nu Ξ ξ Xi /zaɪ/ 或 /ksaɪ/ 赛（或克赛） “The random noise ξ follows a normal distribution.” \xi Ο ο Omicron /ˈɒmɪkrɒn/ 奥密克戎 “Omicron is rarely used, just a placeholder.” \omicron Π π Pi /paɪ/ 派 “The constant π = 3.14159 appears in prior.” \pi Ρ ρ Rho /roʊ/ 柔 “Compute the correlation coefficient ρ.” \rho Σ σ Sigma /ˈsɪɡmə/ 西格马 “Sum over all samples: Σ (yᵢ - ŷᵢ)².” \sigma Τ τ Tau /tɔː/ 或 /taʊ/ 陶 “Use Kendall’s rank correlation τ.” \tau Υ υ Upsilon /ʌpˈsaɪlən/ 阿普塞隆 “Upsilon is uncommon, used in particle physics.” \upsilon Φ φ Phi /faɪ/ 费 “The activation function is φ(x) = sigmoid.” \phi Χ χ Chi /kaɪ/ 凯 “Calculate the Chi-squared statistic χ².” \chi Ψ ψ Psi /saɪ/ 赛 “The wave function ψ in quantum ML.” \psi Ω ω Omega /oʊˈmeɡə/ 奥米伽 “The parameter space Ω is high-dimensional.” \omega</description>
    </item>
  </channel>
</rss>