Recenzija: Scikit-learn sjaji za jednostavnije strojno učenje

Scikits su znanstveni alati temeljeni na Pythonu izgrađeni oko SciPy-a, Python-ove knjižnice za znanstveno računanje. Scikit-learn je projekt otvorenog koda usmjeren na strojno učenje: klasifikacija, regresija, klasterizacija, smanjenje dimenzionalnosti, odabir modela i predobrada. To je prilično konzervativan projekt koji prilično pažljivo izbjegava puzanje opsega i skakanje na nedokazanim algoritmima, iz razloga održavanja i ograničenih resursa za programere. S druge strane, ima prilično lijep izbor solidnih algoritama, a koristi Cython (kompajler Python-to-C) za funkcije koje trebaju biti brze, poput unutarnjih petlji.

Među područjima Scikit naučiti se ne pokrije su duboko učenje, učenje pojačanje, grafički modeli i predviđanje slijed. Definirano je kao da je u i za Python, tako da nema API-je za druge jezike. Scikit-learn ne podržava PyPy, brzu pravodobnu kompilaciju implementacije Pythona, jer njegove ovisnosti NumPy i SciPy ne podržavaju u potpunosti PyPy.

Scikit-learn ne podržava GPU ubrzanje iz više razloga koji su povezani sa složenošću i strojnim ovisnostima koje bi uveo. Zatim, osim neuronskih mreža, Scikit-learn nema malu potrebu za GPU ubrzanjem.

Značajke naučenja Scikit-a

Kao što sam spomenuo, Scikit-learn ima dobar izbor algoritama za klasifikaciju, regresiju, klasterizaciju, smanjenje dimenzionalnosti, odabir modela i predobradu. U klasifikacijskom području, koje se odnosi na identificiranje kategorije kojoj objekt pripada, a naziva se nadgledano učenje, implementira vektorske strojeve potpore (SVM), najbliže susjede, logističku regresiju, slučajnu šumu, stabla odlučivanja i tako dalje, sve do neuronska mreža s više razina perceptrona (MLP).

Međutim, implementacija MLP-a Scikit-learn izričito nije namijenjena velikim primjenama. Za opsežne implementacije zasnovane na GPU-u i za duboko učenje, pogledajte mnoge srodne projekte Scikit-learn-a, koji uključuju Python-ove okvire dubokih neuronskih mreža kao što su Keras i Theano.

Za regresiju, koja se odnosi na predviđanje atributa kontinuirane vrijednosti povezanog s objektom (kao što je cijena dionice), Scikit-learn ima vektorsku regresiju potpore (SVR), regresiju grebena, Lasso, Elastic Net, regresiju najmanjeg kuta (LARS ), Bayesova regresija, razne vrste robusne regresije itd. To je zapravo veći izbor regresijskih algoritama nego što bi većina analitičara mogla poželjeti, ali postoje dobri primjeri za svaki od njih koji je uključen.

Za klasteriranje, tehniku ​​učenja bez nadzora, u kojoj se slični objekti automatski grupiraju u skupove, Scikit-learn ima k-sredstva, spektralno klasteriranje, pomak srednje vrijednosti, hijerarhijsko klasteriranje, DBSCAN i neke druge algoritme. Ponovno je uključen opseg konzervativnih algoritama.

Smanjenje dimenzionalnosti odnosi se na smanjenje broja slučajnih varijabli koje treba uzeti u obzir, koristeći tehnike razgradnje kao što su analiza glavnih komponenata (PCA) i faktorizacija nenegativne matrice (NMF) ili tehnike odabira značajki. Odabir modela odnosi se na usporedbu, provjeru valjanosti i odabir parametara i modela, a koristi algoritme poput pretraživanja mreže, unakrsne provjere valjanosti i metričkih funkcija. Za oba područja Scikit-learn uključuje sve dobro dokazane algoritme i metode u lako dostupne API-je.

Predobrada, koja uključuje izdvajanje i normalizaciju značajki, jedan je od prvih i najvažnijih dijelova procesa strojnog učenja. Normalizacija pretvara značajke u nove varijable, često s nultom srednjom i jediničnom varijancom, ali ponekad kako bi ležale između zadane minimalne i maksimalne vrijednosti, često 0 i 1. Izvlačenje značajke pretvara tekst ili slike u brojeve korisne za strojno učenje. I ovdje Scikit-learn poslužuje sva ukusna klasična jela koja biste očekivali na ovom smorgasbord-u. Slobodno možete prikupiti ono što vam se sviđa.

Imajte na umu da se izdvajanje značajki prilično razlikuje od odabira obilježja , koji je ranije spomenut pod smanjenjem dimenzija. Odabir značajki način je poboljšanja učenja uklanjanjem nepromjenjivih, kovarijantnih ili na drugi način statistički nevažnih značajki.

Ukratko, Scikit-learn uključuje čitav niz algoritama i metoda za smanjenje dimenzionalnosti, odabir modela, izdvajanje značajki i normalizaciju, iako mu nedostaje bilo kakav vođeni tijek rada za njihovo postizanje, osim dobre zbirke primjera i dobre dokumentacije.

Instaliranje i pokretanje Scikit-learn

Moja instalacija Scikit-learna možda je bila moja najlakša instalacija okvira za strojno učenje ikad. Budući da sam već imao instalirane sve preduvjete i dovoljno ažurirane (Python, Numpy i Scipy), trebala je jedna naredba:

 $ sudo pip install -U scikit-learn

U redu, trebale su mi dvije naredbe, jer sam prvi put zaboravio sudo.

To me natjeralo na Scikit-learn 0.18.1. Za dobru mjeru, također sam provjerio GitHub spremište, instalirao okvir za testiranje nosa i izgradio razvojnu verziju Scikit-learn iz izvora, koja je bila jednostavna poput promjene u korijenu spremišta i tipkanja make. Trebalo je neko vrijeme za kompajliranje Pythona, generiranje i kompajliranje svih C datoteka, povezivanje sklopa i pokretanje svih testova, ali nije bila potrebna nikakva intervencija.

Pokretanje mog prvog Scikit-learn primjera također je bilo vrlo jednostavno. Na stranici s općenitim primjerima kliknuo sam na primjer za crtanje unakrsnih provjerenih predviđanja, pročitao bilježnicu, preuzeo izvorni kod Pythona i Jupyterovu bilježnicu i pokrenuo ih. Izvor Pythona nekoliko se sekundi bavio, generirao neke poruke upozorenja i iskakao grafikon. Jupyterova bilježnica učinila je u osnovi istu stvar kad sam je interaktivno pokrenuo, kao što možete vidjeti na donjoj slici.

Scikit-learn postiže najviše ocjene za jednostavnost razvoja među svim okvirima strojnog učenja koje sam testirao, ponajviše zato što algoritmi rade onako kako su oglašeni i dokumentirani, API-ji su dosljedni i dobro dizajnirani, a malo je „neusklađenosti impedancije“ između strukture podataka. Zadovoljstvo mi je raditi s knjižnicom u kojoj su značajke temeljito dotjerane, a programske pogreške temeljito isprazne.

Učenje Scikit-učenja

Dokumentacija Scikit-learn dobra je, a primjera je mnogo - ukupno oko 200. Većina primjera uključuje barem jedan graf izrađen iz analiziranih podataka pomoću Matplotliba. Sve to doprinosi lakoći razvoja knjižnice i lakoći učenja.

Postoji jedan dugački vodič, "Vodič o statističkom učenju za obradu znanstvenih podataka", koji ima pet odjeljaka i dodatak o pronalaženju pomoći. Vodič je prilično dobar, kako u pokrivanju osnovnih pojmova, tako i u pokazivanju primjera pomoću stvarnih podataka, koda i grafikona. Također se prikazuju primjeri povezani s tekstom - na primjer, usporedba četiri različita SVM klasifikatora prikazana na donjoj slici.

Primjeri koje sam obrađivao bili su prilično jasni na njihovim web stranicama. U mnogim su slučajevima, kada bih preuzeo i pokrenuo primjere, izbacili upozorenja koja nisu prikazana na web stranici, ali bi uvijek rezultirali istim rezultatima. Prva slika iznad, koja prikazuje izlaz moje Jupyterove bilježnice za crtanje unakrsnih provjerenih predviđanja, dobar je primjer.

Većinu upozorenja pripisujem nedostacima u Apple vecLib okviru i evoluciji u Python knjižnicama. Čini se da su neka upozorenja u Pythonu 2.7.10 koja nisu bila prisutna u bilo kojoj verziji korištenoj za web stranicu. Donja slika ima takvo upozorenje; odgovarajuća web stranica ne.

Kao Python knjižnica za strojno učenje, s namjerno ograničenim opsegom, Scikit-learn je vrlo dobar. Ima širok asortiman dobro uhodanih algoritama, s integriranom grafikom. Relativno ga je jednostavno instalirati, naučiti i koristiti, a ima dobre primjere i upute.

S druge strane, Scikit-learn ne obuhvaća duboko učenje niti učenje pojačavanja, što izostavlja trenutne teške, ali važne probleme, kao što su točna klasifikacija slika i pouzdano raščlanjivanje i prijevod jezika u stvarnom vremenu. Osim toga, ne uključuje grafičke modele ili predviđanje sekvenci, ne može se stvarno koristiti iz jezika koji nisu Python, a ne podržava PyPy ili GPU-ove.

Što se tiče kandže, izvedba koju Scikit-learn postiže za strojno učenje osim neuronskih mreža prilično je dobra, čak i bez ubrzanja PyPy-a ili GPU-a. Python je često živahniji nego što ljudi očekuju od prevoditelja, a upotreba Cythona za generiranje C koda za unutarnje petlje eliminira većinu uskih grla u Scikit-learn-u.

Jasno je da, ako vas zanima duboko učenje, trebali biste potražiti drugdje. Unatoč tome, postoje mnogi problemi - od gradnje funkcije predviđanja koja povezuje različita promatranja do klasificiranja promatranja do učenja strukture u neobilježenom skupu podataka - koji su prikladni za obično staro strojno učenje bez potrebe za desecima slojeva neurona, a za ta područja Scikit -učenje je vrlo dobro.

Ako ste ljubitelj Pythona, Scikit-learn može biti najbolja opcija među običnim knjižnicama strojnog učenja. Ako više volite Scalu, tada bi Spark ML mogao biti bolji izbor. A ako volite dizajnirati svoje cjevovode za učenje crtanjem dijagrama i povremenim isječkom Pythona ili R-a, tada Microsoft Cortana Analytics Suite - posebno Azure Studio za strojno učenje - može lijepo odgovarati vašim željama.

---

Cijena: Besplatni otvoreni kod. Platforma: Zahtijeva Python, NumPy, SciPy i Matplotlib. Izdanja su dostupna za MacOS, Linux i Windows.

Kartica rezultata Modeli i algoritmi (25%) Jednostavnost razvoja (25%) Dokumentacija (20%) Izvedba (20%) Jednostavnost implementacije (10%) Ukupna ocjena (100%)
Scikit-learn 0.18.1 9 9 9 8 9 8.8