예제 #1
0
def test_anova_kernel(dist, degree, kernel):
    # compute exact kernel
    gram = anova(X, Y, degree)
    # approximate kernel mapping
    rk_transform = RandomKernel(n_components=1000, random_state=0,
                                kernel=kernel, degree=degree,
                                distribution=dist, p_sparse=0.5)

    X_trans = rk_transform.fit_transform(X)
    Y_trans = rk_transform.transform(Y)
    kernel_approx = np.dot(X_trans, Y_trans.T)
    error =  gram - kernel_approx
    assert np.abs(np.mean(error)) < 0.0001
    assert np.max(error) < 0.001  # nothing too far off
    assert np.mean(error) < 0.0005  # mean is fairly close

    # sparse input
    X_trans_sp = rk_transform.transform(X_sp)
    assert_allclose_dense_sparse(X_trans, X_trans_sp)

    # sparse output
    if dist == "sparse_rademacher":
        rk_transform.dense_output = False
        X_trans_sp = rk_transform.transform(X_sp)
        assert issparse(X_trans_sp)
        assert_allclose_dense_sparse(X_trans, X_trans_sp.toarray())
    else:
        rk_transform.dense_output = False
        X_trans_sp = rk_transform.transform(X_sp)
        assert not issparse(X_trans_sp)
        assert_allclose_dense_sparse(X_trans, X_trans_sp)
예제 #2
0
def test_all_subsets_kernel(dist):
    # compute exact kernel
    p_sparse = 0.5
    kernel = all_subsets(X, Y)
    # approximate kernel mapping
    rk_transform = RandomKernel(n_components=5000, random_state=0,
                                kernel='all_subsets',
                                distribution=dist, p_sparse=p_sparse)
    X_trans = rk_transform.fit_transform(X)
    Y_trans = rk_transform.transform(Y)
    kernel_approx = np.dot(X_trans, Y_trans.T)

    error = kernel - kernel_approx
    if dist == 'sparse_rademacher':
        nnz = rk_transform.random_weights_.nnz
        nnz_expect = np.prod(rk_transform.random_weights_.shape)*p_sparse
        nnz_var = np.sqrt(nnz_expect * (1-p_sparse))
        assert np.abs(nnz-nnz_expect) < 3*nnz_var
    assert np.abs(np.mean(error)) < 0.01
    assert np.max(error) < 0.1  # nothing too far off
    assert np.mean(error) < 0.05  # mean is fairly close

    X_trans_sp = rk_transform.transform(X_sp)
    assert_allclose_dense_sparse(X_trans, X_trans_sp)