def test_MultiTaskLassoCV(): """Test that our MultitaskLassoCV behaves like sklearn's.""" X, y = build_dataset(n_samples=30, n_features=50, n_targets=3) params = dict(eps=1e-2, n_alphas=10, tol=1e-10, cv=2, n_jobs=1, fit_intercept=False, verbose=2) clf = MultiTaskLassoCV(**params) clf.fit(X, y) clf2 = sklearn_MultiTaskLassoCV(**params) clf2.max_iter = 10000 # increase max_iter bc of low tol clf2.fit(X, y) np.testing.assert_allclose(clf.mse_path_, clf2.mse_path_, atol=1e-4, rtol=1e-04) np.testing.assert_allclose(clf.alpha_, clf2.alpha_, atol=1e-4, rtol=1e-04) np.testing.assert_allclose(clf.coef_, clf2.coef_, atol=1e-4, rtol=1e-04) # check_estimator tests float32 so using tol < 1e-7 causes precision # issues clf.tol = 1e-5 check_estimator(clf)
def test_dropin_MultiTaskLassoCV(): """Test that our LassoCV behaves like sklearn's LassoCV.""" X, y, _, _ = build_dataset(n_samples=30, n_features=50, n_targets=3) params = dict(eps=1e-1, n_alphas=100, tol=1e-10, cv=2, n_jobs=2, fit_intercept=False, verbose=True) clf = MultiTaskLassoCV(**params) clf.fit(X, y) clf2 = sklearn_MultiTaskLassoCV(**params) clf2.fit(X, y) np.testing.assert_allclose(clf.mse_path_, clf2.mse_path_, rtol=1e-04) np.testing.assert_allclose(clf.alpha_, clf2.alpha_, rtol=1e-05) np.testing.assert_allclose(clf.coef_, clf2.coef_, rtol=1e-05) check_estimator(MultiTaskLassoCV)
n_relevant_features = 20 support = rng.choice(n_features, n_relevant_features, replace=False) coef = np.zeros((n_tasks, n_features)) times = np.linspace(0, 2 * np.pi, n_tasks) for k in support: coef[:, k] = np.sin((1. + rng.randn(1)) * times + 3 * rng.randn(1)) X = rng.randn(n_samples, n_features) Y = np.dot(X, coef.T) + rng.randn(n_samples, n_tasks) Y /= norm(Y, ord='fro') ############################################################################### # Fit with sklearn and celer, using the same API params = dict(tol=1e-6, cv=4, n_jobs=-1) t0 = time.perf_counter() clf = MultiTaskLassoCV(**params).fit(X, Y) t_celer = time.perf_counter() - t0 t0 = time.perf_counter() clf_sklearn = linear_model.MultiTaskLassoCV(**params).fit(X, Y) t_sklearn = time.perf_counter() - t0 ############################################################################### # Celer is faster print("Time for celer : %.2f s" % t_celer) print("Time for sklearn: %.2f s" % t_sklearn) ############################################################################### # Both packages find the same solution print("Celer's optimal regularizer : %s" % clf.alpha_) print("Sklearn's optimal regularizer: %s" % clf_sklearn.alpha_)