CH00
- 本书几乎每一章都至少有一个用 Streamlit 开发的 App,用来展示数学动画、数据分析、机器学习算法。
- Python 中,什么是模块、包、库?
在 Python 中,模块、包、库是三个常见的概念。它们的含义如下:
模块 (Module):是一个 Python 程序文件,包含了一组相关的函数、类、变量和常量等,可供其他程序引用。Python 中的模
块是一种可重用的代码组件,可用于将相关的代码组织到一起,以便更好地管理和维护代码。一个模块可以包含多个函数、类、
变量和常量等,可以被其他模块或程序引用和调用。
包 (Package):是一组相关的模块的集合,用于组织 Python 代码的层次结构。一个包是一个文件夹,其中包含其他模块或子
包。包是一种通过模块命名空间进行模块组织的方式,可用于更好地组织和管理大型代码库。
库 (Library):是由一组模块和包组成的软件组件,提供了一系列函数、类、变量和常量等,用于解决特定问题。Python 标
准库是 Python 官方提供的一组库,包含了大量的模块和功能,可以直接使用。此外,还有第三方库,如 NumPy、Pandas、
Matplotlib 等,用于数据处理、科学计算、可视化等领域。
需要注意的是,模块是最小的可重用代码单元,而包和库是由多个模块组成的更大的结构。在 Python 中,通常使用 import 语
句来引入需要使用的包、库或模块。
CH01
- 几何 (geometry)、微积分 (calculus)、线性代数 (linear algebra)
- 相关性系数 (Pearson Correlation Coefficient, PCC)
- 这个性质又和条件概率分布 (conditional probability distribution)、线性回归 (linear regression) 密不可 分。
- 给上述等式开个平方根,令其为 d,我们便得到机器学习中大名鼎鼎的马氏距离(Mahalanobis distance)
- 欧氏距离 (Eucliean distance) 就是我们经常说的两点之间线段。而不同于欧氏距离,马氏 距离考虑了数据的分布形状。从图 11 中,我们可以看到马氏距离等距线一层层紧紧地包裹样本散点 数据。
- 椭圆几何角度存在很多差异,但是两者又存在紧密联系。而两者的联系就是高斯函数 (Gaussian function)。高斯函数是微积分的重要研究对象之一,也是机器学习各种算法熟 客。
- 想要更深入理解马氏距离,我们需要借助几何视角,比如平移 (translation)、 旋转 (rotation)、缩放 (scaling)。
- 大家可能会好奇,到底旋转多少角度、缩放多大比例? 想要回答这个问题,这就需要祭出线性代数大杀器——特征值分解 (Eigen Value Decomposition, EVD)。
- 还是以高斯分布为例,我们可以在很多算法中都看到高斯的名字,比如高斯朴素贝叶斯 (Gaussian Naive Bayes)、高斯判别分析 (Gaussian discriminant analysis)、高斯过程 (Gaussian process)、高斯混合模型 (Gaussian mixture model) 等等。
- 对于一元线性回归,我们可以利用最小二乘法 (Ordinary Least Square, OLS) 来求解模型 参数。 简单来说,最小二乘法的核心思想是通过最小化观测数据与模型预测值之间的残差平方和找到最 优的模型参数。
- 统计推断有两大学派——频率学派推断 (Frequentist inference) 和贝叶斯学派推断 (Bayesian inference)。
- 频率学派认为真实参数确定,但一般不可知。真实参数就好比上帝视角能够看到一切随机现象表象 下的本质。
- 贝叶斯学派则认为参数本身也是不确定的,参数本身也是随机变量,因此也服从某种概率分布。很 重要的是,贝叶斯派可以引入我们自身经验,是一种“经验 + 数据”的学习模式,类似人脑原理
- 二元线性回归 (bivariate linear regression)
- 如果二元线性回归不满足需求,我们还可以进一步升维到多元线性回归 (multi-variate linear regression)。处理这些高维度的回归模型,线性代数工具从未缺席。
- 简单来说,如果一个模型在训练 数据表现很好,但是在新数据上表现糟糕的话,这就是一个典型的过拟合 (overfitting) 问题。
- 我们可以引入线性代数中的范数工具,即正则化 (regularization),来解决过拟合问题。
- 机器学习主要包括两大类问题
- 有监督学习 (supervised learning)
- 无监督学习 (unsupervised learning)。


CH02
- ► JupyterLab:基于 Web 的交互式开发环境,支持多种编程语言,包括 Python,可以快速编写、 测试和共享代码,非常适合数据科学和机器习领域。作者认为,JupyterLab 和 Jupyter Notebook 非常适合大家做探究式学习。目前,《编程不难》、《可视之美》两册的配套的代码多 是 Jupyter 笔记。这个话题后文将详细介绍如何使用 JupyterLab。
- ► Spyder:基于 Qt 开发的 Python IDE,提供了一个集成的开发环境,包括编辑器、调试器和控 制台,非常适合科学计算和数据分析。虽然“鸢尾花书”剩余几册的代码都是在 Spyder 中完成,建 议初学者还是在 JupyterLab 中分段运行代码。本书最后两章会用 Spyder 开发 Streamlit Apps。对于 MATLAB 转 Python 的读者来说,Spyder 可能是最容易上手的 IDE。在所有的 Python IDE 中,Spyder 最像 MATLAB。
- ► PyCharm:JetBrains 公司开发的跨平台 Python IDE,提供了许多功能,包括代码智能提示、 代码自动完成、调试和单元测试等。建议有 Python 开发经验的读者使用 PyCharm 运行本书代 码。
CH03