分类:高维统计 / 稀疏回归 / 随机矩阵
高维建模的第一步不是选算法,而是判断任务是否越过信息边界。本节用两个经典模型建立这种边界感:加性尖峰模型看低秩信号能否从噪声谱中突出,稀疏回归看稀疏度与样本量的相对尺度。
1. 加性尖峰模型
设观测矩阵为
X=λuv∗⊤+Z, X=\lambda u v_*^{\top}+Z, X=λuv∗⊤+Z,
其中 uuu、v∗v_*v∗ 是单位方向,ZZZ 是噪声矩阵,p/n→δp/n\to\deltap/n→δ。我们想知道最大奇异向量 v^\hat vv^ 是否包含 v∗v_*v∗ 的信息。
如图1所示,可学性判断可以拆成两条分支。
图1 可学性判断树。黄色是输入,绿色是可行路径,紫色是输出,红色是退化路径。
2. 谱峰相变
把噪声谱画出来,最大奇异向量只有在信号峰越过噪声谱右端时,才会携带真实方向信息。弱恢复阈值是
λ>δ1/4. \lambda>\delta^{1/4}. λ>δ1/4.
越过阈值后,相关度满足
∣⟨v^,v∗⟩∣2→1−δ/λ41+δ/λ2. |\langle \hat v,v_*\rangle|^2 \to \frac{1-\delta/\lambda^4}{1+\delta/\lambda^2}. ∣⟨v^,v∗⟩∣2→1+δ/λ21−δ/λ4.
把这个公式翻译成谱图:分子只有当 λ4>δ\lambda^4>\deltaλ4>δ 时才为正,这正好对应信号峰越过噪声谱。
3. 稀疏回归的极小极大最优
稀疏线性回归模型为
yi=xi⊤β∗+zi,zi∼N(0,σ2). y_i=x_i^{\top}\beta_*+z_i,\qquad z_i\sim N(0,\sigma^2). yi=xi⊤β∗+zi,zi∼N(0,σ2).
当稀疏度满足
klog(p/k)n→0 \frac{k\log(p/k)}{n}\to 0 nklog(p/k)→0
时,总风险尺度上的极小极大误差为
2klog(p/k). 2k\log(p/k). 2klog(p/k).
SLOPE 通过调整逐坐标惩罚达到该最优阶,因此它不只是另一个惩罚方法,而是针对稀疏度未知问题设计的自适应方法。
4. LASSO 的比例渐近
当 k/p→ϵk/p\to\epsilonk/p→ϵ、n/p→δn/p\to\deltan/p→δ 时,LASSO 的参数误差不再消失,而是由固定点方程决定:
1p∥β^L−β∗∥2→E[η(B+mZ;τm)−B]2. \frac{1}{p}\|\hat\beta^{\mathrm{L}}-\beta_*\|^2 \to \mathbb{E}\big[\eta(B+mZ;\tau m)-B\big]^2. p1∥β^L−β∗∥2→E[η(B+mZ;τm)−B]2.
这里 BBB 是真实信号分布,ZZZ 是标准高斯变量,τ,m\tau,mτ,m 由自洽方程组确定。工程含义很直接:算法和调参都正确,比例渐近下仍可能存在不可消除的估计偏差。
5. 两个例子共同告诉我们的边界
| 问题 | 关键参数 | 边界 | 可学对象 |
|---|---|---|---|
| 尖峰矩阵 | λ,δ\lambda,\deltaλ,δ | λ>δ1/4\lambda>\delta^{1/4}λ>δ1/4 | 弱恢复方向 |
| 稀疏回归 | k,p,nk,p,nk,p,n | klog(p/k)/n→0k\log(p/k)/n\to0klog(p/k)/n→0 | 极小最大风险 |
| LASSO | k/p,n/pk/p,n/pk/p,n/p | 比例渐近固定点 | 风险而非一致性 |
6. 工程判断
- 逐坐标信噪比很低时,低秩结构仍可能通过集体放大实现弱恢复。
- LASSO 不一致不代表算法写错,而是稀疏度与样本量进入了新的渐近区域。
- 先判断任务是否越过相变边界,再比较算法,比直接堆测试集更有价值。
在部署中,应先计算 p/np/np/n、稀疏度占比和谱峰位置,再决定模型评估口径。
认知检查点:尖峰模型看谱峰是否越过噪声谱,稀疏回归看稀疏度与样本量的比值;两条边界共同构成高维可学性判断入口。
附:代码实验与输出
实验分两部分:尖峰矩阵在不同 λ\lambdaλ 下的弱恢复相关度,以及 LASSO 在稀疏区与比例渐近区的逐坐标均方误差。
import numpy as np
from sklearn.linear_model import Lasso
def spiked_corr(n, p, lam, seed=0):
rng = np.random.default_rng(seed)
u = rng.normal(size=n); u /= np.linalg.norm(u)
v = rng.normal(size=p); v /= np.linalg.norm(v)
Z = rng.normal(size=(n, p)) / np.sqrt(n)
X = lam * np.outer(u, v) + Z
_, _, Vt = np.linalg.svd(X, full_matrices=False)
vhat = Vt[0]
return float(abs(np.dot(vhat, v)))
print("spiked model: n=400, p=200, delta=0.5, threshold=delta^(1/4)=0.8409")
for lam in [0.60, 0.84, 1.20]:
print(f"lambda={lam:.2f} corr={spiked_corr(400, 200, lam):.4f}")
def sparse_case(n, p, k, alpha, seed=0):
rng = np.random.default_rng(seed)
beta = np.zeros(p)
beta[:k] = 1.0
X = rng.normal(size=(n, p))
y = X @ beta + rng.normal(size=n)
model = Lasso(alpha=alpha, max_iter=5000)
model.fit(X, y)
return float(np.mean((model.coef_ - beta) ** 2))
print("sparse regression: sparse regime")
print(f"k=5 p=200 n=300 per_coord_mse={sparse_case(300, 200, 5, 0.02):.4f}")
print("sparse regression: proportional regime")
print(f"k=50 p=200 n=120 per_coord_mse={sparse_case(120, 200, 50, 0.05):.4f}")
实验输出:
spiked model: n=400, p=200, delta=0.5, threshold=delta^(1/4)=0.8409
lambda=0.60 corr=0.1929
lambda=0.84 corr=0.3967
lambda=1.20 corr=0.7493
sparse regression: sparse regime
k=5 p=200 n=300 per_coord_mse=0.0021
sparse regression: proportional regime
k=50 p=200 n=120 per_coord_mse=0.0815
尖峰矩阵中 λ=1.20\lambda=1.20λ=1.20 时相关度明显升高;稀疏回归中,k=5k=5k=5 的稀疏区误差很低,k=50k=50k=50 的比例渐近区误差明显上升。边界判断直接影响后续工具选择。

1683

被折叠的 条评论
为什么被折叠?



