Documente Academic
Documente Profesional
Documente Cultură
1.1
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
y
x1
y1
x2
y2
...
...
xn
yn
y = f ( x )
reg i
i
n
2
E (a1, a2 ,...am ) yi y i
i =1
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:
(3)
E (a1, a2 ,...am )
= 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.5
-1
-1.5
Fig. 1
1.2
y = a x + b
i
i
n S xy S x S y
S xx S y S x S xy
, b=
,
a =
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
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
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.
11
12
13
14
15
16
17
18
19
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)
a1 =
1.8757
b1 =
7.3104
y1_aprox =
Columns 1
9.1860
Columns 8
15.7508
through 7
10.1238 11.0617
through 11
16.6887 17.6265
11.9995
12.9373
13.8752
14.8130
18.5643
E1 =
4.5376
18
16
14
12
10
Fig. 2
1.5
2.5
3.5
4.5
5.5
1.3
Dac norul de puncte are alur de parabol, atunci se poate aplica regresia parabolic.
Relaia de calcul al valorilor aproximate, y i , i = 1, n , este n acest caz:
4
y = a x 2 + b x + c
i
i
i
(6)
, b= b, c= c ,
a =
(7)
S4 x
S3 x
= S3 x
S xx
S xx
Sx
S xx
3
S x = nS xx S4 x S x2 S4 x nS32x + 2S x S xx S3 x S xx
n
S 2 xy
S3 x
a = S xy
Sy
S xx
S4 x
S2 xy
S xx
b = S3 x
S xx
S xy
2
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
Sy
S4 x
S3 x
S 2 xy
c = S3 x
S xx
S xx
Sx
Sx
S xx
2
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
Sy
n
2
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
S 2 xy
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;
%vectori calculai n vederea unei eventuale reprezentri grafice
xx=min(x):(max(x)-min(x))/200:max(x);
yy=a*xx.^2+b*xx+c;
%eroarea global
E=sum((y-a*x.^2-b*x-c).^2);
A se observa modul de plasare pe mai multe rnduri a unei formule neobinuit de lungi
(terminarea fiecrui rnd cu caracterele ...).
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)
a =
0.99999999999995
b
b =
-3.99999999999985
c
c =
-9.99999999999946
Exemp l u l 3 :
are ca rezultat:
a =
0
b =
2
c =
7
E =
0
se obine:
a1 =
-0.1305
b1 =
2.8592
c1 =
5.7909
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).
1.4
Regresia exponenial se aplic atunci cnd variabila dependent are valori de semn
constant (are fie numai valori pozitive, fie numai valori negative, i atunci se consider y ca
variabil dependent). Fr a reduce generalitatea se poate, deci, presupune c y conine
numai valori pozitive. Norul de puncte se aproximeaz printr-o curb exponenial; valorile
estimate, y i > 0, i = 1, n , determinndu-se cu:
y = C e xi , C > 0
i
(8)
z i =
C) ,
xi + ln(
(9)
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):
(10)
n S xz S x S z
S S S x S xz
, B = xx z
,
A =
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
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
Eroarea global nu este exact 0, din cauza erorilor introduse de logaritmarea iniial.
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].
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
2
y
par = 0.2457 x + 0.9255 x + 1.1475
5
0.4641 x + 0.1791
y
exp = e
0
-3
Fig. 3
-2
-1
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;
1.5
Dac alura norului de puncte nu corespunde niciunuia din cazurile de mai sus, atunci se
efectueaz regresia dup o curb polinomial de grad cel puin 3. Notnd cu m numrul
coeficienilor de regresie care este, deci, cel puin 4 valorile aproximate, y i , i = 1, n , sunt
date de relaia general:
(11)
m2
y = a x m 1 + a
+ ... + a2 xi + a1
m i
m 1 xi
i
este vectorul
k =1
k =1
s ji = xkj + i 2 , t j = yk xkj 1
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
%calculul valorilor aproximate ale variabilei dependente
for k=1:n,
y_aprox(k)=0;
for i=1:m,
y_aprox(k)=y_aprox(k)+coef(i)*(x(k)^(i-1));
end;
end;
%eroarea global
E=(y-y_aprox)*(y-y_aprox)';%echivalent cu E=(y-y_aprox).^2
%generarea vectorilor de valori pentru o eventual reprezentare grafic
xx=min(x):(max(x)-min(x))/200:max(x);
for k=1:length(xx),
yy(k)=0;
for i=1:m,
yy(k)=yy(k)+coef(i)*(xx(k)^(i-1));
end;
end;
O b s e r v a i e : Dac se dorete obinerea coeficienilor de regresie n ordine
coef=inv(s)*t';
coef=fliplr(coef');
%calculul valorilor aproximate ale variabilei dependente
for k=1:n,
y_aprox(k)=polyval(coef,x(k));
end;
%eroarea global
E=(y-y_aprox)*(y-y_aprox)';
%generarea vectorilor de valori pentru o eventual reprezentare grafic
xx=min(x):(max(x)-min(x))/200:max(x);
for k=1:length(xx),
yy(k)=polyval(coef,xx(k));
end;
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
Columns 8 through 9
-0.0006 0.0000
1.4564
-0.2303
0.0038
0.0044
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
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