8 tapaa suorittaa yksinkertainen lineaarinen regressio ja mitata niiden nopeus Pythonin avulla

Keskustelemme 8 tapaa suorittaa yksinkertainen lineaarinen regressio Python-koodilla / paketeilla. Kiillotamme heidän etujaan ja miinuksiinsa ja osoitamme heidän suhteellisen laskennallisen monimutkaisuusmittarin.

Lukemattomalle osalle tiedemiehiä lineaarinen regressio on lähtökohta monille tilastolliselle mallintamiselle ja ennustavalle analyysiprojektille. Lineaarisen mallin sovittamisen (tarkasti ja nopeasti) merkitystä suurelle tietojoukolle ei voida liioitella. Kuten tässä artikkelissa korostettiin, 'LINEAR' -termi lineaarisessa regressiomallissa viittaa kertoimiin eikä ominaisuuksien asteeseen.

Ominaisuuksilla (tai riippumattomilla muuttujilla) voi olla mikä tahansa aste tai jopa transsendenttinen funktio, kuten eksponentiaalinen, logaritminen, sinimuotoinen. Siten suuri joukko luonnonilmiöitä voidaan mallintaa (suunnilleen) käyttämällä näitä muunnoksia ja lineaarista mallia, vaikka lähtö ja ominaisuuksien välinen funktionaalinen suhde olisi erittäin epälineaarinen.

Toisaalta, Python on nousemassa nopeasti tiedemiesten valituksi käytännölliseksi ohjelmointikieleksi. Siksi on tärkeätä, että tietotieteilijä on tietoinen kaikista erilaisista menetelmistä, jotka hän voi nopeasti sovittaa lineaarisen mallin melko suureen tietojoukkoon, ja arvioi kunkin ominaisuuden suhteellisen merkityksen prosessin lopputuloksessa.

Onko kuitenkin vain yksi tapa suorittaa lineaarinen regressioanalyysi Pythonissa? Jos valittavissa on useita vaihtoehtoja, miten valita tehokkain menetelmä?

Koneoppimiskirjaston scikit-oppimisen suuren suosion takia yleinen lähestymistapa on usein kutsua Linear Model -luokka kyseisestä kirjastosta ja sovittaa tiedot. Vaikka tämä voi tarjota lisäetuja muiden koneoppimisen putkilinjaominaisuuksien soveltamisessa (esim. Datan normalisointi, mallikerrointen normalisointi, lineaarimallin syöttäminen toiseen loppupään malliin), tämä ei usein ole nopein tai puhtain tapa, kun tietoanalyytikko tarvitsee vain nopean ja helppo tapa määrittää regressiokertoimet (ja jotkut niihin liittyvät perustilastot).

On nopeampia ja puhtaampia menetelmiä. Mutta ne kaikki eivät välttämättä tarjoa yhtä paljon tietoa tai mallinnusjoustavuutta.

Ole hyvä ja lue.

Koko kattilalevykoodi erilaisille lineaarisille regressiomenetelmille on saatavana täällä GitHub-arkistossani. Suurin osa niistä perustuu SciPy-pakettiin.

SciPy on kokoelma matemaattisia algoritmeja ja mukavuusfunktioita, jotka on rakennettu Pythonin Numpy-laajennukseen. Se lisää huomattavaa voimaa interaktiiviseen Python-istuntoon tarjoamalla käyttäjälle korkean tason komentoja ja luokkia datan käsittelemiseksi ja visualisoimiseksi.

Saanen keskustella lyhyesti jokaisesta menetelmästä,

Menetelmä: Scipy.polyfit () tai numpy.polyfit ()

Tämä on melko yleinen pienimmän neliösumman polynomifunktiofunktio, joka hyväksyy tietojoukon ja minkä tahansa asteen polynomifunktion (käyttäjän määrittelemä), ja palauttaa kertoimien ryhmän, joka minimoi neliövirheen. Yksityiskohtainen kuvaus toiminnosta on annettu tässä. Yksinkertaiselle lineaariselle regressiolle voidaan valita aste 1. Jos haluat sovittaa korkeamman asteen mallin, voit rakentaa polynomiominaisuuksia lineaaristen piirteiden tiedoista ja sopia myös malliin.

Menetelmä: Stats.linregress ()

Tämä on erittäin erikoistunut lineaarinen regressiofunktio, joka on käytettävissä Scipyn tilastomoduulissa. Sen joustavuus on melko rajoitettu, koska se on optimoitu laskemaan lineaarinen pienimmän neliösumman regressio vain kahdelle mittausjoukolle. Siten et voi käyttää yleistettyä lineaarista mallia tai monimuuttuja regressiota tätä käyttämällä. Mutta erikoistuneen luonteensa vuoksi se on nopein menetelmä yksinkertaisen lineaarisen regression suhteen. Asennetun kertoimen ja sieppaustermin lisäksi se antaa myös perustilastoja, kuten R²-kertoimen ja vakiovirheen.

Menetelmä: Optimoi.curve_fit ()

Tämä on samansuuntaista kuin Polyfit-menetelmä, mutta luonteeltaan yleisempi. Tämä scipy.optimize-moduulin tehokas toiminto voi sovittaa minkä tahansa käyttäjän määrittelemän toiminnon datajoukkoon pienentämällä pienimmän neliön.

Yksinkertaiseen lineaariseen regressioon voidaan kirjoittaa lineaarinen mx + c-funktio ja kutsua tämä arvioija. Sanomattakin on selvää, että se toimii myös monimuuttuja regression kanssa. Se palauttaa joukon toimintoparametreja, joille pienimmän neliön mitta on minimoitu, ja siihen liittyvän kovarianssimatriisin.

Menetelmä: numpy.linalg.lstsq

Tämä on perusmenetelmä pienimmän neliön ratkaisun laskemiseksi lineaariselle yhtälöjärjestelmälle matriisikertoimella. Se tulee kätevästä lineaarisesta algebramoduulista, joka on tyypillinen paketti. Kotelon alla se ratkaisee yhtälön a x = b laskemalla vektorin x, joka minimoi Euklidinen 2-normin || b - a x || ².

Kaava voi olla ali-, hyvin- tai liian määritetty (ts. A: n lineaarisesti riippumattomien rivien lukumäärä voi olla pienempi, yhtä suuri tai suurempi kuin sen lineaarisesti riippumattomien sarakkeiden lukumäärä). Jos a on neliö ja on täydellisen aseman, niin x (mutta pyöristysvirheen tapauksessa) on yhtälön "tarkka" ratkaisu.

Voit tehdä joko yksinkertaisen tai monimuuttujaregression tällä ja saada takaisin lasketut kertoimet ja jäännökset. Yksi pieni temppu on, että ennen kuin kutsut tätä toimintoa, sinun on liitettävä x-tietoihin sarakkeessa 1'-arvot sieppausajan laskemiseksi. Osoittautuu, että se on yksi nopeimmista tavoista yrittää lineaarisen regression ongelmia.

Menetelmä: Statsmodels.OLS ()

Statsmodels on loistava pieni Python-paketti, joka tarjoaa luokkia ja toimintoja monien erilaisten tilastomallien arvioimiseksi, tilastollisten testien suorittamiseksi ja tilastotietojen tutkimiseksi. Jokaiselle arvioijalle on saatavana laaja luettelo tulosta koskevista tilastoista. Tulokset on testattu olemassa olevien tilastopakettien suhteen oikeellisuuden varmistamiseksi.

Lineaarista regressiota varten voidaan käyttää OLS- tai Tavallinen vähiten neliö -toimintoa tästä paketista ja saada täydet tilastotiedot arviointiprosessista.

Yksi pieni temppu muistettavana on, että sinun on lisättävä vakio manuaalisesti x-tietoihin sieppauksen laskemiseksi, muuten se ilmoittaa oletuksena vain kertoimen. Alla on tilannekuva OLS-mallin täydellisestä tulokset-yhteenvedosta. Se on yhtä rikas kuin mikä tahansa toiminnallinen tilastollinen kieli, kuten R tai Julia.

Menetelmä: Analyyttinen liuos käyttämällä matriisin käänteistä menetelmää

Hyvin ilmastoiduissa lineaarisissa regressio-ongelmissa (ainakin silloin, kun datapisteiden lukumäärä> # ominaisuuksien lukumäärä) on olemassa yksinkertainen suljetun muodon matriisiratkaisu kertoimien laskemiseksi, joka takaa pienimmän neliön minimoinnin. Sen antaa,

Yksityiskohtaisia ​​johtopäätöksiä ja keskustelua tästä ratkaisusta käsitellään tässä.

Yhdellä on kaksi vaihtoehtoa tässä:

(a) käyttämällä yksinkertaista kertovaa matriisia käänteisesti.

(b) lasketaan ensin Moore-Penrose-yleistetty x-datan pseudoinversiomatriisi, minkä jälkeen otetaan pistetuote y-datan kanssa. Koska tähän toiseen prosessiin liittyy yksiarvoinen hajoaminen (SVD), se on hitaampi, mutta se voi toimia ei-ilmastoidussa tietojoukossa hyvin.

Menetelmä: sklearn.linear_model.LinearRegression ()

Tämä on olennainen menetelmä, jota suurin osa koneoppimisinsinööreistä ja tietotekijöistä käyttää. Tietysti todellisen maailman ongelmiin sitä ei todennäköisesti koskaan käytetä paljon ja se korvataan ristiin validoiduilla ja normalisoiduilla algoritmeilla, kuten Lasso-regressio tai Ridge-regressio. Mutta näiden edistyneiden toimintojen olennainen ydin on tässä mallissa.

Näiden menetelmien nopeuden ja ajan monimutkaisuuden mittaaminen

Tietotieteilijänä tulisi aina etsiä tarkkoja, mutta nopeita menetelmiä / toimintoja tietojen mallinnustyön suorittamiseksi. Jos menetelmä on luontaisesti hidas, silloin se luo suurten tietojoukkojen toteuttamisen pullonkaulan.

Hyvä tapa skaalautuvuuden määrittämiseksi on ajaa malleja tietojoukon koon kasvattamiseksi, purkaa kaikkien ajojen suoritusajat ja piirtää trendi.

Tässä on kattilalevyn koodi tälle. Ja tässä on tulos. Stats.linregress- ja yksinkertaiset matriisin käänteiset menetelmät ovat yksinkertaisuuden vuoksi nopeimpia, jopa 10 miljoonaa datapistettä.

Yhteenveto

Tietotekijänä on aina tutkittava useita vaihtoehtoja saman analyysi- tai mallinnustehtävän ratkaisemiseksi ja valittava parasta omalle ongelmalleen.

Tässä artikkelissa käsiteltiin 8 tapaa suorittaa yksinkertainen lineaarinen regressio. Suurin osa niistä on skaalattavissa myös yleisemmälle monimuunnelmalle ja polynomiselle regressiomallinnukselle. Emme luetteloineet R2: n soveltuvuutta näille menetelmille, koska ne kaikki ovat hyvin lähellä yhtä.

Yhden muuttujan regressiolle, miljoonilla keinotekoisesti generoiduilla datapisteillä, regressiokerroin arvioidaan erittäin hyvin.

Tämän artikkelin tavoitteena on ensisijaisesti keskustella näiden menetelmien suhteellisesta nopeudesta / laskennallisesta monimutkaisuudesta. Näytimme kunkin laskennallisen monimutkaisuusmittauksen testaamalla kasvavan koon syntetisoidulla tietojoukolla (jopa 10 miljoonaa näytettä). Yllättäen yksinkertainen matriisin käänteinen analyyttinen ratkaisu toimii melko nopeasti verrattuna scikit-learningin laajalti käytettyyn lineaariseen malliin.

Jos sinulla on kysyttävää tai ideoita jaettavaksi, ota yhteyttä kirjoittajaan tirthajyoti [AT] gmail.com. Voit myös tarkistaa tekijöiden GitHub-säilytystiloista muita hauskoja koodinpätkiä Pythonissa, R: ssä tai MATLABissa ja koneoppimisresursseja. Jos olet, kuten minä, intohimoinen koneoppimiseen / tietojenkäsittelyyn / puolijohteisiin, lisää rohkeasti minua LinkedInissä tai seuraa minua Twitterissä.