Adattudomány Python-nal: 8 módszer lineáris regresszió végrehajtására és sebességük mérésére

Ebben a cikkben 8 módszert tárgyalunk az egyszerű lineáris regresszió Python kód / csomagok használatával. Áttekintjük előnyeiket és hátrányaikat, és megmutatjuk relatív számítási bonyolultsági mértéküket.

Sok adatkutató számára a lineáris regresszió a sok statisztikai modellezés és a prediktív elemzés projektje. A lineáris modell nagy adatkészlethez való (pontos és gyors) illesztésének fontosságát nem lehet túlbecsülni. Amint e cikkben rámutattunk, a lineáris regressziós modellben a „ LINEAR ” kifejezés az együtthatókra vonatkozik, nem pedig a jellemzők mértékére.

A jellemzők (vagy független változók) bármilyen fokúak lehetnek, vagy akár transzcendentális funkciók is lehetnek, például exponenciális, logaritmikus, szinuszos. Így ezeknek a transzformációknak és a lineáris modellnek a felhasználásával egy nagy mennyiségű természeti jelenség modellezhető (hozzávetőlegesen) akkor is, ha a kimenet és a jellemzők közötti funkcionális kapcsolat erősen nemlineáris.

Másrészt a Python gyorsan megjelenik az adatkutatók által választott de facto programozási nyelvként. Ezért kritikus fontosságú, hogy egy adattudós tisztában legyen az összes különféle módszerrel, amellyel lineáris modellt gyorsan illeszthet egy meglehetősen nagy adathalmazhoz, és felméri az egyes jellemzők relatív fontosságát a folyamat kimenetelében.

Van azonban csak egy módja a lineáris regressziós elemzésnek a Pythonban? Több elérhető opció esetén hogyan lehet kiválasztani a leghatékonyabb módszert?

A gépi tanulási könyvtár scikit-learn széles körű népszerűsége miatt gyakran elterjedt megközelítés az, hogy a Linear Model osztályt abból a könyvtárból hívják, és illesszék az adatokat. Bár ez további előnyöket kínálhat a gépi tanulás egyéb pipeline funkcióinak alkalmazásában (pl. Adatok normalizálása, modellegyüttható-szabályozás, a lineáris modell másik downstream modellbe történő betáplálása), ez gyakran nem a leggyorsabb vagy legtisztább módszer, amikor az adatelemzőnek csak egy gyors és egyszerű módszer a regressziós együtthatók (és néhány alapvető kapcsolódó statisztika) meghatározására.

Vannak gyorsabb és tisztább módszerek. De lehet, hogy mindegyik nem kínál azonos mennyiségű információt vagy modellezési rugalmasságot.

Kérjük, olvassa tovább.

A különféle lineáris regressziós módszerek teljes kazánlemez-kódja itt érhető el a GitHub-adattáramon. Legtöbbjük a SciPy csomagra épül.

A SciPy egy matematikai algoritmusok és kényelmi funkciók gyűjteménye, amely a Python Numpy kiterjesztésére épül . Jelentős erőt ad az interaktív Python munkamenetnek azáltal, hogy a felhasználónak magas szintű parancsokat és osztályokat biztosít az adatok manipulálására és megjelenítésére.

Engedje meg, hogy röviden megvitassam az egyes módszereket,

Módszer: Scipy.polyfit () vagy numpy.polyfit ()

Ez egy elég általános legkisebb négyzetekkel rendelkező polinomillesztési függvény, amely elfogadja az adatkészletet és bármilyen fokú polinomfüggvényt (amelyet a felhasználó határoz meg), és egy olyan együttható tömböt ad vissza, amely minimalizálja a négyzet hibáját. A funkció részletes leírása itt található. Az egyszerű lineáris regresszióhoz választhatunk 1-es fokozatot. Ha magasabb fokú modellt akarunk illeszteni, akkor a lineáris tulajdonságadatokból konstruálhatunk polinomjellemzőket, és illeszkedhetnek a modellhez is.

Módszer: Stats.linregress ()

Ez egy nagyon speciális lineáris regressziós függvény, amely a Scipy statisztikai moduljában érhető el. Rugalmassága meglehetősen korlátozott, mivel a lineáris legkisebb négyzetes regresszió kiszámítására csak két méréssorozatra van optimalizálva. Így ennek segítségével nem illeszthető be általánosított lineáris modell vagy többváltozós regresszió. De speciális jellege miatt ez az egyik leggyorsabb módszer, amikor egyszerű lineáris regresszióról van szó. Az illesztett együtthatón és elfogási feltételen kívül olyan alapvető statisztikákat is ad vissza, mint az R ² együttható és a standard hiba.

Módszer: Optimize.curve_fit ()

Ez megegyezik a Polyfit módszerével, de általánosabb jellegű. Ez a scipy.optimize modul hatékony funkciója bármely felhasználó által definiált függvényt illeszthet egy adatkészlethez a legkisebb négyzet méretű minimalizálásával.

Az egyszerű lineáris regresszióhoz egyszerűen írhatunk lineáris mx + c függvényt, és felhívhatjuk ezt a becslőt. Anélkül, hogy azt mondanám, hogy többváltozós regresszió esetén is működik. Visszaadja a függvényparaméterek tömbjét, amelyeknél a legkisebb négyzet mértékét minimalizáljuk, és a hozzá tartozó kovarianciamátrixot.

Módszer: numpy.linalg.lstsq

Ez az alapvető módszer a lineáris egyenletrendszer legkisebb négyzetű megoldásának kiszámításához mátrixfaktorizációval. A numpy csomag praktikus lineáris algebra moduljából származik. A motorháztető alatt megoldja az ax = b egyenletet egy x vektor kiszámításával, amely minimalizálja az euklideszi 2-normát || b - ax || ² .

Az egyenlet lehet alul-, jól, vagy túl határozott (azaz a száma lineárisan független sorok egy lehet kisebb, egyenlő vagy nagyobb, mint a több lineárisan független oszlop). Ha a négyzet és teljes rangú, akkor x (de a kerekítési hiba esetén) az egyenlet „pontos” megoldása.

Ezzel egyszerű vagy többváltozós regressziót hajthat végre, és visszakaphatja a számított együtthatókat és maradványokat. Egy apró trükk az, hogy mielőtt meghívná ezt a függvényt, hozzá kell adnia egy 1-es oszlopot az x adatokhoz az elfogási idő kiszámításához. Kiderült, hogy ez az egyik gyorsabb módszer a lineáris regressziós problémák megoldására.

Módszer: Statsmodels.OLS ()

A Statsmodels egy nagyszerű Python csomag, amely osztályokat és függvényeket kínál számos különböző statisztikai modell becslésére, valamint statisztikai tesztek és statisztikai adatok feltárására. Az egyes becslőkhöz az eredménystatisztikák átfogó listája áll rendelkezésre. Az eredményeket a meglévő statisztikai csomagok alapján tesztelik a helyesség biztosítása érdekében.

A lineáris regresszióhoz használhatja az OLS vagy a Közönséges legkisebb négyzet függvényt ebből a csomagból, és megszerezheti a becsült folyamat teljes statisztikai információit.

Egy apró trükk, amire emlékezni kell, hogy az elfogás kiszámításához manuálisan hozzá kell adni egy konstansot az x adatokhoz, különben alapértelmezés szerint csak az együtthatót jelenti. Az alábbiakban bemutatjuk az OLS modell teljes eredmény-összefoglalójának pillanatképét. Ugyanolyan gazdag, mint bármely funkcionális statisztikai nyelv, például R vagy Julia.

Módszer: Analitikus oldat mátrix inverz módszerrel

Jól kondicionált lineáris regressziós problémák esetén (legalábbis ahol az adatpontok száma> a jellemzők száma #) létezik egy egyszerű, zárt formájú mátrix megoldás az együtthatók kiszámításához, amely garantálja a legkisebb négyzet minimalizálást. Adta,

A megoldás részletes levezetését és megvitatását itt tárgyaljuk.

Az egyiknek két lehetősége van itt:

(a) egyszerű multiplikatív mátrix inverz használata.

(b) először kiszámoljuk a Moore-Penrose általánossá tett x-adatok pszeudoinverzális mátrixát, majd egy pontszorzatot veszünk az y-adatokkal. Mivel ez a 2. folyamat magában foglalja az egyes értékek lebontását (SVD), lassabb, de nem jól kondicionált adatkészlet esetén is működhet.

Módszer: sklearn.linear_model.LinearRegression ()

A gépi tanulási mérnökök és az adattudósok többsége ezt a lényegi módszert alkalmazza. Természetesen a valós világ problémáira valószínűleg soha nem használják sokat, és helyébe olyan keresztellenőrzött és rendszeresített algoritmusok lépnek, mint a Lasso regresszió vagy a Ridge regresszió. De e fejlett funkciók alapvető magja ebben a modellben rejlik.

Ezen módszerek sebességének és időbeli összetettségének mérése

Adatkutatóként mindig pontos, mégis gyors módszereket / funkciókat kell keresnie az adatmodellezési munka elvégzéséhez. Ha a módszer eleve lassú, akkor végrehajtási szűk keresztmetszetet hoz létre a nagy adathalmazok számára.

A skálázhatóság meghatározásának jó módja az, hogy futtatja a modelleket az adathalmaz méretének növelése érdekében, kivonja az összes futtatás végrehajtási idejét és megrajzolja a trendet.

Itt van erre a kazánlemez kódja. És itt van az eredmény. Az egyszerűségük miatt a stats.linregress és az egyszerű mátrix inverz módszerek a leggyorsabbak, akár 10 millió adatpontig is.

Összegzés

Adatkutatóként mindig több lehetőséget kell megvizsgálnia ugyanazon elemzési vagy modellezési feladat megoldása érdekében, és ki kell választania az adott problémára a legjobbat.

Ebben a cikkben az egyszerű lineáris regresszió végrehajtásának 8 módját vitattuk meg. Legtöbbjük skálázható egy általánosított többváltozós és polinom regressziós modellezésre is. Nem soroltuk az ezekre a módszerekre alkalmas R²-t, mivel mindegyik nagyon közel áll az 1-hez.

Egyváltozós regresszió esetén, millió mesterségesen előállított adatponttal a regressziós együtthatót nagyon jól becsülik meg.

A cikk célja elsősorban e módszerek relatív sebességének / számítási komplexitásának megvitatása. Megmutattuk mindegyikük számítási bonyolultsági mértékét növekvő méretű (akár 10 millió minta) szintetizált adatsoron történő teszteléssel. Meglepő módon az egyszerű mátrix inverz analitikai megoldás meglehetősen gyorsan működik, összehasonlítva a scikit-learn széles körben alkalmazott lineáris modelljével.

Ha bármilyen kérdése vagy ötlete van megosztani, kérjük, forduljon a szerzőhöz a tirthajyoti [AT] gmail.com címen . Ellenőrizheti a szerző GitHub-tárházában más szórakoztató kódrészleteket a Python, R vagy MATLAB fájlokban, valamint a gépi tanulási erőforrásokat. Ha hozzám hasonlóan rajong a gépi tanulásért / az adattudományért / a félvezetőkért, kérjük, bátran vegyen fel a LinkedIn-be, vagy kövessen a Twitteren.