首页 / 模块 2 · 概率统计、信息论与最优化 / 第 2 课(共 10 课)

分布动物园与协方差

从零到前沿 ML 自学课程 · 阶段0:数学与工具基础 · 能力点:分布与协方差——认识模型用的分布 + 协方差的几何(接 M1 特征分解,PCA 的种子)

读完这一课,你将能够

  • 对伯努利、二项、Categorical、均匀、高斯、泊松、指数七种分布,各说出"它在建模什么现实问题"以及在 ML 里出现在哪(如 softmax 输出层=Categorical、权重初始化=高斯)。
  • 写出一维高斯的密度公式 \(p(x)=\frac{1}{\sqrt{2\pi}\,\sigma}e^{-(x-\mu)^2/2\sigma^2}\),并用 68–95–99.7 规则估计任意区间的概率。
  • 给一组成对数据,手算协方差 \(\mathrm{Cov}(X,Y)\) 与相关系数 \(\rho\in[-1,1]\),并解释 \(\rho\) 的符号与大小。
  • 对一个 2×2 协方差矩阵求特征值/特征向量,画出它的"协方差椭圆",说清主轴方向=特征向量、胖瘦=特征值(半轴长 \(\propto\sqrt{\lambda}\))——并点明这就是 PCA 的种子。
  • 用一句话复述中心极限定理(CLT),解释"为什么高斯到处都是",并能跑一个 numpy 小实验亲眼看到偏度下降。

上一课我们认识了随机变量、期望 \(\mathbb{E}[X]\) 与方差 \(\mathrm{Var}(X)\)——那是描述"一个随机量"的工具。这一课我们做两件事:第一,逛一遍"分布动物园",认识几种反复出现的随机量长什么样、什么时候该请哪一只出场;第二,迈进多变量,问"两个随机量怎么一起动"——这把我们带向协方差协方差矩阵,以及一个让模块1的特征分解突然变得无比有用的画面:协方差椭圆。最后用中心极限定理收束全场,解释高斯为何无处不在。

分布动物园:每只动物解决一个问题

别把分布当成一堆要背的公式。每个分布都是对某类"随机机制"的最简刻画。认识它的正确顺序是:先问"现实里什么东西按这种方式随机",再看公式。下面每只动物都先给一句"什么时候用它"。
分布小图鉴:伯努利、二项、高斯、泊松分布小图鉴 · 四种常见分布伯努利 (p=0.3)x0.70.301只有两种结果抛硬币 / 二分类输出二项 (n=10, p=0.5)x5010n 次伯努利之和近似对称的钟形高斯 N(0,1)xμ=00连续 PDF · 平滑钟形噪声 / 权重初始化泊松 (λ=3)x02-3单位时间计数右偏 · 拖长尾
分布小图鉴:伯努利(两根柱)、二项(对称钟形离散柱)、高斯(连续钟形曲线)、泊松(右偏离散柱),各标一句形状特点与典型用途。

伯努利 Bernoulli(p):一次是非题

什么时候用它:任何"只有两种结果"的单次随机——抛一次硬币、一封邮件是不是垃圾、一次点击有没有发生。它是二分类模型输出的概率原型。

随机变量 \(X\) 只取 0 或 1,取 1 的概率是 \(p\):

\[ P(X=1)=p,\qquad P(X=0)=1-p. \]

一个紧凑写法把两行并成一行:\(P(X=x)=p^{x}(1-p)^{1-x}\)(\(x\in\{0,1\}\))。它的期望和方差很好记:

\[ \mathbb{E}[X]=p,\qquad \mathrm{Var}(X)=p(1-p). \]

注意方差在 \(p=0.5\) 时最大(\(0.25\))——最"五五开"时最不确定,这与直觉一致。

二项 Binomial(n,p):把 n 次是非题加起来

什么时候用它:独立重复 \(n\) 次同一个伯努利试验,数一共成功了几次。抛 10 次硬币里几次正面、发 1000 封邮件里几封被点开。

\(X\) 是 \(n\) 个独立 Bernoulli(p) 之和,取值 \(0,1,\dots,n\):

\[ P(X=k)=\binom{n}{k}p^{k}(1-p)^{n-k},\quad \mathbb{E}[X]=np,\quad \mathrm{Var}(X)=np(1-p). \]

因为是 \(n\) 个独立同分布的伯努利相加,它的期望/方差就是单个的 \(n\) 倍——这个"独立项相加,方差也相加"的规律,等会儿在 CLT 里还要再用。

Categorical:多选一

什么时候用它:结果有 \(K\) 个互斥类别,选中其一。这正是多分类的输出层——一张图是猫/狗/鸟,下一个 token 是词表里哪个词。

给每个类别一个概率 \(p_1,\dots,p_K\),满足 \(p_k\ge 0\) 且 \(\sum_k p_k=1\)。伯努利是它在 \(K=2\) 时的特例。

补全一个对应关系(本课用不到,知道有这个名字即可):把 Categorical 独立重复 \(n\) 次、数各类别各被选中几次,得到的就是多项分布 Multinomial——它之于 Categorical,正如二项之于伯努利。

ML 和 ML 的联系

神经网络分类头输出的就是一个 Categorical 分布:最后一层把实数打分向量 \(z\)(logits)经 softmax 变成合法概率 \(p_k=\dfrac{e^{z_k}}{\sum_j e^{z_j}}\)。这里的分母 \(\sum_j e^{z_j}\) 把一堆"未归一化的分数"压成"加起来为 1 的概率"——它有个名字叫归一化常数(normalizing constant),在能量模型里叫配分函数(partition function)\(Z\)。先记住这个名字,后面讲能量模型时会反复回来挖它。

均匀 Uniform:一无所知时的默认

什么时候用它:区间内"哪儿都一样可能"。计算机的随机数发生器底层产出的就是 \([0,1)\) 上的均匀数;很多其它分布的采样都从均匀数变换而来。

连续均匀 \(U(a,b)\) 的密度是常数 \(p(x)=\frac{1}{b-a}\)(\(a\le x\le b\)),\(\mathbb{E}[X]=\frac{a+b}{2}\),\(\mathrm{Var}(X)=\frac{(b-a)^2}{12}\)。它形状最"无聊"——但正因为无聊,等会儿把一堆均匀量加起来变成钟形,才特别震撼。

高斯 / 正态 \(\mathcal{N}(\mu,\sigma^2)\):动物园之王

什么时候用它:测量噪声、误差、"很多小因素叠加"的量;神经网络权重初始化常从高斯采样;扩散模型加的噪声是高斯。它是后面大半门课的主角。

一维高斯的概率密度(PDF)是:

\[ p(x)=\frac{1}{\sqrt{2\pi}\,\sigma}\,\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right). \]

把它拆开看就不怕了:核心是 \(\exp(-(x-\mu)^2/2\sigma^2)\)——离中心 \(\mu\) 越远,指数里的负数越大,密度掉得越快,于是是个钟形;\(\sigma\) 控制钟的胖瘦(标准差越大越胖);前面的 \(\frac{1}{\sqrt{2\pi}\,\sigma}\) 起的作用和 softmax 分母一样——都是归一化常数,只不过这里是让积分(而非求和)恰好为 1,让整条曲线下的面积是 1。参数含义干净利落:\(\mathbb{E}[X]=\mu\),\(\mathrm{Var}(X)=\sigma^2\)。

高斯的 68–95–99.7 规则:以 \(\mu\) 为中心,
 区间 \([\mu-\sigma,\ \mu+\sigma]\) 覆盖约 68% 的概率;
 区间 \([\mu-2\sigma,\ \mu+2\sigma]\) 覆盖约 95%
 区间 \([\mu-3\sigma,\ \mu+3\sigma]\) 覆盖约 99.7%
换句话说,落在 3 个标准差之外是"千里挑三"的稀罕事。这条规则让你不用积分就能口算高斯区间概率。
一维高斯 68–95–99.7 规则:±1σ/±2σ/±3σ 分别覆盖约 68.27%、95.45%、99.73% 的面积68–95–99.7 规则:N(μ, σ²)xμ-3σμ-2σμ-σμμ+σμ+2σμ+3σ68.27%95.45%95.45%99.73%99.73%±1σ → 68.27% ±2σ → 95.45% ±3σ → 99.73%≈0≈0极薄尾部:几乎不可能落在 3σ 之外(约 0.27%)±1σ±1σ~±2σ±2σ~±3σ
一维高斯 68–95–99.7 规则:以 μ 为中心,±1σ/±2σ/±3σ 区间分别覆盖约 68%、95%、99.7% 的面积。

例题

某层权重初始化为 \(\mathcal{N}(0,\ 0.02^2)\)(\(\mu=0,\ \sigma=0.02\))。问:约 95% 的初始权重落在哪个区间?落在 \(|w|>0.06\) 的权重大约占多少?

解:95% 对应 \(\pm 2\sigma=\pm0.04\),即约 95% 的权重在 \([-0.04,\ 0.04]\)。而 \(0.06=3\sigma\),3σ 之内覆盖 99.7%,所以 \(|w|>3\sigma\) 的两侧合计只有约 \(100\%-99.7\%=0.3\%\)。这正是为什么"几乎所有初始权重都是小数"——大权重被高斯尾巴压得极稀。

泊松 Poisson(λ):单位时间里数个数

什么时候用它:"在一段固定时间/空间里,某种稀有事件发生了几次"——一分钟内到达的请求数、一页书里的错别字数、一小时打进的电话数。

\[ P(X=k)=\frac{\lambda^{k}e^{-\lambda}}{k!},\quad k=0,1,2,\dots,\qquad \mathbb{E}[X]=\mathrm{Var}(X)=\lambda. \]

它有个签名特征:均值等于方差,都等于 \(\lambda\)。形状是右偏的离散柱(左边被 0 挡住,右边拖尾)。直觉上它是"\(n\) 很大、\(p\) 很小"的二项的极限:把一段时间切成 \(n\) 个极小格(\(n\to\infty\)),每格成功概率 \(p\to 0\),但保持平均次数 \(np=\lambda\) 不变——此时二项的 \(P(X=k)\) 恰好收敛到泊松公式。

指数 Exponential:等待时间

什么时候用它:"下一个泊松事件还要等多久"——两次请求之间的间隔、设备到下次故障的时间。泊松数个数,指数数间隔,它俩是一对。

\[ p(x)=\lambda e^{-\lambda x}\ (x\ge 0),\qquad \mathbb{E}[X]=\frac{1}{\lambda},\qquad \mathrm{Var}(X)=\frac{1}{\lambda^2}. \]

它有著名的无记忆性:已经等了 10 分钟还没来,再等 5 分钟的概率,和一开始就等 5 分钟一样——过去不影响未来。它的形状强烈右偏,正好等会儿拿来演示 CLT 怎么把偏度抹平。

分布取值一句话用途\(\mathbb{E}[X]\)\(\mathrm{Var}(X)\)
Bernoulli(p)\(\{0,1\}\)单次是非(二分类输出)\(p\)\(p(1-p)\)
Binomial(n,p)\(0..n\)n 次是非里的成功数\(np\)\(np(1-p)\)
Categorical\(K\) 个类多选一(softmax 输出)
Uniform(a,b)\([a,b]\)区间内一无所知\(\frac{a+b}{2}\)\(\frac{(b-a)^2}{12}\)
\(\mathcal{N}(\mu,\sigma^2)\)\(\mathbb{R}\)噪声/初始化/误差叠加\(\mu\)\(\sigma^2\)
Poisson(λ)\(0,1,2..\)单位时间计数\(\lambda\)\(\lambda\)
Exponential(λ)\([0,\infty)\)等待时间\(\frac{1}{\lambda}\)\(\frac{1}{\lambda^2}\)
易错:别把"分布的参数"和"分布的矩"搞混。比如泊松只有一个参数 \(\lambda\),它同时既是均值又是方差;而高斯有两个独立参数 \(\mu,\sigma\),均值和方差可以各调各的。另外注意离散分布写 \(P(X=k)\)(概率质量),连续分布写 \(p(x)\)(概率密度,本身不是概率,要积分才是)——上一课强调过,密度可以大于 1。

协方差:两个随机量怎么"一起动"

到目前为止每只动物都是单变量的。但现实里随机量常常成群结队、彼此牵连:身高与体重、两只股票、像素的相邻点。我们需要一个数来回答"\(X\) 偏大时,\(Y\) 是倾向于也偏大,还是偏小?"

把每个样本相对各自均值的"偏差"看一眼:\(X\) 比它的均值 \(\mu_X\) 高,记 \((X-\mu_X)>0\);\(Y\) 比 \(\mu_Y\) 高,记 \((Y-\mu_Y)>0\)。如果两者常常同号(一起偏高或一起偏低),它们的乘积常为正——这就是"正相关"。协方差就是把这个乘积取期望(平均)
\[ \mathrm{Cov}(X,Y)=\mathbb{E}\big[(X-\mu_X)(Y-\mu_Y)\big]. \]

符号告诉你方向:正=同涨同跌,负=此涨彼跌,零=线性上无关联。注意 \(\mathrm{Cov}(X,X)=\mathbb{E}[(X-\mu_X)^2]=\mathrm{Var}(X)\)——方差只是"自己和自己的协方差",这个统一视角等会儿拼协方差矩阵时很关键。

但协方差有个毛病:它带单位、量纲不固定。身高用厘米还是米算,协方差会差 100 倍,没法横向比较"谁更相关"。解决办法是除掉两个标准差,把它无量纲化,得到相关系数(correlation coefficient):

\[ \rho_{XY}=\frac{\mathrm{Cov}(X,Y)}{\sigma_X\,\sigma_Y}\in[-1,1]. \]

这其实就是模块1 的余弦相似度换了层皮:把"去均值后的 \(X\) 和 \(Y\)"当成两个向量,\(\rho\) 正是它们夹角的余弦。所以 \(\rho=\pm1\) 表示完全线性(共线);\(\rho=0\) 表示去均值后的 \(X\)、\(Y\) 在向量意义上正交,也就是没有线性关联(但仍可能有非线性关系——见下方易错)。

例题:手算协方差与相关系数

五对数据 \(X=(1,2,3,4,5)\),\(Y=(1,3,2,5,4)\)。求 \(\mathrm{Cov}(X,Y)\) 与 \(\rho\)。

第一步,均值:\(\mu_X=\frac{1+2+3+4+5}{5}=3\),\(\mu_Y=\frac{1+3+2+5+4}{5}=3\)。

第二步,偏差与乘积:

\(x_i-\mu_X\)\(y_i-\mu_Y\)乘积
\(-2\)\(-2\)\(4\)
\(-1\)\(0\)\(0\)
\(0\)\(-1\)\(0\)
\(1\)\(2\)\(2\)
\(2\)\(1\)\(2\)

第三步,协方差(按总体除以 \(N=5\)):乘积之和 \(=4+0+0+2+2=8\),所以 \(\mathrm{Cov}(X,Y)=\frac{8}{5}=1.6\)。

第四步,方差与标准差:\(\sum(x_i-\mu_X)^2=4+1+0+1+4=10\Rightarrow \mathrm{Var}(X)=\frac{10}{5}=2\),\(\sigma_X=\sqrt2\)。同理 \(\sum(y_i-\mu_Y)^2=4+0+1+4+1=10\Rightarrow \mathrm{Var}(Y)=2\),\(\sigma_Y=\sqrt2\)。

第五步,相关系数:\(\rho=\dfrac{1.6}{\sqrt2\cdot\sqrt2}=\dfrac{1.6}{2}=0.8\)。

读数:\(\rho=0.8\) 是强正相关——\(X\) 大时 \(Y\) 倾向于也大,但不完全(不是 1,数据里有抖动,比如第 2、3 个点就反着来)。

易错一:分母 \(N\) 还是 \(N-1\)? 上面用"总体公式"除以 \(N\)。统计里估计真实方差时常用无偏估计除以 \(N-1\)(贝塞尔校正)。numpy 默认 np.cov 除以 \(N-1\)、np.var 除以 \(N\)。算具体数前先确认用哪个,否则会差一个因子——不过 \(\rho\) 里分子分母同除,这个因子会抵消,相关系数不受影响。
易错二:\(\rho=0\) 只代表线性无关,不代表独立。例如 \(Y=X^2\)、\(X\) 对称分布时 \(\rho=0\),但 \(Y\) 完全由 \(X\) 决定。协方差只看得见直线关系。

协方差矩阵:把所有两两关系装进一个对称矩阵

当随机量不止两个、而是一个向量 \(\mathbf{X}=(X_1,\dots,X_d)\),我们把所有两两协方差排成一个 \(d\times d\) 矩阵:

\[ \Sigma_{ij}=\mathrm{Cov}(X_i,X_j),\qquad \Sigma=\mathbb{E}\big[(\mathbf{X}-\boldsymbol\mu)(\mathbf{X}-\boldsymbol\mu)^\top\big]. \]

对角线 \(\Sigma_{ii}=\mathrm{Var}(X_i)\) 是各分量自己的方差,非对角是两两协方差。因为 \(\mathrm{Cov}(X_i,X_j)=\mathrm{Cov}(X_j,X_i)\),所以 \(\Sigma\) 必然对称。更进一步,对任意方向向量 \(\mathbf{a}\),\(\mathbf{a}^\top\Sigma\mathbf{a}=\mathrm{Var}(\mathbf{a}^\top\mathbf{X})\ge 0\)(任何方向上的投影方差不可能为负),所以 \(\Sigma\) 是对称半正定的。

"对称半正定"这六个字,正是模块1 第4课谱定理点名的对象:对称矩阵一定可以正交特征分解 \(\Sigma=Q\Lambda Q^\top\),特征值全为实数且非负(半正定),特征向量两两正交。我们当时埋的伏笔——"主成分=协方差的特征向量"——现在要兑现了。

协方差椭圆:特征分解的几何兑现

想象二维高斯样本散成一团云。如果两个分量不相关,云是个正放的椭圆,胖瘦由各自方差决定。一旦相关(\(\Sigma\) 有非零非对角元),云就斜过来了。怎么找到这团斜椭圆的"长轴短轴"?——对 \(\Sigma\) 做特征分解:

二维相关高斯散点与协方差椭圆:主轴为 Σ 的特征向量,半轴长正比于根号特征值x₁x₂ v₁ (λ₁=3)v₂ (λ₂=1)2σ 等高线主轴 = Σ 的特征向量(呼应 M1 第4课)轴长 ∝ √特征值 = 该方向的标准差相关越强 → 椭圆越斜越扁 · 这就是 PCA 的种子
二维相关高斯散点 + 协方差椭圆:椭圆主轴方向 = 协方差矩阵 Σ 的特征向量,半轴长 ∝ √特征值;相关越强椭圆越斜越扁。

例题:2×2 协方差矩阵的特征分解与椭圆朝向

设 \(\Sigma=\begin{bmatrix}2&1\\1&2\end{bmatrix}\)。求特征值与特征向量,并说明椭圆的朝向与胖瘦。

特征值:解 \(\det(\Sigma-\lambda I)=0\),即 \((2-\lambda)^2-1=0\Rightarrow 2-\lambda=\pm1\Rightarrow \lambda_1=3,\ \lambda_2=1\)。
(也可用速算:\(\mathrm{tr}=4=\lambda_1+\lambda_2\),\(\det=3=\lambda_1\lambda_2\),凑出 3 和 1。)

特征向量:对 \(\lambda_1=3\),解 \((\Sigma-3I)v=0\):\(\begin{bmatrix}-1&1\\1&-1\end{bmatrix}v=0\Rightarrow v_1\propto\begin{bmatrix}1\\1\end{bmatrix}\),归一化为 \(\frac{1}{\sqrt2}\begin{bmatrix}1\\1\end{bmatrix}\)。
对 \(\lambda_2=1\),同理 \(v_2\propto\begin{bmatrix}1\\-1\end{bmatrix}\),归一化为 \(\frac{1}{\sqrt2}\begin{bmatrix}1\\-1\end{bmatrix}\)。两者正交,符合谱定理。

几何读数:长轴沿 \([1,1]\) 方向(右上 45°),半轴长 \(\propto\sqrt3\approx1.73\);短轴沿 \([1,-1]\) 方向(左上 45°),半轴长 \(\propto\sqrt1=1\)。所以这团数据云是一个朝右上倾斜 45° 的椭圆,长短轴比约 \(\sqrt3:1\approx1.7:1\)——明显伸长而非圆。倾斜方向(正相关)正对应非对角元 \(+1>0\)。

ML 和 ML 的联系

这就是主成分分析 PCA 的全部种子。PCA 做的事就是:对数据的协方差矩阵 \(\Sigma\) 特征分解,挑特征值最大的几个特征向量当"主成分",把数据投影上去——因为那几个方向集中了最多方差(信息)。"降维"就是丢掉特征值小(那个方向几乎没在动)的轴。等模块3 正式讲 PCA 时,你会发现它不过是把今天这张椭圆图严肃地重做一遍。高斯的多维密度里也藏着 \(\Sigma^{-1}\),它的特征结构决定了那团概率云的形状朝向。

中心极限定理:高斯为何无处不在

逛完动物园你也许纳闷:现实分布五花八门,凭什么高斯独占 C 位、成了"默认假设"?答案是中心极限定理(Central Limit Theorem, CLT):

CLT(直觉版):大量独立同分布的随机变量加起来(或取平均),不管每一个原本长什么样(均匀、指数、掷骰子……只要方差有限),它们的在标准化后都会趋向高斯分布
正式点:若 \(X_1,\dots,X_n\) 独立同分布、均值 \(\mu\)、方差 \(\sigma^2\),则 \(\dfrac{\sum_i X_i-n\mu}{\sigma\sqrt{n}}\ \xrightarrow{\ n\to\infty\ }\ \mathcal{N}(0,1)\)。

这就解释了高斯的统治地位:现实里许多量本身就是"无数小随机因素叠加"的结果——测量误差是无数微小扰动之和,一个人的身高是众多基因与环境因素叠加,噪声是大量独立微小冲击的和。叠加足够多独立随机性,个体的怪癖被互相抵消、抹平,只剩下钟形。

一个常被忽略的细节:CLT 不止说"变成钟形",还能看到偏度(skewness,分布的不对称程度)随求和项数 \(n\) 像 \(1/\sqrt{n}\) 一样衰减。拿强烈右偏的指数分布做基,单个偏度恰为 2(这是指数分布的精确偏度),加 \(k\) 个后偏度恰为 \(2/\sqrt{k}\):\(k=1,2,5,30\) 对应 \(2.0,\ 1.41,\ 0.89,\ 0.37\)——肉眼可见越来越对称。下面"调一调"和"练习"里你会亲手跑出这串数。

中心极限定理:k 个独立同分布变量相加,和的分布逐步逼近高斯钟形 中心极限定理:k 个独立同分布变量相加,和的分布趋于高斯 k = 1 偏度 ≈ 2.0 k = 2 偏度 ≈ 1.41 k = 5 偏度 ≈ 0.89 k = 30 偏度 ≈ 0.37 和的直方图(指数分布作基) 高斯参考曲线 偏度 ≈ 2/√k → 0 独立随机性相加,细节被抹平,只剩钟形
中心极限定理:把 k 个独立同分布随机变量相加,k=1→2→5→30 时,和的分布从原始形状逐步逼近钟形高斯。
易错:CLT 说的是"和/平均趋于高斯",不是"原始数据趋于高斯"。把 1000 个指数样本画直方图,它还是右偏的指数形状;只有把"每 30 个一组求和"得到的那些和值画出来,才会是钟形。两者别混。另外需要"独立"且"方差有限"——重尾分布(方差无穷,如柯西)不服从经典 CLT。

调一调,观察现象

下面每个微任务都改一个数、预测一个现象、再跑代码验证。代码只用 numpy + print,几秒跑完。

调一调 1:相关强度 → 椭圆胖瘦

改什么:把协方差矩阵非对角元 \(\rho\) 从 0 调到 0.9。
预期现象:\(\rho=0\) 时两个特征值都接近 1(圆形云);\(\rho\) 越大,最大特征值越接近 \(1+\rho\)、最小越接近 \(1-\rho\),长短轴比 \(\sqrt{(1+\rho)/(1-\rho)}\) 越大,椭圆越扁越斜。
为什么:\(\begin{bmatrix}1&\rho\\\rho&1\end{bmatrix}\) 的特征值正是 \(1\pm\rho\),特征向量恒为 \([1,1],[1,-1]\) 方向。又因为半轴长 \(\propto\sqrt{\text{特征值}}\),所以长短轴比 \(=\sqrt{\lambda_{\max}/\lambda_{\min}}=\sqrt{(1+\rho)/(1-\rho)}\)——相关越强,方差越集中到 45° 那条轴上。

import numpy as np
for rho in [0.0, 0.5, 0.9]:
    Sigma = np.array([[1.0, rho], [rho, 1.0]])
    w, v = np.linalg.eigh(Sigma)          # 升序特征值
    ratio = np.sqrt(w.max() / w.min())     # 长短轴比
    print(f"rho={rho}: eigvals={np.round(w,3)}  长短轴比={ratio:.3f}")

调一调 2:求和项数 → 偏度衰减

改什么:把每组求和的项数 \(k\) 从 1 加到 30(基分布用右偏的指数)。
预期现象:偏度从约 2.0 依次降到约 1.41、0.89、0.37,几乎正好是 \(2/\sqrt{k}\)(理论上 iid 之和的偏度精确等于 \(2/\sqrt{k}\),模拟值有少量采样误差);标准化直方图从"左高右拖尾"变成对称钟形。
为什么:这就是 CLT 的定量版——独立同分布之和的偏度按 \(1/\sqrt{k}\) 衰减。

import numpy as np
rng = np.random.default_rng(0)
N = 200000
def skew(a):
    a = (a - a.mean()) / a.std()
    return np.mean(a**3)
for k in [1, 2, 5, 30]:
    s = rng.exponential(1.0, size=(N, k)).sum(axis=1)   # k 个指数之和
    print(f"k={k:2d}  偏度={skew(s):+.3f}   参考 2/sqrt(k)={2/np.sqrt(k):.3f}")

调一调 3:均匀分布求和 → 钟形

改什么:把 \(k\) 个 \(U(0,1)\) 相加(\(k=1,2,12\)),看标准化后落入各区间的计数。
预期现象(注意标准化后的取值范围):\(k=1\) 时,单个均匀标准化后只落在 \([-\sqrt3,\sqrt3]\approx[-1.73,1.73]\) 内——所以分箱区间 \([-3,3]\) 最外侧的 bin 恒为 0,落在 \([-1.73,1.73]\) 内的中间若干 bin 大致持平(这就是均匀的"平台"),而紧邻平台两端的边缘 bin 因为只覆盖了半格宽度,计数约为中间满 bin 的一半。\(k=2\) 变成三角形;\(k=12\) 时中间高两边低、对称如钟形。再看 |z|<1 占比:它只在 \(k\) 大、接近高斯时才逼近 68.3%——\(k=1\) 时约 57.7%(恰为 \(1/\sqrt3\),因为单个均匀的 \(\pm1\) 标准差只盖住整个平台的 \(1/\sqrt3\)),\(k=2\) 约 65%,\(k=12\) 才到约 67.9%。
为什么:均匀虽"无聊",但相加同样被 CLT 拉成高斯;\(k=12\) 时已非常接近(历史上甚至被用来快速生成近似高斯样本)。

import numpy as np
rng = np.random.default_rng(1)
N = 300000
for k in [1, 2, 12]:
    s = rng.random((N, k)).sum(axis=1)
    z = (s - s.mean()) / s.std()
    # 注意:k=1 时 z 只在 ±sqrt(3)≈±1.73 内,外侧 bin 恒为 0
    counts, _ = np.histogram(z, bins=np.linspace(-3, 3, 13))
    within1 = np.mean(np.abs(z) < 1) * 100
    print(f"k={k:2d}  分箱计数={counts}")
    print(f"        |z|<1 占比={within1:.1f}%  (k=1≈57.7%, 高斯≈68.3%)")

动手练习

  1. 协方差与相关系数。对本课例题数据 \(X=(1,2,3,4,5),\ Y=(1,3,2,5,4)\),用 numpy 算出协方差和相关系数,验证 \(\rho=0.8\)。注意 np.cov 默认除以 \(N-1\),请同时手动算"除以 \(N\)"的版本对比。
    import numpy as np
    X = np.array([1.,2,3,4,5]); Y = np.array([1.,3,2,5,4])
    # np.cov 默认 ddof=1(除以 N-1),ddof=0 除以 N
    C = np.cov(X, Y, ddof=0)          # 2x2 协方差矩阵
    print("协方差矩阵(ddof=0):\n", C)
    rho = C[0,1] / np.sqrt(C[0,0]*C[1,1])
    print("rho =", round(rho, 4))     # 应为 0.8
    print("np.corrcoef:\n", np.round(np.corrcoef(X, Y), 4))
    
  2. 从协方差矩阵生成相关高斯样本。给定 \(\Sigma=\begin{bmatrix}2&1\\1&2\end{bmatrix}\),用 Cholesky 分解 \(\Sigma=LL^\top\) 把标准高斯 \(Z\) 变换成 \(X=LZ\),再用样本估回 \(\Sigma\),验证样本协方差 ≈ 真值。
    import numpy as np
    rng = np.random.default_rng(0)
    Sigma = np.array([[2.,1.],[1.,2.]])
    L = np.linalg.cholesky(Sigma)             # 下三角,LL^T = Sigma
    Z = rng.standard_normal((2, 20000))       # 标准高斯
    Xs = L @ Z                                 # 相关高斯
    print("样本协方差:\n", np.round(np.cov(Xs), 3))   # 应≈[[2,1],[1,2]]
    
  3. 验证"主轴=特征向量、特征值≈各轴方差"。承上题,对样本协方差做特征分解;再把样本点投影到每个特征向量上,算投影的方差,验证它≈对应特征值。
    import numpy as np
    rng = np.random.default_rng(0)
    Sigma = np.array([[2.,1.],[1.,2.]])
    L = np.linalg.cholesky(Sigma)
    Xs = L @ rng.standard_normal((2, 50000))
    S = np.cov(Xs)
    w, V = np.linalg.eigh(S)                    # 特征值(升序) w, 特征向量列 V
    print("特征值:", np.round(w, 3))            # 应≈[1, 3]
    print("特征向量(列):\n", np.round(V, 3))    # 应≈±[1,-1]/√2 和 ±[1,1]/√2
    for i in range(2):
        proj = V[:, i] @ Xs                     # 投影到第 i 个主轴
        print(f"轴{i} 投影方差={proj.var():.3f}  对应特征值={w[i]:.3f}")
    
  4. CLT 偏度实验。用调一调 2 的代码,把基分布从指数换成"掷一颗六面骰"(取值 1–6 均匀),观察 \(k=1,2,5,30\) 个骰子之和的偏度。预测:骰子本身对称,偏度本就≈0,求和后仍≈0,但分布会从"平台→三角→钟形"。打印分箱计数确认形状变化。
  5. 68–95–99.7 自验。采样 \(2\times10^6\) 个标准高斯样本,用 np.mean(np.abs(x)<k) 统计落在 \(\pm1,\pm2,\pm3\) 标准差内的比例,验证≈68.3%、95.5%、99.7%。

掌握自检

下一课我们从"单个/联合分布"转向条件概率与贝叶斯:当我们观察到一部分信息后,如何更新对其余部分的信念?并由此揭示自回归语言模型的概率根——为什么"预测下一个词"本质上是在反复套用条件概率的链式法则,以及那条链上每一环(一个 Categorical 分布)如何用交叉熵来训练。今天的 Categorical 分布与归一化常数,正是那条链上每一环的形状。