O tehnică de explorare comună pentru datele numerice bivariate implică găsirea unei curbe netede pentru a aproxima un set de date cu zgomot. Structura datelor – și dacă există chiar o relație între cele două variabile – poate fi mai ușor vizibilă dintr-o astfel de curbă decât dintr-o împrăștiere brută de puncte.
În clasa dvs. de statistici, probabil ați învățat cum să calculați linia cea mai potrivită pentru un set de puncte de date numerice bivariate, unde „cea mai bună potrivire” a fost luată în sensul „cele mai mici pătrate” (adică, linia care minimizează suma abateri la pătrat ale liniei de la punctele de date reale). Nu vă va surprinde că este ușor să faceți acest lucru și în Python, așa cum se arată în Figura 9.1.
Funcția „polyfit()” a lui NumPy înseamnă „polynomial fit”. Vă veți aminti din algebra de liceu că un polinom este o funcție care implică numai puteri ale variabilei dvs. x: pătrate, cuburi și așa mai departe (fără sinusuri, cosinusuri, logaritmi, „e-la-puterea” sau orice altceva). De asemenea, sunt permise un termen x simplu (deoarece este x1 sau „x la puterea unu”) și un termen constant (deoarece este x0 sau „x la puterea zero”). Și oricare dintre aceste lucruri poate fi înmulțit cu orice coeficient doriți. Deci, un exemplu de polinom ar fi:
y = 4,3x3 − 29,4x2 + 6x − 13,8
Gradul unui polinom este cel mai mare exponent pe care îl conține; acest exemplu are gradul 3.
# Creați x puncte și o funcție y nebună, cu zgomot a acestora. x = np.random.uniform(0,100,100) x.sort() y = 4*x - .2 * x**2 + np.random.normal(0,120,100) # Obțineți panta și intersecția liniei celei mai potrivite. m, b = np.polyfit(x, y, 1) # La naiba, în timp ce suntem la asta, să găsim și cel mai potrivit pătratic. a1, a2, a3 = np.polyfit(x, y, 2) # Trasează punctele și aproximările. plt.scatter(x,y) plt.plot(x, m*x + b,color="green") plt.plot(x, a1*x**2 + a2*x + a3,color="purple")
Figura 9.1: Găsirea și trasarea liniei celei mai bune (cele mai mici pătrate). (Rețineți că trebuie să .sort() punctele x, deoarece desenăm diagrame de linii pe baza lor și obțineți zig-zaguri nebunești dacă nu sortați mai întâi valorile x.)
Acum, funcția polyfit() întreabă: ce polinom pot alege (de un grad dat) care se va apropia cel mai mult de punctele de date – și anume, minimizează distanțele pătrate dintre valoarea polinomului și puncte? Este nevoie de trei argumente: o matrice de valori x, o matrice de valori y și gradul. Returnează coeficienții pentru polinomul cel mai potrivit de gradul respectiv. Deci, în codul din Figura 9.1, această linie:
m, b = np.polyfit(x, y, 1)
spune „te rog să-mi dai coeficienții polinomului de 1 grad cel mai potrivit pentru aceste puncte x și y.” Deoarece un polinom de 1 grad este o linie dreaptă, am primit doi coeficienți înapoi, pe care i-am numit m și b, cum se face în mod tradițional. Trasarea liniei reale a fost realizată cu acest cod:
plt.plot(x, m*x + b,color="green")
care spune „Pentru fiecare valoare x din setul de date, realizați graficul x față de mx + b.” Și asta, desigur, trasează linia cu panta m și intersecția lui b cu y.Un cod similar realizează graficul funcția pătratică cea mai potrivită (polinom de 2 grade) sau orice grad ne place.
Indiferent de gradul pe care îl folosim, aceste aproximări se numesc modele parametrice, deoarece se bazează pe parametri (globali): o pantă și o intersecție, să zicem, sau trei coeficienți în cazul pătraticului. În fiecare caz, presupunem că datele se potrivesc cu o „formă funcțională” generală particulară (cum ar fi o linie sau o linie pătratică) și spunem: „Dând impresia că aceste date sunt „cu adevărat” o linie, ce parametri care descriu o linie ne-ar da cea mai bună linie?”
Figura 9.2 arată linia cea mai potrivită și pătratica cea mai potrivită (funcție cu un termen x2) pentru punctele generate de codul din Figura 9.1.
Figura 9.2: Linia cea mai potrivită și cea mai bună potrivire pătratică la setul de puncte generat de codul din Figura 9.1.
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 2: Introduction to Data Science, v. 1.1. Copyright © 2020 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2021 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 2
Lasă un răspuns