Skip to content

TST add sparse group lasso testing against GSROPTIM #268

Open
@mathurinm

Description

@mathurinm

for the record, if one want s to compare against gsrpotim (by Eugene Ndiaye), here's a script showing that we get the same results:

from skglm.utils.data import make_correlated_data
from skglm.datafits import QuadraticGroup
from skglm.penalties import WeightedL1GroupL2
from skglm import GeneralizedLinearEstimator
from skglm.utils.data import (make_correlated_data, grp_converter)
from skglm.solvers import GroupBCD

from gsroptim.sgl import sgl_path


import numpy as np

n_features = 30
n_samples= 40
X, y, _ = make_correlated_data(n_features=n_features, n_samples=n_samples, random_state=0)

grp_indices, grp_ptr = grp_converter(3, n_features)
n_groups = len(grp_ptr) - 1

alpha = 0.1
weights_g = np.ones(n_groups, dtype=np.float64)
# beware of tau in GSR optim implem: need to scale alpha by 2
res = sgl_path(X, y, size_groups=[3] * n_groups, lambdas=[alpha*2 * n_samples], omega=weights_g)[0]

weights_f = 1. * np.ones(n_features)
pen = WeightedL1GroupL2(
    alpha=alpha, weights_groups=weights_g,
    weights_features=weights_f, grp_indices=grp_indices, grp_ptr=grp_ptr)

solver = GroupBCD(ws_strategy="fixpoint", verbose=3,
                    fit_intercept=False, tol=1e-10)

model = GeneralizedLinearEstimator(
    QuadraticGroup(grp_ptr, grp_indices), pen, solver=solver)

model.fit(X, y)
print(model.coef_.reshape([-1, 3]))
print(res.reshape([-1, 3]))

gsroptim requires a bit of work to install on the CI but it's doable

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions