def set_data(self, data): X, Y = data self._transform = astransform(X) self._X = X self._is_transform = id(self._X) == id( self._transform) # i.e. astransform was a nullop self._Y = Y
def restricted_Mest(Mest_loss, active, solve_args={'min_its':50, 'tol':1.e-10}): """ Fit a restricted model using only columns `active`. Parameters ---------- Mest_loss : objective function A GLM loss. active : ndarray Which columns to use. solve_args : dict Passed to `solve`. Returns ------- soln : ndarray Solution to restricted problem. """ X, Y = Mest_loss.data if not Mest_loss._is_transform and hasattr(Mest_loss, 'saturated_loss'): # M_est is a glm X_restricted = X[:,active] loss_restricted = rr.affine_smooth(Mest_loss.saturated_loss, X_restricted) else: I_restricted = ra.selector(active, ra.astransform(X).input_shape[0], ra.identity((active.sum(),))) loss_restricted = rr.affine_smooth(Mest_loss, I_restricted.T) beta_E = loss_restricted.solve(**solve_args) return beta_E
def test_admm(n=100, p=10): X = np.random.standard_normal((n, p)) Y = np.random.standard_normal(n) loss = rr.squared_error(X, Y) D = np.identity(p) pen = rr.l1norm(p, lagrange=1.5) ADMM = admm_problem(loss, pen, ra.astransform(D), 0.5) ADMM.solve(niter=1000) coef1 = ADMM.atom_coefs problem2 = rr.simple_problem(loss, pen) coef2 = problem2.solve(tol=1.e-12, min_its=500) np.testing.assert_allclose(coef1, coef2, rtol=1.e-3, atol=1.e-4)