2016-06-22 22 views
0

Ich möchte einige Koeffizienten lernen, von denen einige spärlich sind, und andere einfach wie üblich regularisiert werden. Der spärliche Teil wird unter Berücksichtigung von Relevance Vector-Maschinen erstellt. Mein Modell ist wie folgt:mit zwei Eingangsmatrizen 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) 

mit der Ausnahme, dass es scheint nicht die mu = b0 ... Zeile. Wenn ich entweder x_train*beta.T oder Phi_train*beta_s.T los werde, kompiliert es gut. Ansonsten wirft sie aus dem folgenden Fehler: ValueError: Input dimension mis-match. (input[0].shape[1] = 35, input[1].shape[1] = 500)

So sind die Größen der beiden Matrizen sind: (210042, 35) und (210042, 500). Also mache ich hier etwas falsch?

+1

Es sieht aus wie Sie das Punktprodukt der Daten und Koeffizienten benötigen, nicht element Multiplikation: 'x_train.dot (beta)' oder ähnliche –

+0

, die den Trick tat. Willst du das als eine Lösung darstellen, damit ich es als Antwort akzeptieren kann? –

Antwort

2

In der oben genannten, multiplizieren Sie den Vektor der Koeffizienten und Matrix der Daten elementweise. Sie sollten stattdessen ihr Punktprodukt verwenden. Zum Beispiel:

x_train.dot(beta)