def test_lasso_path_return_models_vs_new_return_gives_same_coefficients(): # Test that lasso_path with lars_path style output gives the # same result # Some toy data X = np.array([[1, 2, 3.1], [2.3, 5.4, 4.3]]).T y = np.array([1, 2, 3.1]) alphas = [5., 1., .5] # Compute the lasso_path with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) coef_path = [e.coef_ for e in lasso_path(X, y, alphas=alphas, fit_intercept=False)] # Use lars_path and lasso_path(new output) with 1D linear interpolation # to compute the the same path alphas_lars, _, coef_path_lars = lars_path(X, y, method='lasso') coef_path_cont_lars = interpolate.interp1d(alphas_lars[::-1], coef_path_lars[:, ::-1]) alphas_lasso2, coef_path_lasso2, _ = lasso_path(X, y, alphas=alphas, fit_intercept=False, return_models=False) coef_path_cont_lasso = interpolate.interp1d(alphas_lasso2[::-1], coef_path_lasso2[:, ::-1]) np.testing.assert_array_almost_equal(coef_path_cont_lasso(alphas), np.asarray(coef_path).T, decimal=1) np.testing.assert_array_almost_equal(coef_path_cont_lasso(alphas), coef_path_cont_lars(alphas), decimal=1)
def test_lasso_path_return_models_vs_new_return_gives_same_coefficients(): # Test that lasso_path with lars_path style output gives the # same result # Some toy data X = np.array([[1, 2, 3.1], [2.3, 5.4, 4.3]]).T y = np.array([1, 2, 3.1]) alphas = [5., 1., .5] # Compute the lasso_path with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) coef_path = [ e.coef_ for e in lasso_path( X, y, alphas=alphas, return_models=True, fit_intercept=False) ] # Use lars_path and lasso_path(new output) with 1D linear interpolation # to compute the the same path alphas_lars, _, coef_path_lars = lars_path(X, y, method='lasso') coef_path_cont_lars = interpolate.interp1d(alphas_lars[::-1], coef_path_lars[:, ::-1]) alphas_lasso2, coef_path_lasso2, _ = lasso_path(X, y, alphas=alphas, fit_intercept=False, return_models=False) coef_path_cont_lasso = interpolate.interp1d(alphas_lasso2[::-1], coef_path_lasso2[:, ::-1]) np.testing.assert_array_almost_equal(coef_path_cont_lasso(alphas), np.asarray(coef_path).T, decimal=1) np.testing.assert_array_almost_equal(coef_path_cont_lasso(alphas), coef_path_cont_lars(alphas), decimal=1)
def test_ElasticnetWeights(): """Test elastic net with different weight for each predictor alpha: a vector of weight, small # means prior knowledge 1 : means no prior knowledge """ # Has 10 features diabetes = datasets.load_diabetes() # pprint(diabetes) print("Size of data:{}".format(diabetes.data.shape)) X = diabetes.data y = diabetes.target X /= X.std(axis=0) # Standardize data (easier to set the l1_ratio parameter) eps = 5e-3 # the smaller it is the longer is the path alphas = np.arange(2, 4, 0.2) alphas = np.append(alphas, 2.27889) # best aplpha from cv # Computing regularization path using the lasso alphas_lasso, coefs_lasso, _ = lasso_path(X, y, eps, fit_intercept=False, alphas=alphas) # Computing regularization path using the elastic net alphas_enet, coefs_enet, _ = enet_path( X, y, eps=eps, l1_ratio=0.8, fit_intercept=False, alphas=alphas) # ElasticnetCV num_predict = X.shape[1] alphas = np.zeros(num_predict) alphas.fill(1) val = 0.1 alphas[2] = val alphas[3] = val alphas[6] = val enetCV_alpha, enetCV_coef = runPrintResults(X,y, None, "EnetCV") runPrintResults(X,y, alphas, "EnetCVWeight 1") # print("coefs_enet: {}".format(coefs_enet[:, -1])) # print("coefs_lasso: {}".format(coefs_lasso[:, -1])) # Display results plt.figure(1) ax = plt.gca() ax.set_color_cycle(2 * ['b', 'r', 'g', 'c', 'k']) l1 = plt.plot(alphas_lasso, coefs_lasso.T) l2 = plt.plot(alphas_enet, coefs_enet.T, linestyle='--') # repeat alpha for x-axis values for plotting enetCV_alphaVect = [enetCV_alpha] * num_predict l3 = plt.scatter(enetCV_alphaVect, enetCV_coef, marker='x') plt.xlabel('alpha') plt.ylabel('coefficients') plt.title('Lasso and Elastic-Net Paths') plt.legend((l1[-1], l2[-1]), ('Lasso', 'Elastic-Net'), loc='upper right') plt.axis('tight') plt.savefig("fig/lassoEnet")
def test_lasso_path_return_models_vs_new_return_gives_same_coefficients(): # Test that lasso_path with lars_path style output gives the # same result # Some toy data X = np.array([[1, 2, 3.1], [2.3, 5.4, 4.3]]).T y = np.array([1, 2, 3.1]) alphas = [5.0, 1.0, 0.5] # Use lars_path and lasso_path(new output) with 1D linear interpolation # to compute the same path alphas_lars, _, coef_path_lars = lars_path(X, y, method="lasso") coef_path_cont_lars = interpolate.interp1d(alphas_lars[::-1], coef_path_lars[:, ::-1]) alphas_lasso2, coef_path_lasso2, _ = lasso_path(X, y, alphas=alphas, return_models=False) coef_path_cont_lasso = interpolate.interp1d(alphas_lasso2[::-1], coef_path_lasso2[:, ::-1]) assert_array_almost_equal(coef_path_cont_lasso(alphas), coef_path_cont_lars(alphas), decimal=1)
def test_lasso_path_return_models_vs_new_return_gives_same_coefficients(): # Test that lasso_path with lars_path style output gives the # same result # Some toy data X = np.array([[1, 2, 3.1], [2.3, 5.4, 4.3]]).T y = np.array([1, 2, 3.1]) alphas = [5., 1., .5] # Use lars_path and lasso_path(new output) with 1D linear interpolation # to compute the same path alphas_lars, _, coef_path_lars = lars_path(X, y, method='lasso') coef_path_cont_lars = interpolate.interp1d(alphas_lars[::-1], coef_path_lars[:, ::-1]) alphas_lasso2, coef_path_lasso2, _ = lasso_path(X, y, alphas=alphas, return_models=False) coef_path_cont_lasso = interpolate.interp1d(alphas_lasso2[::-1], coef_path_lasso2[:, ::-1]) assert_array_almost_equal( coef_path_cont_lasso(alphas), coef_path_cont_lars(alphas), decimal=1)
def test_ElasticnetWeights(): """Test elastic net with different weight for each predictor alpha: a vector of weight, small # means prior knowledge 1 : means no prior knowledge """ # Has 10 features diabetes = datasets.load_diabetes() # pprint(diabetes) print("Size of data:{}".format(diabetes.data.shape)) X = diabetes.data y = diabetes.target X /= X.std( axis=0) # Standardize data (easier to set the l1_ratio parameter) eps = 5e-3 # the smaller it is the longer is the path alphas = np.arange(2, 4, 0.2) alphas = np.append(alphas, 2.27889) # best aplpha from cv # Computing regularization path using the lasso alphas_lasso, coefs_lasso, _ = lasso_path(X, y, eps, fit_intercept=False, alphas=alphas) # Computing regularization path using the elastic net alphas_enet, coefs_enet, _ = enet_path(X, y, eps=eps, l1_ratio=0.8, fit_intercept=False, alphas=alphas) # ElasticnetCV num_predict = X.shape[1] alphas = np.zeros(num_predict) alphas.fill(1) val = 0.1 alphas[2] = val alphas[3] = val alphas[6] = val enetCV_alpha, enetCV_coef = runPrintResults(X, y, None, "EnetCV") runPrintResults(X, y, alphas, "EnetCVWeight 1") # print("coefs_enet: {}".format(coefs_enet[:, -1])) # print("coefs_lasso: {}".format(coefs_lasso[:, -1])) # Display results plt.figure(1) ax = plt.gca() ax.set_color_cycle(2 * ['b', 'r', 'g', 'c', 'k']) l1 = plt.plot(alphas_lasso, coefs_lasso.T) l2 = plt.plot(alphas_enet, coefs_enet.T, linestyle='--') # repeat alpha for x-axis values for plotting enetCV_alphaVect = [enetCV_alpha] * num_predict l3 = plt.scatter(enetCV_alphaVect, enetCV_coef, marker='x') plt.xlabel('alpha') plt.ylabel('coefficients') plt.title('Lasso and Elastic-Net Paths') plt.legend((l1[-1], l2[-1]), ('Lasso', 'Elastic-Net'), loc='upper right') plt.axis('tight') plt.savefig("fig/lassoEnet")