在回归中有两个输入矩阵
having two input matrices in regression
我想学习一些系数,其中一些是稀疏的,而另一些只是像往常一样简单地正则化。稀疏部分是在牢记相关向量机的情况下完成的。我的模型如下:
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.T
或 Phi_train*beta_s.T
它编译正常。否则它会报出以下错误:
ValueError: Input dimension mis-match. (input[0].shape[1] = 35, input[1].shape[1] = 500)
所以两个矩阵的大小是:(210042, 35)
和(210042, 500)
。那我是不是做错了什么?
在上面,您将系数向量与数据元素矩阵相乘。您应该取而代之的是他们的点积。例如:
x_train.dot(beta)
我想学习一些系数,其中一些是稀疏的,而另一些只是像往常一样简单地正则化。稀疏部分是在牢记相关向量机的情况下完成的。我的模型如下:
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.T
或 Phi_train*beta_s.T
它编译正常。否则它会报出以下错误:
ValueError: Input dimension mis-match. (input[0].shape[1] = 35, input[1].shape[1] = 500)
所以两个矩阵的大小是:(210042, 35)
和(210042, 500)
。那我是不是做错了什么?
在上面,您将系数向量与数据元素矩阵相乘。您应该取而代之的是他们的点积。例如:
x_train.dot(beta)