在回归

时间:2016-06-22 23:40:02

标签: python theano bayesian pymc3

我希望学习一些稀疏的系数,而其他系数只是像往常一样正规化。稀疏部分完成时要记住相关向量机。我的模型如下:

with pm.Model() as model:
    b0 = pm.Normal('b0',mu=0,sd=10)
    beta = pm.Normal('beta',mu=0,sd=30,shape = x_train.shape[1]) #normal coefficients

    #sparse weights
    alpha = pm.Gamma('alpha',1e-4,1e-4,shape = Phi_train.shape[1])
    beta_s = pm.Normal('beta_s',mu=0,tau=alpha,shape = Phi_train.shape[1]) #sparse betas

    # Likelihood - NOTE x_train and Phi_train are the two INPUT matrices
    mu = b0 + x_train*beta.T + Phi_train*beta_s.T 
    inv_sigma = pm.Gamma('sigma',1e-4,1e-4)
    y_est = pm.Normal('y_est', mu=mu, tau= inv_sigma, observed=y_train)

除了它似乎不喜欢mu = b0 ...行。如果我摆脱x_train*beta.TPhi_train*beta_s.T,它编译得很好。否则它会抱怨以下错误: ValueError: Input dimension mis-match. (input[0].shape[1] = 35, input[1].shape[1] = 500)

因此两个矩阵的大小为:(210042, 35)(210042, 500)。我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

在上面,您将系数向量与数据矩阵相乘。你应该改用他们的dot产品。例如:

x_train.dot(beta)