2013-06-10 16 views
5

Próbuję rozwiązać dla M1, M2, M3, M4 w zestawie równań takie, że:numpy multivarient regresji z linalg.lstsq

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

Gdzie:

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

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

byłem próbuje zrobić:

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

Gdzie:

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

Ale moje wyniki nie pasują do podobnej analizy wykonanej w Mat-lab.

Wszelkie sugestie lub problemy, które możesz zobaczyć, byłyby bardzo pomocne!

Dzięki.

+2

Twoje podejście wydaje się być prawidłowe. Pomoże Ci to, jeśli zamieścisz swoje rzeczywiste dane i to, czego spodziewasz się uzyskać, zastanawiając się, gdzie może być różnica. – Jaime

+0

Jaime dzięki za spojrzenie. Niestety nie wolno mi publikować danych ... –

+1

Więc wymyśl kilka syntetycznych danych, które wykazują ten sam problem! –

Odpowiedz

1

Wygląda na to, że niepoprawnie budujesz swoją matrycę A. Ponadto wydaje się, że np.linalg.lstsq akceptuje tylko tablicę 2D dla A, co oznacza, że ​​można wykonać najmniejszy kwadrat dla jednej zmiennej na raz. Wypróbuj to:

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

Kiedy to zrobisz, w jaki sposób zaimplementujesz funkcję regresji, która mapuje nowe X do prognozy? – rjurney

+0

@rjurney za każdym razem, gdy przechodzi w pętlę for, otrzymasz inne rozwiązanie najmniej kwadratowego, przechowywane w 'a'. Możesz użyć tego do obliczenia nowej prognozy za pomocą 'Ai.dot (a [0])' (nie testowane) –