示例#1
0
def test_p_spline_fitting_with_dataframe():
    spline_fitter = psgam.PSplineGAM()

    spline_fitter.train(data_df, target)

    assert spline_fitter.feature_names == data_df.columns.tolist()
    assert set(spline_fitter.shapes.keys()) == set(data_df.columns.tolist())
示例#2
0
def test_p_spline_fitting():
    spline_fitter = psgam.PSplineGAM()

    spline_fitter.train(data, target)

    np.testing.assert_array_almost_equal(spline_fitter.predict(data[:10, :]), [
        0.3802, 0.0779, 0.2968, 0.2203, 0.6047, 0.1293, 0.3326, 0.248, 0.1509,
        0.1438
    ], 4)
示例#3
0
def test_p_spline_fitting():
    spline_fitter = psgam.PSplineGAM(max_iter=10)

    spline_fitter.train(data, target)

    np.testing.assert_array_almost_equal(spline_fitter.predict(data[:10, :]), [
        0.38010625884484806, 0.078015764411492383, 0.29677559014935362,
        0.21998755394156164, 0.60436774552322059, 0.12905647770342621,
        0.33253440991848549, 0.24778384843818288, 0.15079040243134087,
        0.14349952871877761
    ], 4)
示例#4
0
def test_p_spline_penaly_matrix():
    test_data = data[:, :2]
    spline_fitter = psgam.PSplineGAM(num_percentiles=2)

    spline_fitter.train(test_data, target, penalty=1e10)
    np.testing.assert_array_almost_equal(
        spline_fitter._penalty_matrix(),
        [[0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0.],
         [0., 0., 51.19281748, 58.50501563, 0., 44.01780014, 30.33585812],
         [0., 0., 58.50501563, 188.53382674, 0., 92.35072019, 316.43060196],
         [0., 0., 0., 0., 0., 0., 0.],
         [0., 0., 44.01780014, 92.35072019, 0., 52.3778662, 123.45090538],
         [0., 0., 30.33585812, 316.43060196, 0., 123.45090538, 670.46456651]],
        6)
示例#5
0
def test_get_basis_matrix_for_array():
    gam = psgam.PSplineGAM(num_percentiles=5)

    arr = np.random.uniform(size=(100, 2))

    gam.feature_names = ['feature_0', 'feature_1']
    gam._create_knots_dict(arr, gam.num_percentiles)

    knots0 = ps._get_percentiles(arr[:, 0], num_percentiles=5)
    knots1 = ps._get_percentiles(arr[:, 1], num_percentiles=5)

    basis = gam._get_basis_for_array(arr)

    np.testing.assert_array_equal(
        basis[:, :, 0],
        ps._get_basis_vector(arr[:, 0], knots0, with_intercept=False))
    np.testing.assert_array_equal(
        basis[:, :, 1],
        ps._get_basis_vector(arr[:, 1], knots1, with_intercept=False))
示例#6
0
def test_flatten_basis_matrix_for_regression():
    gam = psgam.PSplineGAM(num_percentiles=2)

    arr = np.random.uniform(size=(4, 3))

    gam.feature_names = ['feature_0', 'feature_1', 'feature_2']
    gam._create_knots_dict(arr, gam.num_percentiles)

    knots0 = ps._get_percentiles(arr[:, 0], num_percentiles=2)
    knots1 = ps._get_percentiles(arr[:, 1], num_percentiles=2)
    knots2 = ps._get_percentiles(arr[:, 2], num_percentiles=2)

    dim0_basis = ps._get_basis_vector(arr[:, 0], knots0, with_intercept=False)
    dim1_basis = ps._get_basis_vector(arr[:, 1], knots1, with_intercept=False)
    dim2_basis = ps._get_basis_vector(arr[:, 2], knots2, with_intercept=False)

    manual_concat = np.asarray([
        np.asarray([1.0] + vec_0.tolist() + vec_1.tolist() + vec_2.tolist())
        for vec_0, vec_1, vec_2 in zip(dim0_basis, dim1_basis, dim2_basis)
    ])

    base_set = gam._flatten_basis_for_fitting(arr)

    np.testing.assert_array_equal(base_set, manual_concat)
示例#7
0
def test_gcv_score():
    test_data = data[:, :2]
    spline_fitter = psgam.PSplineGAM(num_percentiles=2)

    spline_fitter.train(test_data, target, penalty=1e10)
    np.testing.assert_almost_equal(spline_fitter.gcv_score(), 0.33410227247, 6)