参数说明

p: 精度矩阵维度(节点数)。控制变量个数,越大计算和样本需求越高。示例常用 20–100。
n_samples: 时间序列长度(样本数 T)。影响估计稳定性与 Glasso/节点回归的有效样本数。
gamma_list: 控制图强度的列表(影响 W 的规模和 Laplacian)。值越大,变量间交互越强。函数会对每个 gamma 生成一次真实 Theta。
sparsity: 生成图的稀疏程度(edge 密度)。0–1 之间,越小越稀疏(例如 0.05–0.2 常见)。
alpha_time: 时间动力学项 alpha(用于生成 A = I - alpha * L 及 temporal prediction)。值很小(如 0.01–0.05)表示较弱的时间耦合。
lam_list: 正则化参数列表(用于 Glasso 与 nodewise Lasso)。会逐个测试;Glass0 的 alpha 对应稀疏强度,取值范围通常 0.01–1。注意 nodewise 的实际正则化在代码中还按 sqrt(2 ln p / n) 缩放。
noise_list: 加入到生成 X_time 的高斯噪声标准差列表(数据噪声强度)。
P_list: 多节点预测中“缺失/要预测”的节点数列表(每个试验选择 P 个 missing)。必须小于 p。P=0 表示不缺失(但意义较小)。
test_ratio: 训练/测试分割比例(用于 time-series;测试集大小 = floor(n_samples * test_ratio))。
repeat_multi: multi-node 随机模式重复次数(每个 P 随机采样 repeat_multi 次以估计平均 MSE)。
seed: 随机种子(用于可复现的图和数据生成)。若希望完全可重复,要在所有生成函数中使用固定 seed。
save_csv: 输出结果 CSV 文件名。
参数如何在代码中被使用(关键点)

gamma_list、sparsity → 通过 generate_theta_with_correlation 生成真实 Theta/L/W。
n_samples、alpha_time → 通过 generate_temporal_data_from_graph 生成时间序列 X_time 和 A_true。
lam_list 中每个 lam → 同时喂给 estimate_glasso_sklearn 与 nodewise_lasso_precision(注意 nodewise 内部有额外缩放)。
P_list → 在 multi_node_prediction_mse_on_test 中作为不同缺失数目循环。
test_ratio 决定 train/test 切分点(时间顺序,不打乱,除非 shuffle=True)。
repeat_multi 决定多节点预测的随机重复次数(seed=None 表示每次不同随机抽样)。
如何调整参数完成实验(建议)

若要做单因素扫参(例如不同 lambda):把 lam_list 设为想测的值列表;保持其他参数固定,运行一次脚本。
做网格搜索(gamma × lambda × noise):在 gamma_list 与 lam_list 与 noise_list 中放多个值,脚本会穷举组合并把每次结果追加到 CSV。
控制计算规模:减小 p 或 n_samples,或缩小参数组合数量(避免组合爆炸)。
可复现性:固定 seed 并避免 shuffle=True,或把 rng 种子统一传入子函数。
避免数值问题:若 Glasso 报错,代码已实现指数回退(increase alpha)和 Ledoit-Wolf 备份;若经常发生,尝试增加 lam、增加 n_samples 或降低 p

image
image


二、先从“你原实验在干什么”说起(给小白视角)

你的整体实验逻辑是:

  1. 构造一个真实精度矩阵 Θ_true
  2. 从中采样图信号
  3. 用有限样本去估计 Θ_hat
  4. 用 Θ_hat 做预测
  5. 比较 MSE

👉 那么问题来了:
哪些参数决定“这件事难不难”?

答案就是:
γ 决定“真实世界长什么样”
λ 决定“你怎么逼近它”


三、γ(gamma):图本身“有多强”的控制旋钮

1️⃣ γ 在你代码/实验里的本质作用

在你的 synthetic graph 里,γ 通常控制的是:

  • 邻接边权的强度
  • 或精度矩阵中 非对角元素的幅度

直觉翻译成一句话:

γ 越大,节点之间“绑得越紧”


2️⃣ γ 变大会发生什么?(非常直观)

γ 很小(比如 0.05)

  • 图很“弱”

  • 节点之间几乎独立

  • missing 一个节点:

    • 其他节点给不了太多信息
  • 👉 预测本身就很难

结果表现为:

  • 三种方法 MSE 都高
  • 方法间差距可能不明显

γ 适中(比如 0.2)

  • 图结构清晰
  • 有相关性,但不过强
  • 👉 这是最“健康”的实验区间

你现在用 γ=0.2
👉 非常合理,导师不会挑你这个


γ 很大(比如 0.5+)

  • 图非常强相关
  • 条件期望几乎是“线性确定的”
  • 👉 预测变得“太容易”

但副作用是:

  • Θ_true 条件数可能变大
  • MLE / BCD 更容易数值不稳定
  • Lasso 更占优势

3️⃣ γ 在论文里的“角色定位”

你以后写论文时可以这样说(我帮你翻译成学术逻辑):

γ controls the strength of dependencies in the underlying graph signal model, and therefore determines the intrinsic difficulty of the prediction task.

1️⃣ λ 是干嘛的?(一句话)

λ 决定你在多大程度上惩罚非零边

  • λ = 0
    👉 接近 MLE(全连接、易过拟合)

  • λ ↑
    👉 更稀疏、更稳健


2️⃣ λ 对不同方法的意义

🔵 对 Glasso

目标函数本质是:

[
\min_\Theta
;;
\text{tr}(S\Theta) - \log\det\Theta + \lambda |\Theta|_1
]

λ 控制的是:

  • 边的数量
  • 假边(noise-induced edges)
  • 数值稳定性

👉 λ 太小:

  • 图太密
  • 预测时矩阵接近奇异
  • MSE 反而可能变大

👉 λ 太大:

  • 图太稀
  • 真实依赖被删掉
  • MSE 上升

👉 存在一个“sweet spot”


🟢 对 BCD(你自己实现的)

  • λ 是显式 sparsity 控制

  • 影响:

    • 收敛速度
    • 是否陷入坏的局部解
    • Θ_mm 是否可逆

🔵 对 MLE

严格来说:

  • MLE 没有 λ

  • 但你在实验中:

    • 要么人为加了
    • 要么隐式通过子样本 / 阈值控制

所以在对比中:

MLE = “无正则”的基线
Glasso / BCD = “有正则”的稳定版本