GNU Octave/Regresja liniowa
Regresja liniowa
edytujZaimplementować 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;");