In [1]:
import numpy as np
import regreg.api as rr

In [54]:
n, p = 100, 20

X = np.random.standard_normal((n,p))
Y = np.random.standard_normal(n)
beta = np.zeros(p)
beta[:3] = 10.
loss = rr.squared_error(X, Y)

dual = penalty.conjugate
Lmax = dual.seminorm(-np.dot(X.T,Y))
Lmax


Out[54]:
15.01288502162719

In [55]:
groups = [0]*3 + [1]*4 + [2]*(p-7)
penalty = rr.group_lasso(groups, lagrange=0.7 * Lmax)

In [66]:
lagrange_problem = rr.simple_problem(loss, penalty)
soln_lagrange = lagrange_problem.solve(tol=1.e-10, coef_stop=True)

In [67]:
value = penalty.seminorm(soln_lagrange)
constraint = rr.group_lasso(groups, bound=value)

bound_problem = rr.simple_problem(loss, constraint)
soln_bound = bound_problem.solve(tol=1.e-10, coef_stop=True)

In [68]:
np.linalg.norm(soln_lagrange-soln_bound)/np.linalg.norm(soln_lagrange)


Out[68]:
3.8296072836669753e-07

In [69]:
soln_lagrange


Out[69]:
array([-0.06962199,  0.05301579, -0.01429843,  0.00790892, -0.02705417,
        0.01984686, -0.00679801, -0.        ,  0.        ,  0.        ,
        0.        ,  0.        , -0.        ,  0.        , -0.        ,
        0.        , -0.        ,  0.        , -0.        , -0.        ])

In [70]:
soln_bound


Out[70]:
array([-0.06962197,  0.05301578, -0.01429843,  0.00790892, -0.02705418,
        0.01984688, -0.00679802,  0.        ,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ])

In [61]:


In [ ]: