Пример #1
0
def test_get_reg_params():
    """Tests whether get_reg_params works correctly for UoI ElasticNet."""

    X = np.array([[-1, 2], [0, 1], [1, 3], [4, 3]], dtype=float)
    y = np.array([7, 4, 13, 16], dtype=float)

    # calculate regularization parameters manually
    l1_ratio = .5
    alpha_max = np.max(np.dot(X.T, y) / 4) / l1_ratio
    alphas = [{
        'alpha': alpha_max,
        'l1_ratio': .5
    }, {
        'alpha': alpha_max / 10.,
        'l1_ratio': .5
    }]

    # calculate regularization parameters with UoI_ElasticNet object
    enet = UoI_ElasticNet(n_lambdas=2, fit_intercept=False, eps=0.1)
    reg_params = enet.get_reg_params(X, y)

    # check each regularization parameter and key
    for estimate, true in zip(reg_params, alphas):
        assert len(estimate) == len(true)
        for key, value in estimate.items():
            assert_allclose(true[key], value)
Пример #2
0
def test_fit_intercept():
    """Tests whether `include_intercept` in passed through to the linear models.
    """
    enet = UoI_ElasticNet(fit_intercept=True)
    assert enet._selection_lm.fit_intercept
    assert enet._estimation_lm.fit_intercept

    enet = UoI_ElasticNet(fit_intercept=False)
    assert not enet._selection_lm.fit_intercept
    assert not enet._estimation_lm.fit_intercept
Пример #3
0
def test_variable_selection():
    """Test basic functionality of UoI_ElasticNet and that it
    finds right model"""

    X, y, w = make_regression(coef=True, random_state=1)
    enet = UoI_ElasticNet(alphas=[1., .9])
    enet.fit(X, y)
    true_coef = np.nonzero(w)[0]
    fit_coef = np.nonzero(enet.coef_)[0]
    assert_array_equal(true_coef, fit_coef)
    assert_array_almost_equal_nulp(true_coef, fit_coef)
Пример #4
0
def test_uoi_enet_toy():
    """Test UoI ElasticNet on a toy example."""

    X = np.array([[-1, 2], [4, 1], [1, 3], [4, 3], [8, 11]], dtype=float)
    beta = np.array([1, 4], dtype=float)
    y = np.dot(X, beta)
    X = np.tile(X, (3, 1))
    y = np.tile(y, 3)

    # choose selection_frac to be slightly smaller to ensure that we get
    # good test sets
    enet = UoI_ElasticNet(
        fit_intercept=False,
        selection_frac=0.75,
        estimation_frac=0.75,
    )
    enet.fit(X, y)

    assert_allclose(enet.coef_, beta)
Пример #5
0
def test_enet_selection_sweep():
    """Tests uoi_selection_sweep for UoI_ElasticNet."""

    # toy data
    X = np.array([[-1, 2, 3], [4, 1, -7], [1, 3, 1], [4, 3, 12], [8, 11, 2]],
                 dtype=float)
    beta = np.array([1, 4, 2], dtype=float)
    y = np.dot(X, beta)

    # toy regularization
    reg_param_values = [{'alpha': 1.0}, {'alpha': 2.0}]
    enet = UoI_ElasticNet(fit_intercept=True, warm_start=False)
    enet1 = ElasticNet(alpha=1.0, fit_intercept=True, max_iter=enet.max_iter)
    enet2 = ElasticNet(alpha=2.0, fit_intercept=True, max_iter=enet.max_iter)
    enet.output_dim = 1

    coefs = enet.uoi_selection_sweep(X, y, reg_param_values)
    enet1.fit(X, y)
    enet2.fit(X, y)

    assert np.allclose(coefs[0], enet1.coef_)
    assert np.allclose(coefs[1], enet2.coef_)
Пример #6
0
def test_intercept_and_coefs_no_selection():
    """Test that UoI Lasso properly calculates the intercept with and without
    standardization."""
    # create line model
    X, y, beta, intercept = make_linear_regression(n_samples=500,
                                                   n_features=2,
                                                   n_informative=2,
                                                   snr=10.,
                                                   include_intercept=True,
                                                   random_state=2332)

    # without standardization
    enet = UoI_ElasticNet(standardize=False, fit_intercept=True)
    enet.fit(X, y)
    assert_allclose(enet.intercept_, intercept, rtol=0.25)
    assert_allclose(enet.coef_, beta, rtol=0.25)

    # with standardization
    enet = UoI_ElasticNet(standardize=True, fit_intercept=True)
    enet.fit(X, y)
    assert_allclose(enet.intercept_, intercept, rtol=0.25)
    assert_allclose(enet.coef_, beta, rtol=0.25)
Пример #7
0
def test_estimation_score_usage():
    """Test the ability to change the estimation score in UoI ElasticNet."""

    methods = ('r2', 'AIC', 'AICc', 'BIC')
    X, y = make_regression(n_features=10, n_informative=3, random_state=10)
    scores = []
    for method in methods:
        enet = UoI_ElasticNet(estimation_score=method)
        assert_equal(enet.estimation_score, method)
        enet.fit(X, y)
        y_hat = enet.predict(X)
        assert_equal(r2_score(y, y_hat), enet.score(X, y))
        score = np.max(enet.scores_)
        scores.append(score)
    assert_equal(len(np.unique(scores)), len(methods))
Пример #8
0
def test_set_random_state():
    """Tests whether random states are handled correctly."""
    X, y = make_regression(n_features=5,
                           n_informative=3,
                           random_state=16,
                           noise=.5)
    # same state
    l1log_0 = UoI_ElasticNet(random_state=13)
    l1log_1 = UoI_ElasticNet(random_state=13)
    l1log_0.fit(X, y)
    l1log_1.fit(X, y)
    assert_array_equal(l1log_0.coef_, l1log_1.coef_)

    # different state
    l1log_1 = UoI_ElasticNet(random_state=14)
    l1log_1.fit(X, y)
    assert not np.array_equal(l1log_0.coef_, l1log_1.coef_)

    # different state, not set
    l1log_0 = UoI_ElasticNet()
    l1log_1 = UoI_ElasticNet()
    l1log_0.fit(X, y)
    l1log_1.fit(X, y)
    assert not np.array_equal(l1log_0.coef_, l1log_1.coef_)