GNU Octave/Regresja liniowa

Regresja liniowa

edytuj
 
Regresja liniowa, stopień dla polyfit=3

Zaimplementować regresję liniową. Zadajemy punkty   i losujemy wartości  :

X=[-10,-5,-3,-1,-0.5,0,1,2,3,3.1,3.2,4,5];
N=length(X);
B=10.0
Y=B.*rand(1,N)

Używamy gotowej funkcji polyfit, która dopasowuje wielomian zadanego stopnia do punktów  

deg=1
O=polyfit(X,Y,deg)

Wykonujemy regresję metodą najmniejszych kwadratów:

Sx = sum(X);
Sy = sum(Y);
Sxx = X*X';
Syy = Y*Y';
Sxy = X*Y';
Sxx2 = norm(X, 2);
Syy2 = norm(Y, 2);
wsp_beta = (N*Sxy-Sx*Sy)/(N*Sxx-Sxx2);
wsp_alfa = (Sy-wsp_beta*Sx)/N;
P = [wsp_beta, wsp_alfa];

Rysujemy punkty i wynik:

axis([-11,11,0,B+1]);
x=[-10:0.25:10];
Z=polyval(O,x.+0.5);
W=polyval(P, x);
plot(x,W,"-r;MNK;",(x.+0.5),Z,"xg;Polyfit;",X,Y,"*b;Dane;");