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]:
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]:
In [69]:
soln_lagrange
Out[69]:
In [70]:
soln_bound
Out[70]:
In [61]:
In [ ]: