def test_poisson_reg_params(): """Test whether the upper bound on the regularization parameters correctly zero out the coefficients.""" n_features = 5 n_samples = 1000 X, y, beta, intercept = make_poisson_regression( n_samples=n_samples, n_features=n_features, n_informative=n_features, random_state=2332) alpha_sets = [np.array([0.5]), np.array([1.0])] for alpha_set in alpha_sets: uoi_poisson = UoI_Poisson(alphas=alpha_set) reg_params = uoi_poisson.get_reg_params(X, y) alpha = reg_params[0]['alpha'] l1_ratio = reg_params[0]['l1_ratio'] # check that coefficients get set to zero poisson = Poisson(alpha=1.01 * alpha, l1_ratio=l1_ratio, standardize=False, fit_intercept=True) poisson.fit(X, y) assert_equal(poisson.coef_, 0.) # check that coefficients below the bound are not set to zero poisson = Poisson(alpha=0.99 * alpha, l1_ratio=l1_ratio, standardize=False, fit_intercept=True) poisson.fit(X, y) assert np.count_nonzero(poisson.coef_) > 0
def test_fit_intercept(): """Tests whether `include_intercept` in passed through to the linear models. """ poi = UoI_Poisson(fit_intercept=True) assert poi._selection_lm.fit_intercept assert poi._estimation_lm.fit_intercept poi = UoI_Poisson(fit_intercept=False) assert not poi._selection_lm.fit_intercept assert not poi._estimation_lm.fit_intercept
def test_poisson(): """Test basic functionality of UoI_Lasso and that it finds right model""" n_features = 20 n_inf = 10 X, y, w, b = make_poisson_regression(n_samples=200, n_features=n_features, n_informative=n_inf, random_state=10) poisson = UoI_Poisson(comm=MPI.COMM_WORLD) poisson.fit(X, y) assert (np.sign(abs(w)) == np.sign(abs(poisson.coef_))).mean() >= .6
def test_UoI_Poisson_all_zeros(): """Test that UoI Poisson correctly fits the data when the response variable is all zeros.""" n_features = 5 n_samples = 100 X = np.random.normal(size=(n_samples, n_features)) y = np.zeros(n_samples) poisson = UoI_Poisson() poisson.fit(X, y) assert_equal(poisson.intercept_, -np.inf) assert_equal(poisson.coef_, np.zeros(n_features))
def test_score_predictions(): """Test the score predictions function in UoI Poisson.""" X = np.array([[np.log(2), -1, -3], [np.log(3), -2, -4], [np.log(4), -3, -5], [np.log(5), -4, -6]]) y = 1. / np.log([2., 3., 4., 5.]) support = np.array([True, False, False]) # create fitter by hand fitter = Poisson() fitter.coef_ = np.array([1]) fitter.intercept_ = 0 # test log-likelihood ll = UoI_Poisson.score_predictions(metric='log', fitter=fitter, X=X, y=y, support=support) assert_almost_equal(ll, -2.5) # test information criteria aic = UoI_Poisson.score_predictions(metric='AIC', fitter=fitter, X=X, y=y, support=support) assert_almost_equal(aic, 2 * ll - 2) aicc = UoI_Poisson.score_predictions(metric='AICc', fitter=fitter, X=X, y=y, support=support) assert_almost_equal(aicc, aic - 2) bic = UoI_Poisson.score_predictions(metric='BIC', fitter=fitter, X=X, y=y, support=support) assert_almost_equal(bic, 2 * ll - np.log(y.size)) # test invalid metric assert_raises(ValueError, UoI_Poisson.score_predictions, 'fake', fitter, X, y, support)
def test_UoI_Poisson(): """Tests the UoI Poisson fitter with lbfgs solver.""" n_features = 3 n_samples = 5000 # create data X, y, beta, _ = make_poisson_regression(n_samples=n_samples, n_features=n_features, n_informative=n_features, beta=np.array([0., 1.0, 1.5]), random_state=2332) # lbfgs poisson = UoI_Poisson(n_lambdas=48, n_boots_sel=30, n_boots_est=30, alphas=np.array([1.0]), warm_start=False) poisson.fit(X, y) assert_allclose(poisson.coef_, beta, atol=0.5)
def test_estimation_target(): """Verify the ability for the user to set the estimation taget variable""" # Assess r2 on train data uoi = UoI_Lasso(estimation_score='r2', estimation_target='train') # train gets converted to the index 0 assert (uoi._estimation_target == 0) # Assess BIC on test data uoi = UoI_Lasso(estimation_score='BIC', estimation_target='test') # Assess r2 on train data uoi = UoI_ElasticNet(estimation_score='r2', estimation_target='train') # train gets converted to the index 0 assert (uoi._estimation_target == 0) # Assess BIC on test data uoi = UoI_ElasticNet(estimation_score='BIC', estimation_target='test') assert (uoi._estimation_target == 1) uoi = UoI_L1Logistic(estimation_score='acc', estimation_target='train') assert (uoi._estimation_target == 0) uoi = UoI_L1Logistic(estimation_score='BIC', estimation_target='test') assert (uoi._estimation_target == 1) uoi = UoI_Poisson(estimation_score='acc', estimation_target='train') assert (uoi._estimation_target == 0) uoi = UoI_Poisson(estimation_score='BIC', estimation_target='test') assert (uoi._estimation_target == 1)