2013-06-10 11 views
5

che sto cercando di risolvere per m1, m2, m3, m4 nel set di equazioni in modo tale che:NumPy regressione multivarient con linalg.lstsq

y=(m1*x1)+(m2*x2)+(m3*x3)+(m4*x4) 

Dove:

x1=[x11,x12,x13...] 
x2=[x21,x22,x23...] 
x3=[x31,x32,x33...] 
x4=[x41,x42,x43...] 

y=[y1,y2,y3,y4,...] 

Sono stato cercando di fare:

m=numpy.linalg.lstsq(A,y)[0] 

Dove:

A = [[x11,x21,x31,x41],[x12,x22,x32,x42],.....] 

Ma i miei risultati non corrispondono a un'analoga analisi eseguita in Mat-lab.

Qualsiasi suggerimento o problema che potresti vedere sarebbe molto utile!

Grazie.

+2

Il tuo approccio sembra corretto. Sarebbe utile se pubblichi i tuoi dati reali, e cosa ti aspetti di ottenere, nel capire dove può essere la differenza. – Jaime

+0

Jaime grazie per dare un'occhiata. Purtroppo non sono autorizzato a postare i dati ... –

+1

Quindi inventati alcuni dati sintetici che presentano lo stesso problema! –

risposta

1

Sembra che si stia creando la matrice A in modo errato. Inoltre, np.linalg.lstsq sembra accettare solo un array 2D per A, il che significa che è possibile eseguire il minimo quadrato per una variabile alla volta. Prova questo:

nvar = 4 
one = np.ones(x1.shape) 
A = np.vstack((x1,one,x2,one,x3,one)).T.reshape(nvar,x1.shape[0],2) 

for i,Ai in enumerate(A): 
    a = np.linalg.lstsq(Ai,y)[0] 
    R = np.sqrt(((y - Ai.dot(a))**2).sum()) 
    print R 
+0

Una volta fatto ciò, come si implementa una funzione di regressione che mappa un nuova X a una previsione? – rjurney

+0

@rjurney per ogni volta che entra nel ciclo for otterrai una soluzione diversa del minimo quadrato, memorizzato in 'a'. Puoi usare questo per calcolare la nuova previsione, usando 'Ai.dot (a [0])' (non testato) –