y += 0.01*np.random.normal((n_samples,)) # Split data in train set and test set n_samples = X.shape[0] X_train, y_train = X[:n_samples/2], y[:n_samples/2] X_test, y_test = X[n_samples/2:], y[n_samples/2:] ################################################################################ # Lasso from scikits.learn.glm import Lasso alpha = 0.1 lasso = Lasso(alpha=alpha) y_pred_lasso = lasso.fit(X_train, y_train).predict(X_test) print lasso print "r^2 on test data : %f" % (1 - np.linalg.norm(y_test - y_pred_lasso)**2 / np.linalg.norm(y_test)**2) ################################################################################ # ElasticNet from scikits.learn.glm import ElasticNet enet = ElasticNet(alpha=alpha, rho=0.7) y_pred_enet = enet.fit(X_train, y_train).predict(X_test) print enet print "r^2 on test data : %f" % (1 - np.linalg.norm(y_test - y_pred_enet)**2 / np.linalg.norm(y_test)**2)
def test_enet_toy(): """ Test ElasticNet for various parameters of alpha and rho. Actualy, the parameters alpha = 0 should not be alowed. However, we test it as a border case. """ X = [[-1], [0], [1]] Y = [-1, 0, 1] # just a straight line T = [[2], [3], [4]] # test sample # this should be the same as lasso clf = ElasticNet(alpha=0, rho=1.0) clf.fit(X, Y) pred = clf.predict(T) assert_array_almost_equal(clf.coef_, [1]) assert_array_almost_equal(pred, [2, 3, 4]) assert_almost_equal(clf.dual_gap_, 0) clf = ElasticNet(alpha=0.5, rho=0.3) clf.fit(X, Y, maxit=1000) pred = clf.predict(T) assert_array_almost_equal(clf.coef_, [0.50819], decimal=3) assert_array_almost_equal(pred, [1.0163, 1.5245, 2.0327], decimal=3) assert_almost_equal(clf.dual_gap_, 0) clf = ElasticNet(alpha=0.5, rho=0.5) clf.fit(X, Y) pred = clf.predict(T) assert_array_almost_equal(clf.coef_, [0.45454], 3) assert_array_almost_equal(pred, [0.9090, 1.3636, 1.8181], 3) assert_almost_equal(clf.dual_gap_, 0)