예제 #1
0
파일: kcit.py 프로젝트: sanghack81/SDCIT
def residual_kernel_matrix_kernel_real(Kx, Z, num_eig, ARD=True):
    """K_X|Z"""
    assert len(Kx) == len(Z)
    assert num_eig <= len(Kx)

    T = len(Kx)
    D = Z.shape[1]
    I = eye(T)
    eig_Kx, eix = truncated_eigen(*eigdec(Kx, num_eig))

    rbf = RBF(D, ARD=ARD)
    white = White(D)
    gp_model = GPR(Z, 2 * sqrt(T) * eix @ diag(sqrt(eig_Kx)) / sqrt(eig_Kx[0]),
                   rbf + white)
    gpflow.train.ScipyOptimizer().minimize(gp_model)

    sigma_squared = white.variance.value
    Kz_x = rbf.compute_K_symm(Z)

    P = I - Kz_x @ pdinv(Kz_x + sigma_squared * I)
    return P @ Kx @ P.T
예제 #2
0
파일: utils.py 프로젝트: sanghack81/SDCIT
def regression_distance(Y: np.ndarray, Z: np.ndarray, ard=True):
    """d(z,z') = |f(z)-f(z')| where Y=f(Z) + noise and f ~ GP"""
    import gpflow
    from gpflow.kernels import White, RBF
    from gpflow.models import GPR

    n, dims = Z.shape

    rbf = RBF(dims, ARD=ard)
    rbf_white = rbf + White(dims)

    gp_model = GPR(Z, Y, rbf_white)
    gpflow.train.ScipyOptimizer().minimize(gp_model)

    Kz_y = rbf.compute_K_symm(Z)
    Ry = pdinv(rbf_white.compute_K_symm(Z))
    Fy = Y.T @ Ry @ Kz_y  # F(z)

    M = Fy.T @ Fy
    O = np.ones((n, 1))
    N = O @ (np.diag(M)[:, None]).T
    D = np.sqrt(N + N.T - 2 * M)

    return D, Kz_y