You are on page 1of 14

CURS 6: APROXIMAREA FUNCTIILOR PRIN REGRESIE

1 Metoda celor mai mici ptrate

1.1 Formularea problemei. Notaii

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 freg depinde de un set de m parametri, fie acetia ai , i = 1, m (n particular, acetia


sunt coeficienii polinomului de regresie), care se determin din minimizarea erorii ptratice

cumulate dintre valorile reale, yi, i valorile aproximate, y i :
n 2
(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:

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

Fig. 1 Trasarea graficului de regresie printre punctele norului de puncte

Algoritmii de regresie sunt practic niruirea relaiilor de calcul al coeficienilor de


regresie. De aceea se prezint direct implementrile Matlab ale celor mai uzuale cazuri de
regresie liniar, parabolic i exponenial i a cazului general de regresie polinomial.

1.2 Aproximarea prin regresie liniar


Regresia liniar const n aproximarea unui nor de puncte printr-o dreapt; ca atare,

relaia de calcul al valorilor aproximate (estimate), y i , i = 1, n , este:

(4) y = a x + b
i i

Coeficienii a i b sunt soluiile sistemului (3), particularizat pentru m=2:

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

Fig. 2 Aproximarea unui nor de puncte prin regresie liniar

n urma comenzilor Matlab:


xx=min(x):(max(x)-min(x))/200:max(x);
yy=a*xx+b;
plot(x,y,o,xx,yy,-);grid;
se obine graficul din figura 2.

1.3 Aproximarea prin regresie parabolic


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
(6) y = a x 2 + b x + c
i i i

Coeficienii a, b i c sunt soluiile sistemului (2.3), particularizat pentru m=3:


a
(7) a = , b= b, c= c ,

unde este determinantul sistemului (2.3), iar a, b i c sunt determinanii de calcul ai
coeficienilor. Formele lor compacte, precum i formulele desfurate sunt date mai jos.
S4 x S3 x S xx
= S3 x S xx S x = nS xx S4 x S x2 S4 x nS32x + 2S x S xx S3 x S xx
3

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;

%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)
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).

1.4 Aproximarea prin regresie exponenial


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:

(8) y = C e xi , C > 0
i

Prin logaritmarea relaiei (2.8) i introducerea schimbrii de variabil z  ln( y ), z > 0 , se


obine:
(9) z i =
 xi + ln(
 C) ,
A B

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

%regresia de acest tip se reduce la regresia liniar prin


%logaritmarea natural a valorilor din y
z=log(y);
[A,B,E1,y_aprox1]=cmmp_lin(x,z);

%iruri de valori calculate n vederea unei eventuale reprezentri grafice


xx=min(x):(max(x)-min(x))/200:max(x);
yy=exp(A*xx+B);
%eroarea global
E=sum((y-exp(A*x+B)).^2);
Funcia returneaz coeficienii A i B (o modificare minor, folosind relaiile introduse n
formula (2.9), este necesar pentru a ntoarce valorile coeficienilor C i ).

E xem p l u l 4 : Pornind de la seturile de date x=[-3 -2 0 0.5 1.5 3 4] i


y =[0.2725 0.4493 1.2214 1.5683 2.5857 5.4739 9.0250]
(generat cu relaia y = e0.5 x + 0.2 : y=exp(0.5*x+0.2)), apelul funciei
cmmp_exp: cu primele trei argumente de ieire:
[A,B,E]=cmmp_exp(x,y)
furnizeaz rezultatul ateptat:
A =
0.5000
B =
0.2000
E =
1.6424e-030
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].
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

Fig. 3 Aproximarea prin regresie parabolic i exponenial a unui nor de puncte

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.

1.5 Cazul general de regresie polinomial


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) y = a x m 1 + a m2
+ ... + a2 xi + a1
i m i m 1 xi

S observm c exist o cerin general: pentru a face regresie polinomial cu m


parametri este necesar s se dispun de cel puin m perechi de date (xi,yi). Deci trebuie
ndeplinit condiia nm. Notnd cu c = [ ai ]i =1, m vectorul coeficienilor de regresie,
sistemul (2.3) este liniar ptratic; el se poate pune sub forma compact:
(2.3) S c = t

unde S = s ji este matricea sistemului, iar t = t j este vectorul


j =1, m, i =1, m j =1, m
termenilor liberi, ale cror elemente se calculeaz dup relaiile:
n n
(12) s ji = xkj + i 2 , t j = yk xkj 1
k =1 k =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
descresctoare a puterilor variabilei (ceea ce corespunde manierei Matlab de returnare a
rezultatelor de acest tip), atunci se poate folosi funcia Matlab fliplr (engl. flip left-right,
oglindire stnga-dreapta; alte funcii din aceeai clas sunt flipud engl. flip up-down i
rot90). Avantajul acestei variante este c y_aprox i yy se pot calcula mai elegant, i
anume apelnd o alt funcie din bibliotec, polyval, de calcul al valorii unui polinom dat
prin vectorul coeficienilor n ordine descresctoare a puterilor variabilei ntr-o valoare dat
(a se vedea i 1.3.3.8, exerciiul propus 4). Ultimele trei blocuri de comenzi din funcia
cmmp_gen se rescriu sub forma:
12
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;
O problem anticipat n paragrafele anterioare const n modul cum se stabilete gradul
polinomului de regresie, altfel spus numrul parametrilor de regresie, m. Avnd n vedere
condiia mn, n prim faz se poate considera m=n, adic efectuarea unei regresii de grad
maxim admis de seturile respective de date. Este posibil ca aceast regresie s nu fie necesar,
caz n care unul sau mai muli coeficieni polinomiali, ncepnd cu cel de rang maxim, m-1,
s fie aproape nuli sau, n orice caz, mult mai mici n valoare absolut dect ceilali. n acest
caz, o a doua iteraie de regresie se va face cu gradul egal cu rangul primului coeficient nenul
(n ordine descresctoare a puterilor variabilei).

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

You might also like