BBt_solve = trn.BBt_solver() mu = 100.0 phi_map2 = salsa.l1_proximity_map(1, mu) x2, u2 = salsa.bp_salsa( B, Bt, BBt_solve, tst_col, phi1, phi_map2, n_iter=400, x0=x0, verbose=True, save_sol=True, rtol=1e-6 ) # C-SALSA # let phi_map be the same as above # make a new solver for (BtB + I) eps = 1e-5 BtBpI_solve = trn.BtBpI_solver(mu=1) phi_map2 = salsa.l1_proximity_map(1, 10.) x3, u3 = salsa.c_salsa( B, Bt, BtBpI_solve, tst_col, eps, phi1, phi_map2, n_iter=400, x0=x0, verbose=True, save_sol=True, rtol=1e-6 ) # see how much u is changing du1 = np.diff(u1, axis=0) du2 = np.diff(u2, axis=0) du3 = np.diff(u3, axis=0) ndu1 = np.array([np.linalg.norm(du) for du in du1]) ndu2 = np.array([np.linalg.norm(du) for du in du2]) ndu3 = np.array([np.linalg.norm(du) for du in du3]) del du1, du2, du3 # resids r1 = B*u1.T - tst_col[:,None] r1 = np.sqrt((r1**2).sum(axis=0)) r2 = B*u2.T - tst_col[:,None] r2 = np.sqrt((r2**2).sum(axis=0))
# quadratic + l1 regularize SALSA x1, u1 = salsa.qreg_salsa( A, At, AtA_solve, tst_col, phi1, phi_map1, mu, x0=mmse_x, rtol=1e-4, save_sol=True, n_iter=200 ) # C-SALSA # let phi_map be the same as above # make a new solver for (BtB + I) AtApI_solve = trn.AtApI_solver(mu=1) mu2 = float(n) / len(cls_cols) mu2 = 15. phi_map2 = salsa.l1_proximity_map(1, n) eps = 5e-3 x2, u2 = salsa.c_salsa( A, At, AtApI_solve, tst_col, eps, phi1, phi_map2, x0=mmse_x, rtol=1e-4, n_iter=400, save_sol=True ) # see how much u is changing du1 = np.diff(u1, axis=0) du2 = np.diff(u2, axis=0) ndu1 = np.array([np.linalg.norm(du) for du in du1]) ndu2 = np.array([np.linalg.norm(du) for du in du2]) del du1, du2 # resids r1 = A*u1.T - tst_col[:,None] r1 = np.sqrt((r1**2).sum(axis=0)) r2 = A*u2.T - tst_col[:,None] r2 = np.sqrt((r2**2).sum(axis=0)) # L1 norm p1 = np.sum(np.abs(u1), axis=1)