首页 > 解决方案 > 使用python的潜在因子建模和高斯过程

问题描述

我正在尝试使用以下代码将潜在因子建模和高斯过程结合起来。我总共有 n 个带有 p 变量的样本 - y 并且我试图将其回归到 X ,其中 p_dash 样本带有 Z 作为潜在因素。我正在使用高斯过程解释 X 和 y 之间的非线性,但我无法正确建模。下面是我的代码

import numpy as np
import pymc3 as pm
np.random.seed(20090425)
n = 30
p = 10
p_dash = 2
q= 3
X = np.random.rand(n,p)
y = np.random.rand(n,p_dash)
Z = np.random.rand(n,q)

def kernel(x_1, x_2, k):
    """Kernel function."""
    z = np.dot(x_1.T, k)
    
    return np.dot(z, x_2)
with pm.Model() as model:

    sigma_p = pm.HalfCauchy("sigma_p", 5)
    
    # trying to add gaussian process to the model to account for non-linear relation between X and y
    K = kernel(X, X, sigma_p)
    K_star = kernel(y.flatten(), X, sigma_p)
    K_star_star = kernel(y.flatten(), y.flatten(), sigma_p)
    cov_prior = K_star_star
    non_linear = pm.MvNormal('non_linear',mu=np.zeros(n*p), cov=K_start_star,shape=(n*p, p_dash))
    non_linnear = non_linear.reshape(n,p)

    beta = pm.MvNormal("a", mu=np.zeros(p_dash), cov=isgma_p*np.eye(p_dash), shape=(p,p_dash))

    u = pm.MvNormal("a", mu=np.zeros(p), cov=isgma_p*np.eye(p), shape=(q,p))
    # Model error
    eps = pm.HalfCauchy("eps", 5)

    # model
    radon_est = Z*u + X * beta.T + non_linear
    
    y_obs = pm.MvNormal("y_obs", mu=radon_est, sigma=eps*np.eye(p), observed=y)
    
with model:
    trace = pm.sample(2000)

此外,我无法将 pm.gp 与模型中的因子一起使用。我很感激这方面的任何帮助。谢谢。

标签: pythontheanobayesiannormal-distributionpymc3

解决方案


推荐阅读