kiruluta's picture
Upload folder using huggingface_hub
1398681 verified
Raw History Blame
855 Bytes
"""Sparse-group recovery: exact-support recovery on clean synthetic data."""
import numpy as np
from spectra_rsi.recovery import sparse_group_recover, debias, active_groups
def test_group_recovery_identifies_support():
rng = np.random.default_rng(0)
p, n_groups = 32, 8
groups = [np.arange(i * 4, (i + 1) * 4) for i in range(n_groups)]
x_true = np.zeros(p)
x_true[groups[2]] = rng.normal(0, 1, 4)
x_true[groups[5]] = rng.normal(0, 1, 4)
M = rng.normal(0, 1 / np.sqrt(60), (60, p))
y = M @ x_true + 0.01 * rng.normal(size=60)
gw = np.ones(n_groups)
x_hat = sparse_group_recover(y, M, groups, gw, 1e-3, 5e-3, n_iters=800)
x_deb, _ = debias(y, M, x_hat)
act, _ = active_groups(x_deb, groups, rel_tol=0.1)
assert set(act) == {2, 5}
assert np.linalg.norm(x_deb - x_true) / np.linalg.norm(x_true) < 0.1