自学Python

Chapter 11

第11章Python案例2:手写数字分析

章节主张

第11章Python案例2:手写数字分析这一章真正要建立的,不是孤立知识点,而是围绕“案例章节把工具串成完整工作流、环境与工具链先于语法细节”形成一套能反复练习、能迁移到真实任务里的 Python 学习路径。

中文释读

读 第11章Python案例2:手写数字分析 时,不要只把它当作语法或模块说明书。更有价值的读法,是问自己:这一章解决了我在编程、科学计算或数据分析流程中的哪个瓶颈?

这本书的强项在于把工具、基础语法、科学计算库和案例工作流连成一条线。章节页因此会把原书内容翻译成“知识点 -> 操作动作 -> 易错边界 -> 迁移练习”的学习结构。

本章知识路线

关键论据

  • 手写数字数据集MNIST是一个经典的机器学习数据集,其官方网址为 mnist/index.html。
  • 该数据集由60000万张图片训练集和10000万张图片测试集组成。
  • 训练集( Training Set)与 测试集 (Test Set)是机器学习研究中常用的概念,通常研究者在训练集上进行数据建模得到相应模型,并在测试集上测试该模型的效果指标。
  • 很多Python的第三方机器学习模块已经将MNIST作为基础数据集集成在模块中,不过,本书为了给读者展示完整的机器学习分析流程,将从原始的官方网址进行数据的获取与处理。
  • 利用urllib模块和gzip模块,可以将数据从官方网址下载到本地的mnist文件夹: 由于该数据为“.gz”压缩格式,需要使用gzip这个模块进行解压,同时使用shutil. copyfileobj()函数对两个文件对象进行复制。

行动清单

  • 先用最小代码样例跑通本章核心知识点。
  • 把本章知识点接到一个真实小任务上,而不只停留在示例。
  • 记录本章最容易报错的边界条件和调试方式。
  • 复盘:这一章内容如何进入自己的长期 Python 学习系统。

本章图版学习路径

图版按知识点分组,适合拿来做复现、迁移和复盘练习,不只是“看一眼效果”。

源章节深读

11.1 数据的获取与处理

这节解决什么问题:这节要解决的不是背下“11.1 数据的获取与处理”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“11.1 数据的获取与处理”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 11.1 数据的获取与处理 背后的对象模型、输入输出和适用边界。

手写数字数据集MNIST是一个经典的机器学习数据集,其官方网址为 mnist/index.html。 该数据集由60000万张图片训练集和10000万张图片测试集组成。 训练集( Training Set)与 测试集 (Test Set)是机器学习研究中常用的概念,通常研究者在训练集上进行数据建模得到相应模型,并在测试集上测试该模型的效果指标。 很多Python的第三方机器学习模块已经将MNIST作为基础数据集集成在模块中,不过,本书为了给读者展示完整的机器学习分析流程,将从原始的官方网址进行数据的获取与处理。利用urllib模块和gzip模块,可以将数据从官方网址下载到本地的mnist文件夹: 由于该数据为“.gz”压缩格式,需要使用gzip这个模块进行解压,同时使用shutil. copyfileobj()函数对两个文件对象进行复制。 从官网的介绍可以知道,该数据集由四个文件组成,分别为训练集的图片和标记以及测试集的图片和标记,且数据格式为二进制格式,每个数据以1B(即8bit)存储,在NumPy中,1B对应的数据类型为“uint8”,因此,可以利用np.fromfile()函数读取这些数据: 本书用train_x、test_x表示图像数据,train_y、test_y表示数据对应的标记。 读取出来的数据可以使用Matplotlib可视化。利用plt.imshow()函数,可以对训练集的前100个数字进行可视化,得到如图11-1所示的图像: 图11-1 手写数据集可视化示意图

11.2 数据建模和效果分析

这节解决什么问题:这节要解决的不是背下“11.2 数据建模和效果分析”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“11.2 数据建模和效果分析”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 11.2 数据建模和效果分析 背后的对象模型、输入输出和适用边界。

MNIST数据集是一个经典的机器学习数据集,被用于各种机器学习基础算法的测试。其基本任务是一个数字的分类问题,即给定一张手写数字的图片,让计算机通过在训练集上建模得到一个模型,判断该数字所属的类别。模型的好坏以该模型在测试集上预测的准确率为评价标准。 本节将通过一些基础机器学习算法在MNIST数据集上的应用,给读者介绍Python中一些基础机器学习算法。受限于篇幅,本书对机器学习算法的细节不做过多的介绍。 1.K近邻算法 K近邻算法是一类最基础的分类算法。其基本思想很简单,在给定一组训练数据集的情况下,对于一个的数据,首先从训练数据集中找到与该数据最接近的K个训练数据,最终的分类结果由这K个训练数据的众数决定,即选择这K个训练数据中最多的那个分类作为最终结果。第三方模块Scikit-Learn已经实现了基础的K近邻算法。Scikit-Learn模块可以通过pip或conda命令安装: 利用该模块的子模块sklearn.neighbors中的KNeighborsClassifier类,可以给出K=1,3,5,7,9时K近邻算法的准确率。假设数据已经被导入为train_x、test_x、train_y以及test_y,则K近邻算法的代码可以实现为: 该代码的输出结果为: 可以看到,当k=3时,预测的准确率是最高的。 2.主成分分析降维后进行K近邻算法 多种算法可以组合使用来得到更好的结果。可以使用之前学到的主成分分析(PCA)算法,对原始数据降维到一个更好的表示空间进行K近邻。Scikit-Learn模块在子模块sklearn.decomposition中提供了PCA类来完成PCA的降维。利用该类,可以得到维度分别为10、20、30、40、50时,K近邻算法的效果: 程序输出的结果为: 3.神经网络

11.3 本章学习笔记

这节解决什么问题:这节要解决的不是背下“11.3 本章学习笔记”,而是把这个知识点放进真正可运行、可调试、可迁移的 Python 学习流程里。

怎么用到自己的系统:把它写进自己的学习系统:先用最小例子跑通,再把“11.3 本章学习笔记”迁移到一个实际小任务中,最后记录哪些边界条件最容易报错。

常见错误:常见误区是只记住 API 或代码片段,却没理解 11.3 本章学习笔记 背后的对象模型、输入输出和适用边界。

本章以对MNIST手写字体数据集的处理为例,对一些常用的机器学习算法的应用进行了简要介绍,可以帮助读者了解如何使用Python进行一些基础的机器学习处理。对于更高层次的应用,则需要从实际问题出发,掌握相关的算法和知识,才能取得更好的结果。 学完本章,读者应该做到了解机器学习处理数据的几个基本步骤。 1.本章新术语 本章涉及的新术语见表11-1。 表11-1 本章涉及的新术语 2.本章新函数 本章不涉及新函数。 3.本章Python 2与Python 3的区别 本章不涉及Python 2与Python 3的区别。

辨析题:如果你只会照抄 第11章Python案例2:手写数字分析 里的例子,却无法换一个输入自己写出来,真正缺的是什么?

多数时候缺的不是记忆,而是对象模型、输入输出边界和操作顺序的理解。把知识点换到新输入上依然能运行,才算真的进入了自己的系统。