예제 #1
0
    def update_density_estimate(self):
        # load or learn parameters
        if self.learn_parameters:
            sigma, lmbda = self.determine_sigma_lmbda()
        else:
            sigma = self.sigma0
            lmbda = self.lmbda0

        logger.info("Using sigma: %.2f, lmbda=%.6f" % (sigma, lmbda))

        D = self.Z.shape[1]
        gamma = 0.5 / (sigma**2)
        omega, u = sample_basis(D, self.m, gamma)

        logger.info("Estimate density in RKHS, N=%d, m=%d" % (self.N, self.m))
        theta = score_matching_sym(self.Z, lmbda, omega, u)

        #         logger.info("Computing objective function")
        #         J = _objective_sym(Z, sigma, lmbda, a, K, b, C)
        #         J_xval = np.mean(xvalidate(Z, 5, sigma, self.lmbda, K))
        #         logger.info("N=%d, sigma: %.2f, lambda: %.2f, J(a)=%.2f, XJ(a)=%.2f" % \
        #                 (self.N, sigma, self.lmbda, J, J_xval))

        dlogq_est = lambda x: log_pdf_estimate_grad(
            feature_map_grad_single(x, omega, u), theta)

        return dlogq_est
예제 #2
0
    lmbda = 1.
    sigma = select_sigma_grid(Z, lmbda=lmbda)

    K = gaussian_kernel(Z, sigma=sigma)
    b = _compute_b_sym(Z, K, sigma)
    C = _compute_C_sym(Z, K, sigma)
    a = score_matching_sym(Z, sigma, lmbda, K, b, C)
    J = _objective_sym(Z, sigma, lmbda, a, K, b, C)
    J_xval = np.mean(xvalidate(Z, 5, sigma, lmbda, K))
    print("N=%d, sigma: %.2f, lambda: %.2f, J(a)=%.2f, XJ(a)=%.2f" % \
            (N, sigma, lmbda, J, J_xval))

    kernel = lambda X, Y=None: gaussian_kernel(X, Y, sigma=sigma)
    kernel_grad = lambda x, X=None: gaussian_kernel_grad(x, X, sigma)
    logq_est = lambda x: log_pdf_estimate(x, a, Z, kernel)
    dlogq_est = lambda x: log_pdf_estimate_grad(x, a, Z, kernel_grad)

    # momentum
    Sigma_p = np.eye(D) * .1
    L_p = np.linalg.cholesky(Sigma_p)
    logp = lambda x: log_gaussian_pdf(
        x, Sigma=L_p, compute_grad=False, is_cholesky=True)
    dlogp = lambda x: log_gaussian_pdf(
        x, Sigma=L_p, compute_grad=True, is_cholesky=True)
    p_sample = lambda: sample_gaussian(
        N=1, mu=np.zeros(D), Sigma=L_p, is_cholesky=True)[0]

    # starting state
    p0 = p_sample()
    q0 = np.zeros(D)
    q0[:2] = np.array([0, -3])
예제 #3
0
    # estimate density in rkhs
    N = 800
    mu = np.zeros(D)
    Z = np.random.standard_t(df=nu, size=(N, D))
    lmbda = 0.0001
    sigma = 0.5
    gamma = 0.5 * (sigma**2)
    m = N

    omega = gamma * np.random.randn(D, m)
    u = np.random.uniform(0, 2 * np.pi, m)
    logger.info("Estimating density")
    theta = score_matching_sym(Z, lmbda, omega, u)

    logq_est = lambda x: log_pdf_estimate(feature_map(x, omega, u), theta)
    dlogq_est = lambda x: log_pdf_estimate_grad(
        feature_map_grad_single(x, omega, u), theta)

    # momentum
    Sigma_p = np.eye(D)
    L_p = np.linalg.cholesky(Sigma_p)
    logp = lambda x: log_gaussian_pdf(
        x, Sigma=L_p, compute_grad=False, is_cholesky=True)
    dlogp = lambda x: log_gaussian_pdf(
        x, Sigma=L_p, compute_grad=True, is_cholesky=True)
    p_sample = lambda: sample_gaussian(
        N=1, mu=np.zeros(D), Sigma=L_p, is_cholesky=True)[0]

    # starting state
    p0 = p_sample()
    q0 = np.zeros(D)
    q0[:2] = np.array([-1, -1])