Fundamentals of Statistics(统计学基础)¶
统计学提供了描述数据和量化不确定性的语言。本节涵盖分布、随机变量、PMF、PDF、CDF、期望、方差、矩以及中心极限定理——这些概念是每个 ML 评估指标和损失函数的基础。
-
统计学是从数据中学习的科学。你收集观测值,对其进行汇总,并得出结论——通常是关于无法直接测量的事物。
-
想象你想知道一个国家所有成年人的平均身高。你无法测量所有人,因此你测量一个样本,并用统计学对整体群体做出有根据的推断。
-
统计学有两个主要分支:
- 描述统计学(descriptive statistics):汇总已有数据(均值、图表、表格)
- 推断统计学(inferential statistics):用样本对更大群体做出推断
-
统计学的基本构件是分布(distribution)——对数值如何分散的描述。其他一切——均值、检验、预测——都源于对分布的理解。
-
频率分布(frequency distribution)统计每个值(或值的范围)在数据中出现的次数。可以想象将考试成绩划分到区间并统计每个区间内学生人数,结果就是直方图。
-
概率分布(probability distribution)用概率取代原始计数。不再是"12 名学生得分在 70 到 80 之间",而是"得分在 70 到 80 之间的概率为 0.24"。数据连续时,直方图的条形变为光滑曲线。
-
左侧直方图由你收集的实际数据构建,右侧光滑曲线是描述数据背后规律的数学模型。前者是经验的,后者是理论的。
-
为了用数学处理分布,我们需要一种将结果映射为数字的方法,这正是随机变量(random variable)所做的事。
-
随机变量是将实验的每个结果映射到实数的函数。抛硬币:结果是"正面"或"反面",随机变量 \(X\) 将其转化为 \(X(\text{正面}) = 1\)、\(X(\text{反面}) = 0\),这样便可进行算术运算。
-
离散(discrete)随机变量取值于可数集合:10 次抛硬币的正面次数、骰子点数、一小时内收到的邮件数。
-
连续(continuous)随机变量可以取某区间内的任意值:你的精确身高、等下一班公交的时间、正午的温度。
-
这一区别很重要,因为它改变了概率的计算方式。对于离散变量,我们求和;对于连续变量,我们积分(回顾第 3 章的积分)。
-
对于离散随机变量,概率质量函数(PMF)给出每个特定值的概率:
- 对于连续随机变量,概率密度函数(PDF)给出落在某个区间内的概率。任何单个精确值的概率为零;只有区间才有正概率:
-
能够将数字分配给结果后,最自然的问题是:平均而言,我们期望得到什么值?
-
期望(expectation)(或期望值)是所有可能值以概率为权重的加权平均。可以把它理解为分布的"重心"。
-
多次投掷公平骰子,平均点数收敛于 3.5。这就是期望值,尽管你永远不可能真正投出 3.5 点。
-
对于离散随机变量:
- 对于连续随机变量(使用第 3 章的积分):
- 示例:公平六面骰子的 \(p(x) = 1/6\),\(x = 1, 2, 3, 4, 5, 6\)。
-
期望具有线性性,即 \(E[aX + b] = aE[X] + b\)。这一性质极为有用,在 ML 损失函数中随处可见。
-
期望告诉我们中心位置,但对值的分散程度一无所知。为描述分布的完整形状,我们需要矩(moments)。
-
矩是 \(X\) 的某次幂的期望。第 \(k\) 阶原点矩(raw moment)为:
-
第一阶原点矩(\(k = 1\))就是均值:\(\mu_1' = E[X] = \mu\)。
-
原点矩从零点开始度量,但我们往往更关心与均值的偏差。第 \(k\) 阶中心矩(central moment)以均值为中心度量:
-
第一阶中心矩恒为零(均值上方与下方的偏差相互抵消)。第二阶中心矩即为方差(variance)。
-
为了在不同尺度的分布间进行比较,我们通过除以标准差 \(\sigma\) 的相应次幂进行标准化(standardise):
- 每阶矩捕捉分布形状的不同方面:
- 第 1 阶矩(均值 Mean):分布的中心位置,即平衡点。
- 第 2 阶矩(方差 Variance):值围绕均值的分散程度。方差越大,分布越宽。
- 第 3 阶矩(偏度 Skewness):分布是否向左或向右倾斜。偏度为零表示对称。
-
第 4 阶矩(峰度 Kurtosis):尾部的厚重程度。峰度越高,极端异常值越多。
-
以具体数据集 \(X = \{2, 4, 4, 4, 5, 5, 7, 9\}\) 计算全部四个矩:
-
第 1 步:均值(第 1 阶原点矩)
- 第 2 步:方差(第 2 阶中心矩)。将每个值减去均值,平方后取平均:
-
标准差(standard deviation)为 \(\sigma = \sqrt{4} = 2\)。
-
第 3 步:偏度(标准化第 3 阶中心矩)。将偏差三次方,取平均后除以 \(\sigma^3\):
-
正偏度意味着右尾更长,这合理,因为 9 远高于均值。
-
第 4 步:峰度(标准化第 4 阶中心矩)。将偏差取四次方:
- 正态分布的峰度为 3(称为"中峰态 mesokurtic")。我们的值 2.781 接近 3,说明尾部大致符合正态分布。高于 3("尖峰态 leptokurtic")表示尾部更重;低于 3("低峰态 platykurtic")表示尾部更轻。某些公式报告超额峰度(excess kurtosis)(减去 3),我们的超额峰度为 \(-0.219\)。
编程练习(使用 CoLab 或 notebook)¶
-
计算一个加权骰子的期望值:6 点的概率为 0.3,其余各面均等分配剩余概率。通过模拟 100,000 次投掷进行验证。
import jax import jax.numpy as jnp # 加权骰子:6 点概率为 0.3,其余各面各为 0.14 probs = jnp.array([0.14, 0.14, 0.14, 0.14, 0.14, 0.30]) faces = jnp.array([1, 2, 3, 4, 5, 6]) # 解析期望值 ev = jnp.sum(faces * probs) print(f"Expected value (formula): {ev:.4f}") # 模拟 key = jax.random.PRNGKey(42) rolls = jax.random.choice(key, faces, shape=(100_000,), p=probs) print(f"Expected value (simulation): {rolls.mean():.4f}") -
计算示例数据集的全部四个矩(均值、方差、偏度、峰度),然后修改数据并观察每个矩的变化。
import jax.numpy as jnp x = jnp.array([2, 4, 4, 4, 5, 5, 7, 9], dtype=jnp.float32) mean = jnp.mean(x) variance = jnp.mean((x - mean) ** 2) std = jnp.sqrt(variance) skewness = jnp.mean(((x - mean) / std) ** 3) kurtosis = jnp.mean(((x - mean) / std) ** 4) print(f"Mean: {mean:.3f}") print(f"Variance: {variance:.3f}") print(f"Std Dev: {std:.3f}") print(f"Skewness: {skewness:.3f}") print(f"Kurtosis: {kurtosis:.3f}") print(f"Excess K: {kurtosis - 3:.3f}") -
并排可视化公平骰子的 PMF 和 CDF。尝试修改概率,观察形状如何变化。
import jax.numpy as jnp import matplotlib.pyplot as plt faces = jnp.array([1, 2, 3, 4, 5, 6]) pmf = jnp.ones(6) / 6 # 公平骰子;尝试修改这些概率! cdf = jnp.cumsum(pmf) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4)) ax1.bar(faces, pmf, color="#3498db", alpha=0.8) ax1.set_title("PMF") ax1.set_xlabel("Face") ax1.set_ylabel("P(X = x)") ax1.set_ylim(0, 0.5) ax2.step(faces, cdf, where="mid", color="#e74c3c", linewidth=2) ax2.set_title("CDF") ax2.set_xlabel("Face") ax2.set_ylabel("P(X ≤ x)") ax2.set_ylim(0, 1.1) plt.tight_layout() plt.show()