예제 #1
0
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
예제 #2
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
예제 #3
0
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
예제 #4
0
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))
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)