Znanost podataka s Pythonom: 8 načina linearne regresije i mjerenja njihove brzine

U ovom članku raspravljamo o 8 načina izvođenja jednostavne linearne regresije pomoću Python koda / paketa. Pregledavamo njihove prednosti i nedostatke i prikazujemo njihovu relativnu mjernu računsku složenost.

Za mnoge znanstvenike podataka linearna regresija polazna je točka mnogih projekata statističkog modeliranja i prediktivne analize. Važnost prilagođavanja (precizno i ​​brzo) linearnog modela velikom skupu podataka ne može se precijeniti. Kao što je istaknuto u ovom članku, pojam " LINEARNI " u modelu linearne regresije odnosi se na koeficijente, a ne na stupanj značajki.

Značajke (ili neovisne varijable) mogu biti bilo kojeg stupnja ili čak transcendentalne funkcije poput eksponencijalne, logaritamske, sinusoidne. Dakle, veliko tijelo prirodnih pojava može se modelirati (približno) pomoću ovih transformacija i linearnog modela, čak i ako je funkcionalni odnos između rezultata i značajki izrazito nelinearan.

S druge strane, Python se brzo pojavljuje kao faktički programski jezik koji odabiru znanstvenici podataka. Stoga je kritično za znanstvenika podataka da bude svjestan svih različitih metoda koje on / ona može brzo uklopiti linearni model u prilično velik skup podataka i procijeniti relativnu važnost svake značajke u ishodu procesa.

Međutim, postoji li samo jedan način za izvođenje linearne regresijske analize u Pythonu? U slučaju više dostupnih opcija, kako odabrati najučinkovitiju metodu?

Zbog široke popularnosti biblioteke strojnog učenja scikit-learn, čest je pristup pozivanju klase Linear Model iz te knjižnice i uklapanju podataka. Iako ovo može ponuditi dodatne prednosti primjene ostalih značajki strojnog učenja (npr. Normalizacija podataka, regularizacija koeficijenta modela, dodavanje linearnog modela na drugi nizvodni model), to često nije najbrža ili najčišća metoda kada analitičar podataka treba samo brz i jednostavan način za određivanje koeficijenata regresije (i neke osnovne pridružene statistike).

Postoje brže i čišće metode. Ali svi oni možda neće ponuditi jednaku količinu informacija ili fleksibilnost modeliranja.

Molimo pročitajte dalje.

Cjelokupni kod ploče kotla za različite metode linearne regresije dostupan je ovdje na mom GitHub spremištu. Većina ih se temelji na paketu SciPy.

SciPy je zbirka matematičkih algoritama i praktičnih funkcija izgrađenih na Numpyjevom proširenju Pythona . Dodaje značajnu snagu interaktivnoj sesiji Python pružajući korisniku naredbe i klase na visokoj razini za manipulaciju i vizualizaciju podataka.

Dopustite mi da ukratko razgovaram o svakoj metodi,

Metoda: Scipy.polyfit () ili numpy.polyfit ()

Ovo je prilično općenita funkcija polinomskog uklapanja najmanjih kvadrata koja prihvaća skup podataka i polinomsku funkciju bilo kojeg stupnja (koju je odredio korisnik) i vraća niz koeficijenata koji minimiziraju kvadratnu pogrešku. Detaljan opis funkcije dan je ovdje. Za jednostavnu linearnu regresiju može se odabrati stupanj 1. Ako želite uklopiti model višeg stupnja, možete konstruirati polinomske značajke iz podataka linearne značajke i prilagoditi se modelu.

Metoda: Stats.linregress ()

Ovo je visoko specijalizirana funkcija linearne regresije dostupna unutar statističkog modula Scipy. Prilično je ograničena u svojoj fleksibilnosti jer je optimizirana za izračunavanje linearne regresije najmanjih kvadrata samo za dva skupa mjerenja. Dakle, pomoću ovog ne možete uklopiti generalizirani linearni model ili multi-varijabilnu regresiju. Ali, zbog svoje specijalizirane prirode, to je jedna od najbržih metoda kada je u pitanju jednostavna linearna regresija. Osim opremljena koeficijenta i presresti pojma, također vraća osnovne statističke podatke kao što su R ² koeficijenta i standardne pogreške.

Metoda: Optimize.curve_fit ()

To je na istoj liniji kao i metoda Polyfit, ali općenitije prirode. Ova moćna funkcija iz modula scipy.optimize može uklopiti bilo koju korisnički definiranu funkciju u skup podataka radeći minimizaciju s najmanje kvadrata.

Za jednostavnu linearnu regresiju, jednostavno se može napisati linearna mx + c funkcija i nazvati ovaj procjenitelj. Podrazumijeva se da to djeluje i na multi-varijabilnu regresiju. Vraća niz parametara funkcije za koje je najmanja kvadratna mjera umanjena i pridružena matrica kovarijance.

Metoda: numpy.linalg.lstsq

Ovo je temeljna metoda izračuna najmanje-kvadratnog rješenja linearnog sustava jednadžbi faktorizacijom matrice. Dolazi iz praktičnog modula linearne algebre paketa numpy. Ispod haube rješava jednadžbu ax = b izračunavanjem vektora x koji minimizira euklidsku 2-normu || b - sjekira || ² .

Jednadžba može biti premalo, dobro ili previše određena (tj. Broj linearno neovisnih redaka a može biti manji od, jednak ili veći od broja linearno neovisnih stupaca). Ako je trg i punog ranga, onda x (ali pogreška zaokruženja) je „točno” rješenje jednadžbe.

Pomoću toga možete napraviti jednostavnu ili multi-varijabilnu regresiju i vratiti izračunate koeficijente i ostatke. Jedan mali trik je da prije pozivanja ove funkcije morate dodati stupac 1 x podacima x da biste izračunali pojam presretanja. Ispostavilo se da je to jedna od najbržih metoda za rješavanje problema linearne regresije.

Metoda: Statsmodels.OLS ()

Statsmodels je sjajni mali Python paket koji nudi klase i funkcije za procjenu mnogih različitih statističkih modela, kao i za provođenje statističkih testova i istraživanje statističkih podataka. Opsežan popis statistika rezultata dostupan je za svaki procjenitelj. Rezultati se ispituju prema postojećim statističkim paketima kako bi se osigurala točnost.

Za linearnu regresiju može se koristiti funkcija OLS ili Ordinary-Least-Square iz ovog paketa i dobiti potpuni statistički podaci o procesu procjene.

Jedan mali trik koji treba zapamtiti jest da morate x ručno dodati konstantu x podacima za izračunavanje presjeka, inače će prema zadanim postavkama prijaviti samo koeficijent. Ispod je kratka snimka potpunog sažetka rezultata OLS modela. Bogat je kao i svaki funkcionalni statistički jezik poput R ili Julije.

Metoda: Analitičko rješenje metodom inverzne matrice

Za dobro uvjetovane probleme linearne regresije (barem tamo gdje je # podatkovnih točaka> # značajki), postoji jednostavno matrično rješenje zatvorenog oblika za izračunavanje koeficijenata koje jamči minimalizaciju najmanje kvadrata. Daje ga,

Ovdje se raspravlja o detaljnom izvodu i raspravi o ovom rješenju.

Ovdje postoje dva izbora:

(a) upotrebom jednostavne multiplikativne inverzne matrice.

(b) prvo izračunavanje Moore-Penroseove generalizirane pseudoinverzne matrice x-podataka praćeno uzimanjem točkanog proizvoda s y-podacima. Budući da ovaj drugi proces uključuje dekompoziciju pojedinačne vrijednosti (SVD), on je sporiji, ali može dobro funkcionirati i za loše uvjetovani skup podataka.

Metoda: sklearn.linear_model.LinearRegression ()

Ovo je najznačajnija metoda koju koristi većina inženjera strojnog učenja i znanstvenika podataka. Naravno, za problem iz stvarnog svijeta on se vjerojatno nikad puno koristi, a zamjenjuju ga unakrsni validirani i regulirani algoritmi poput Lassove regresije ili Ridgeove regresije. Ali bitna srž tih naprednih funkcija leži u ovom modelu.

Mjerenje brzine i vremenske složenosti ovih metoda

Kao znanstvenik podataka, uvijek treba tražiti točne, ali brze metode / funkcije za obavljanje poslova modeliranja podataka. Ako je metoda u osnovi spora, tada će stvoriti usko grlo za izvršavanje za velike skupove podataka.

Dobar način za određivanje skalabilnosti je pokretanje modela za povećanje veličine skupa podataka, izdvajanje vremena izvršavanja za sve pokrete i crtanje trenda.

Evo koda ploče kotla za ovo. I evo rezultata. Zbog svoje jednostavnosti, stats.linregress i jednostavne inverzne metode matrice su najbrže, čak i do 10 milijuna točaka podataka.

Sažetak

Kao znanstvenik podataka, uvijek treba istražiti više mogućnosti za rješavanje istog zadatka analize ili modeliranja i odabrati najbolju za svoj određeni problem.

U ovom smo članku razgovarali o 8 načina izvođenja jednostavne linearne regresije. Većina ih je skalabilna i na općenitije multivarijantno i polinomno regresijsko modeliranje. Nismo naveli R² prikladan za ove metode jer su sve vrlo blizu 1.

Za regresiju s jednom varijablom, s milijunima umjetno generiranih točaka podataka, koeficijent regresije procjenjuje se vrlo dobro.

Cilj ovog članka prvenstveno je raspraviti relativnu brzinu / računsku složenost ovih metoda. Mjeru računske složenosti svakog od njih prikazali smo ispitivanjem na sintetiziranom skupu podataka sve veće veličine (do 10 milijuna uzoraka). Iznenađujuće, jednostavno inverzno analitičko rješenje matrice djeluje prilično brzo u usporedbi s široko korištenim Linearnim modelom scikit-learna.

Ako imate bilo kakvih pitanja ili ideja za dijeljenje, obratite se autoru na tirthajyoti [AT] gmail.com . Također možete provjeriti autorska GitHub spremišta za ostale isječke zabavnog koda u Pythonu, R ili MATLAB-u i resurse strojnog učenja. Ako ste poput mene zaljubljenici u strojno učenje / znanost podataka / poluvodiče, slobodno me dodajte na LinkedIn ili slijedite na Twitteru.