Professional Documents
Culture Documents
Metoda celor mai mici ptrate (ale erorii) este cea mai uzual metod de aproximare a
unei dependene y=y(x), date tabelar (ca n tabelul 1), printr-o funcie analitic, care se
numete funcie (de obicei polinomial) de regresie. De aceea, metoda celor mai mici ptrate
se mai numete i regresie, cu larg aplicabilitate n estimare, statistic i prelucrarea datelor.
x x1 x2 ... xn
y y1 y2 ... yn
Tabel 1 Dependena y=y(x) dat prin tabel
Dependena y=y(x) se poate reprezenta grafic n planul (x, y), obinndu-se aa-numitul
nor de puncte. De cele mai multe ori, dup alura norului de puncte se poate stabili forma
exact a funciei de regresie: dac punctele se distribuie n jurul unei drepte, atunci se alege
drept funcie de regresie un polinom de gradul I (regresie liniar), dac se distribuie n jurul
unei parabole sau a unei parabole cubice, atunci trebuie aleas o funcie polinomial de
gradul al II-lea, respectiv de gradul al III-lea etc. Dac forma sugerat a norului de puncte nu
corespunde unui caz simplu, atunci se procedeaz la regresia cu o funcie polinomial de grad
superior, ales arbitrar n prim faz.
Dac se noteaz cu y i , i = 1, n , valorile aproximate (estimate) i cu freg funcia general
de regresie, atunci este valabil relaia:
(1) y = f ( x )
i reg i
Funcia de eroare (2) este o expresie a dispersiei valorilor reale de la curba presupus.
Fiind o sum de ptrate, aceast funcie prezint un minim pozitiv (n cazul ideal, acesta este
0, corespunznd aproximrii exacte), care se obine din anularea derivatelor sale pariale n
raport cu fiecare dintre parametrii ai , i = 1, m . Rezult astfel sistemul de m ecuaii n
necunoscutele ai , i = 1, m , numit sistemul ecuaiilor normale:
E (a1, a2 ,...am )
(3) = 0, i = 1, m
ai
n cazul n care freg este funcie polinomial, sistemul (3) este liniar i compatibil
determinat, soluia lui admind o form general, care este prezentat n 1.5.
O aplicaie imediat i intuitiv a metodei celor mai mici ptrate este trasarea grafic a
unei dependene de tipul celei din tabelul 1, presupunnd c datele respective s-au obinut n
urma msurrii variaiei variabilei dependente y n funcie de variaia variabilei independente
x. Msurtorile fiind n general afectate de erori, se aplic nti o metod de regresie pentru
determinarea unei aproximri analitice a dependenei respective. Prin reprezentarea grafic a
norului de puncte de coordonate (xi,yi), i=1,2,...n, i a funciei de regresie y = y ( x) n acelai
sistem de coordonate, se observ c aproximarea prin regresie corespunde trasrii graficului
printre puncte (figura 1).
y
1.5
0.5
x
-3 -2 -1 0 1 2 3 4 5
-0.5
-1
-1.5
(4) y = a x + b
i i
n S xy S x S y S xx S y S x S xy
(5) a = , b= ,
n S xx S x2 n S xx S x2
n n n n
unde s-au fcut notaiile: S x = xi , S xx = xi2 , S y = yi , S xy = xi yi . Relaiile (5)
i =1 i =1 i =1 i =1
rezult din dezvoltarea determinanilor implicai n sistemul (3).
Funcia Matlab de implementare a metodei de regresie liniar trebuie s primeasc drept
date de intrare cei doi vectori, x i y, i s returneze valorile celor doi coeficieni de regresie,
2
a i b. Funcia Matlab cmmp_lin listat mai jos mai returneaz i irul de valori aproximate,
y i , i = 1, n , n vectorul y_aprox, precum i valoarea (minimizat) a erorii ptratice globale
(conform relaiei (2)) n variabila E.
function [a,b,y_aprox,E]=cmmp_lin(x,y)
%REGRESIE LINIAR pe un set de perechi de date (x,y);
%dreapta de regresie are ecuaia y=a*x+b;
%x i y sunt vectori de aceeai dimensiune,
%(recomandabil ca x s fie ordonat cresctor/descresctor)
n=length(x);
%calculul sumelor
Sx=sum(x);Sxx=sum(x.^2);Sy=sum(y);Syy=sum(x.*y);
%calculul numitorului i numrtorilor din formulele lui a i b
d=n*Sxx-Sx^2;da=n*Syy-Sx*Sy;db=Sxx*Sy-Sx*Syy;
%calculul coeficienilor de regresie, a i b
a=da/d;b=db/d;
%valorile aproximate
y_aprox=a*x+b;
%eroarea global
E=sum((y-y_aprox).^2);
Ca o observaie, se poate folosi i funcia det din biblioteca Matlab, care calculeaz
determinantul unei matrice ptratice.
n exemplul de mai jos se arat o modalitate de verificare a funciei cmmp_lin.
E xemp l u l 1 : Dndu-se irul de valori x=[1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6] (la
cazul general, acestea nu trebuie s fie echidistante), se genereaz vectorul
y dup relaia y=2*x+7 i se apeleaz funcia cmmp_lin.
x=[1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6];y=2*x+7;
[a,b,y_aprox,E]=cmmp_lin(x,y)
Rezultatul este conform ateptrilor:
a =
2
b =
7
y_aprox =
9 10 11 12 13 14 15 16 17 18 19
E =
0
Se perturb apoi valorile obinute cu formula y=2*x+7 (de exemplu, cu maxim 10%),
rezultnd y1=[8.1 11 9.9 13.2 11.7 15.4 13.5 17.6 15.3 19.8 17.1]. Apelul
funciei cmmp_lin cu argumentele de intrare x i y1 (existente n spaiul de lucru):
[a1,b1,y1_aprox,E1]=cmmp_lin(x,y1)
produce urmtoarele rezultate:
3
a1 =
1.8757
b1 =
7.3104
y1_aprox =
Columns 1 through 7
9.1860 10.1238 11.0617 11.9995 12.9373 13.8752 14.8130
Columns 8 through 11
15.7508 16.6887 17.6265 18.5643
E1 =
4.5376
Evident, valorile coeficienilor de regresie, a i b, vor fi cu att mai deviate de la valorile
2, respectiv 7, cu ct perturbaia setului y de la dreapta exact 2x+7 va fi mai mare.
Rezultatele regresiei se vizualizeaz grafic prin reprezentarea norului de puncte i a graficului
dreptei de regresie, ax+b (pentru care se discretizeaz intervalul de variaie al variabilei
independente, x, cu un pas suficient de mic rezultatul se depune n vectorul xx i se
calculeaz variabila dependent, y, n fiecare valoare astfel obinut rezultatul se depune n
vectorul yy).
20
18
16
14
12
10
8
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
4
(6) y = a x 2 + b x + c
i i i
S xx Sx n
S 2 xy S3 x S xx
a = S xy S xx S x = nS xx S 2 xy S x2 S 2 xy nS3 x S xy + S x S3 x S y + S x S xx S xy S xx
2
Sy
Sy Sx n
S4 x S2 xy S xx
2
b = S3 x S xy S x = nS4 x S xy S x S4 x S y nS3 x S2 xy + S x S xx S 2 xy + S xx S3 x S y S xx S xy
S xx Sy n
S4 x S3 x S 2 xy
c = S3 x S xx S xy = S xx S 4 x S y S x S 4 x S xy S32x S y + S xx S3 x S xy + S x S3 x S2 xy S xx
2
S 2 xy
S xx Sx Sy
n n n n n
S-au fcut notaiile: S x = xi , S xx = xi2 , S3 x = xi3 , S4 x = xi4 , S y = yi ,
i =1 i =1 i =1 i =1 i =1
n n
S xy = xi yi , S2 xy = xi2 yi .
i =1 i =1
Metoda de regresie parabolic este implementat printr-o funcie numit cmmp_par, care
primete aceleai argumente de intrare ca i cmmp_lin, funcia destinat regresiei liniare, i
anume seturile de date x i y. Pe lng coeficienii de regresie, a, b i c, i eroarea global,
funcia mai returneaz i perechea de vectori (xx,yy), calculai pentru reprezentarea grafic a
curbei de regresie (n maniera artat la regresia liniar, exemplul 2.1).
function [a,b,c,E,xx,yy]=cmmp_par(x,y)
%REGRESIE PARABOLIC pe seturile de date (x,y);
% 2
%curba de regresie are ecuaia y = a*x + b*x + c;
%x i y sunt vectori de aceeai dimensiune,
%(recomandabil ca x s fie ordonat cresctor/descresctor)
n=length(x);
%calculul sumelor
5
Sx=sum(x);Sxx=sum(x.^2);S3x=sum(x.^3);S4x=sum(x.^4);
Sy=sum(y);Sxy=sum(x.*y);S2xy=sum((x.^2).*y);
%calculul determinanilor
d=n*Sxx*S4x-Sx^2*S4x-n*S3x^2+2*Sx*Sxx*S3x-Sxx^3;
da=n*Sxx*S2xy-Sx^2*S2xy-n*S3x*Sxy+Sx*S3x*Sy+ ...
Sx*Sxx*Sxy-Sxx^2*Sy;
db=n*S4x*Sxy-Sx*S4x*Sy-n*S3x*S2xy+Sx*Sxx*S2xy+ ...
Sxx*S3x*Sy-Sxx^2*Sxy;
dc=Sxx*S4x*Sy-Sx*S4x*Sxy-S3x^2*Sy+Sxx*S3x*Sxy+ ...
Sx*S3x*S2xy-Sxx^2*S2xy;
%calculul coeficienilor de regresie
a=da/d;
b=db/d;
c=dc/d;
Exemp l u l 2 : Dndu-se vectorul x=[0 0.3 1 1.4 1.6 2 2.1 2.4 2.8 3 3.5
3.7 3.9 4] i vectorul y=x.^2-4*x-10, apelul funciei cmmp_par cu
returnarea numai a primelor patru argumente de ieire:
[a,b,c,E]=cmmp_par(x,y)
va avea drept ecou la ecran:
a =
1.0000
b =
-4.0000
c =
-10.0000
E =
4.3108e-024
Rezultatele confirm ateptrile; cteva comentarii se impun. Se observ c valoarea
erorii globale este foarte mic, practic 0; totui, ea nu a fost afiat ca 0, ceea ce nseamn c
nu este exact 0, aa cum s-a obinut n cazul regresiei liniare pe un set de date perfect curat,
neperturbat (exemplul 2.1). Nici coeficienii de regresie nu corespund exact valorilor curbei
dup care a fost generat vectorul y; aceasta se constat reafind coeficienii n formatul de
afiare cu 15 zecimale:
format long
a
6
a =
0.99999999999995
b
b =
-3.99999999999985
c
c =
-9.99999999999946
Rezultatele confirm o intuiie fireasc: erorile de calcul cresc cu ct ordinul regresiei
crete (cu ct numrul coeficienilor de regresie este mai mare).
Exemp l u l 3 : Regresia parabolic se aplic acum pe seturi de date legate printr-o lege
liniar; de exemplu, fie cele din exemplul 2.1: x=[1 1.5 2 2.5 3 3.5
4 4.5 5 5.5 6] i y=2*x+7.
Rezultatul ateptat n urma apelului funciei cmmp_par este ca parabola de regresie s
aib coeficientul a aproximativ nul (parabola se reduce la o dreapt). ntr-adevr, comanda:
[a,b,c,E]=cmmp_par(x,y)
are ca rezultat:
a =
0
b =
2
c =
7
E =
0
Rezultatul este de aceast dat exact, coeficienii sunt determinai fr eroare.
Rmnnd n continuare la exemplul 2.1 i apelnd funcia cmmp_par pentru setul y
perturbat, y1=[8.1 11 9.9 13.2 11.7 15.4 13.5 17.6 15.3 19.8 17.1]:
[a1,b1,c1,E1]=cmmp_par(x,y1)
se obine:
a1 =
-0.1305
b1 =
2.8592
c1 =
5.7909
7
E1 =
21.4862
Eroarea global obinut prin regresie parabolic (21.4862) este mai mare dect cea prin
regresie liniar (4.5376, din exemplul 2.1), ceea ce arat c respectivul nor de puncte se
aproximeaz mai bine printr-o dreapt dect printr-o parabol.
De aici se desprinde o concluzie general: n cazul aplicrii regresiei polinomiale unui
set dat de date, mai nti trebuie determinat ordinul regresiei care asigur eroarea minim. Se
va reveni la aceast problem cnd se va discuta cazul general de regresie polinomial
(2.1.5).
(8) y = C e xi , C > 0
i
care este un model de regresie liniar pentru seturile de date x i z ln( y ) , cu coeficienii
A = i B = ln(C ) > 0 . Acetia se pot, deci, determina adaptnd formulele (2.5):
n S xz S x S z S S S x S xz
(10) A = , B = xx z ,
2
n S xx S x n S xx S x2
n n n n n
unde s-au fcut notaiile: S x = xi , S xx = xi2 , S z = zi = ln( yi ) = ln yi ,
i =1 i =1 i =1 i =1 i =1
n n
S xz = xi zi = xi ln( yi ) . Relaia (2.8) se poate rescrie sub forma:
i =1 i =1
y = e A xi + B , B > 0
i
Avnd n vedere reducerea de mai sus, funcia Matlab pentru regresia exponenial,
numit cmmp_exp, const n esen n apelarea funciei cmmp_lin, de regresie liniar.
Semnificaia argumentelor de ieire ale funciei cmmp_exp este aceeai ca n cazul funciei
cmmp_par, de regresie parabolic; ea este listat i comentat mai jos.
function [A,B,E,xx,yy]=cmmp_exp(x,y)
%REGRESIE dup o CURBA EXPONENTIAL a unui set de date (x,y);
% A*x+B
%curba de regresie are ecuaia y=e;
8
%x i y sunt vectori de aceeai dimensiune;
%(recomandabil ca x s fie ordonat cresctor/descresctor);
%y conine valori pozitive
E xem p l u l 5 : Se perturb acum uor valorile lui y din exemplul 2.4 cu maxim 25%,
obinndu-se irul y1=[0.2998 0.4044 1.3435 1.4115 2.8443
4.9266 9.9275 8.9768].
Fcnd abstracie de modul de generare a datelor, alura norului de puncte poate
corespunde la fel de bine i unei curbe exponeniale, dar i unei parabole. Se vor ncerca
ambele tipuri de regresie exponenial i parabolic i se vor compara erorile globale.
Se apeleaz nti funcia cmmp_exp, pentru regresia exponenial:
[A,B,E1]=cmmp_exp(x,y1)
obinndu-se:
A =
0.4641
B =
0.1791
9
E1 =
69.5620
Deci norul de puncte poate fi aproximat prin y exp = e0.4641 x + 0.1791 , cu eroarea global
de 69.562.
Apelul funciei cmmp_par, pentru regresie parabolic:
[a,b,c,E2]=cmmp_par(x,y1)
conduce la:
a =
0.2457
b =
0.9255
c =
1.1475
E2 =
66.1489
15
10
y 2
par = 0.2457 x + 0.9255 x + 1.1475
y 0.4641 x + 0.1791
exp = e
0
-3 -2 -1 0 1 2 3 4 5
Deci norul de puncte mai admite i aproximarea y par = 0.2457 x 2 + 0.9255 x + 1.1475 ,
cu eroarea global de 66.1489.
Se observ c eroarea global are valori mari n ambele cazuri, dar c este mai mic n
cazul regresiei parabolice (66.1489) dect n cazul regresiei exponeniale (69.562). Deci, dei
datele iniiale, neperturbate, corespundeau unei dependene exponeniale, perturbarea lor a
fost suficient de semnificativ pentru a modifica tipul dependenei: datele perturbate ale
variabilei dependente, y, respect mai degrab o lege parabolic n raport cu variabila
independent, x.
Reprezentarea norului de puncte i trasarea graficelor curbelor de regresie obinute mai
sus n acelai sistem de coordonate se realizeaz prin urmtorul bloc de comenzi:
[A,B,E1,xx1,yy1]=cmmp_exp(x,y1);
10
[a,b,c,E2,xx2,yy2]=cmmp_par(x,y1);
plot(x,y,'ko',xx1,yy1,'k--',xx2,yy2,'k-');grid;
care produce rezultatele din figura 2.3.
(11) y = a x m 1 + a m2
+ ... + a2 xi + a1
i m i m 1 xi
Matricea S fiind nesingular, sistemul (2.3) este compatibil determinat i are soluia:
(13) c = S 1 t
Mai jos este prezentat funcia Matlab cmmp_gen, care reprezint o implementare
posibil a cazului general de regresie polinomial. Spre deosebire de funciile de regresie
prezentate pn acum, aceast funcie mai primete nc un argument de intrare, i anume pe
m, numrul de parametri de regresie (pe lng vectorii x i y). Pentru simplitate, formula
(2.13) s-a realizat prin apelul funciei inv din biblioteca Matlab (implementarea de algoritmi
numerici pentru calculul inverselor matriciale va fi discutat pe larg mai trziu n aceast
lucrare). Primul argument de ieire al funciei de mai jos, coef, este vectorul coeficienilor
polinomului de regresie, n ordine cresctoare a puterilor variabilei. Celelalte argumente de
ieire au aceeai semnificaie ca n cazul celorlalte funcii.
function [coef,E,y_aprox,xx,yy]=cmmp_gen(x,y,m)
%metoda CMMP de aproximare a dependenei y=f(x)
%printr-un POLINOM DE GRADUL m-1 (altfel spus, regresie cu m parametri);
%coeficienii polinomului de regresie se returneaz n coef,
%care este de dimensiune m, n ordine cresctoare a puterilor variabilei;
%x i y au aceeai dimensiune;
%(recomandabil ca x s fie ordonat cresctor/descresctor);
%n>m (numrul de perechi de date trebuie sa fie mai mare
% dect numrul parametrilor de regresie)
11
n=length(x);
%calculul elementelor matricei i al termenilor liberi
for j=1:m,
t(j)=0;
for i=1:m,
s(j,i)=0;
for k=1:n,
s(j,i)=s(j,i)+x(k)^(j+i-2);
end;
end;
for k=1:n,
t(j)=t(j)+y(k)*(x(k)^(j-1));
end;
end;
coef=inv(s)*t';
coef=coef';%operaie de transpunere pentru ca vectorul coef s rezulte de tip linie
Exemp l u l 6 : Pentru seturile de date x=[3 3.3 3.7 3.9 4.7 4.8 4.9 5 5.25] i
y=[3 5 10 14 43 49 56 63 84] (de lungime n=9) se efectueaz nti
regresia de gradul n-1, adic de gradul 8:
[coef,E]=cmmp_gen(x,y,length(x)-1)
Rezultatul apelului de mai sus const n primul rnd n afiarea unui mesaj de avertizare
asupra apropierii de singularitate a matricei sistemului (a crei invers se calculeaz),
numrul ei de condiionare calculat n RCOND fiind mic (comparabil cu epsilon main).
Interpretorul avertizeaz astfel c este posibil ca acurateea rezultatelor s nu fie bun.
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 7.158432e-024
Setrile implicite din mediul Matlab prevd ca avertizrile de acest gen s fie ignorate de
ctre interpretor i s nu opreasc execuia programelor; astfel, dup mesajul de eroare se
afieaz rezultatele de mai jos:
coef =
1.0e+004 *
Columns 1 through 7
-4.2489 6.7751 -4.4086 1.4564 -0.2303 0.0038 0.0044
Columns 8 through 9
-0.0006 0.0000
E =
816.4324
Se observ c ultimele dou elemente, de rang 7 i 8, din vectorul coef sunt mult mai
13
mici dect restul coeficienilor. Deci procedura de regresie se poate repeta cu gradul
polinomului de regresie micorat cu dou uniti (gradul 6):
[coef,E]=cmmp_gen(x,y,length(x)-3)
Rezultatele sunt din nou nsoite de acelai mesaj de eroare, dar eroarea global are o
valoare mult mai mic:
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.281806e-019
coef =
1.0e+004 *
0.8818 -1.2970 0.7868 -0.2519 0.0449 -0.0042 0.0002
E =
0.2157
Dac se scade n continuare gradul polinomului de regresie la 5:
[coef,E]=cmmp_gen(x,y,length(x)-4)
se observ c valoarea erorii globale crete (rmnnd de acelai ordin de mrime), dar nu se
mai afieaz mesajul de eroare:
coef =
17.9262 -7.4289 -3.7338 3.0191 -0.7671 0.0888
E =
0.3205
Dac nivelul maxim admisibil al erorii de aproximare o permite, scderea gradului
regresiei poate continua n aceei manier, innd cont c rangul maxim este ocupat de un
coeficient cu un ordin de mrime mai mic n modul dect ceilali (0.0888).
Dac nu se continu scderea gradului, se pune problema care dintre ultimele dou
rezultate se reine drept rezultat final. n general, trebuie evitate rezultatele de ncredere
diminuat (nsoite de avertizri de genul celor de mai sus); n cazul de fa, ultimul rezultat
ar trebui ales, cu att mai mult cu ct eroarea de aproximare fa de cazul imediat superior nu
este cu mult mai mare. Ca atare, seturile de date x i y se gsesc aproximativ n dependena:
y y = 0.0888 x5 0.7671x 4 + 3.0191x3 3.7338 x 2 7.4289 x + 17.9262
n biblioteca Matlab exist o funcie care implementeaz cazul general de regresie
polinomial, ea se numete polyfit. Aceast funcie primete ca date de intrare cele dou
seturi de date, precum i gradul polinomului de regresie (funcia cmmp_gen, scris mai sus,
primete numrul coeficienilor polinomiali) i returneaz coeficienii polinomului n ordine
descresctoare a puterilor variabilei (n timp ce cmmp_gen i returneaz n ordine
cresctoare).
De pild, pentru aceleai seturi de date x=[2 4 5 7 8] i y=[1 1.4 2.3 1.2 0.4],
pentru ca cele dou funcii s calculeze acelai polinom, de exemplu de gradul 3, ele se vor
apela cu:
[coef1]=polyfit(x,y,4);
[coef2]=cmmp_gen(x,y,5);
i vor furniza rezultatele coef1=[0.0406 -0.8733 6.4739 -19.0567 19.5556] i
coef2=[19.5556 -19.0567 6.4739 -0.8733 0.0406], care exprim acelai polinom
de regresie, 0.0406 x 4 - 0.8733 x3 + 6.4739 x 2 -19.0567 x + 19.5556 .
14