Programiranje

Pregled: Scikit-learn sije za preprostejše strojno učenje

Scikits so znanstvena orodja, ki temeljijo na Pythonu, zgrajena okoli SciPy, Pythonove knjižnice za znanstveno računalništvo. Scikit-learn je odprtokodni projekt, ki se osredotoča na strojno učenje: klasifikacija, regresija, združevanje v skupine, zmanjšanje dimenzij, izbira modela in predobdelava. Gre za dokaj konzervativen projekt, ki je zaradi vzdrževalnosti in omejenih virov za razvijalce precej previden pri izogibanju lezenja obsega in preskakovanju nedokazanih algoritmov. Po drugi strani pa ima precej lep izbor trdnih algoritmov in za funkcije, ki morajo biti hitre, na primer notranje zanke, uporablja Cython (prevajalnik Python-to-C).

Med področji, ki jih ima Scikit-learn ne pokrivajo globoko učenje, okrepitev učenja, grafični modeli in napovedovanje zaporedja. Opredeljen je kot v Pythonu in za njega, zato nima API-jev za druge jezike. Scikit-learn ne podpira PyPy-ja, hitrega pravočasnega sestavljanja implementacije Pythona, ker njegovi odvisnosti NumPy in SciPy ne podpirata v celoti PyPy-ja.

Scikit-learn ne podpira pospeševanja GPU iz več razlogov, ki so povezani s kompleksnostjo in strojnimi odvisnostmi, ki bi jih uvedel. Potem pa Scikit-learn poleg nevronskih mrež nima potrebe po pospeševanju GPU.

Znanstvene značilnosti

Kot sem že omenil, ima Scikit-learn dober izbor algoritmov za klasifikacijo, regresijo, združevanje v skupine, zmanjšanje dimenzij, izbiro modelov in predobdelavo. Na področju klasifikacije, ki gre za identifikacijo kategorije, ki ji pripada objekt, in se imenuje nadzorovano učenje, izvaja podporne vektorske stroje (SVM), najbližje sosede, logistično regresijo, naključni gozd, drevesa odločanja itd., Do večstopenjsko nevronsko mrežo perceptrona (MLP).

Vendar izvajanje MLP Scikit-learn izrecno ni namenjeno velikim aplikacijam. Za obsežne izvedbe, ki temeljijo na GPU, in za poglobljeno učenje si oglejte številne povezane projekte Scikit-learn, ki vključujejo Pythonu prijazne ogrodje globokih nevronskih mrež, kot sta Keras in Theano.

Za regresijo, ki gre za napovedovanje neprekinjenega atributa, povezanega s predmetom (na primer cena delnice), ima Scikit-learn regresijo podpornih vektorjev (SVR), regresijo grebena, Lasso, Elastic Net, regresijo najmanjšega kota (LARS ), Bayesova regresija, različne vrste močne regresije itd. To je dejansko večja izbira regresijskih algoritmov, kot bi si večina analitikov morda želela, vendar obstajajo dobri primeri uporabe za vsakega, ki je bil vključen.

Za združevanje v skupine, nenadzorovano učno tehniko, pri kateri se podobni predmeti samodejno združijo v sklope, Scikit-learn vključuje k-pomeni, spektralno združevanje, premik povprečja, hierarhično združevanje v skupine, DBSCAN in nekatere druge algoritme. Spet je bila vključena lestvica konzervativnih algoritmov.

Zmanjšanje dimenzionalnosti pomeni zmanjšanje števila naključnih spremenljivk, ki jih je treba upoštevati, z uporabo tehnik razgradnje, kot sta analiza glavnih komponent (PCA) in razčlenjevanje negativne matrike (NMF) ali tehnik izbire lastnosti. Pri izbiri modela gre za primerjavo, potrjevanje in izbiro parametrov in modelov ter uporablja algoritme, kot so iskanje po mreži, navzkrižno preverjanje in metrične funkcije. Na obeh področjih Scikit-learn vključuje vse dobro preizkušene algoritme in metode v lahko dostopne API-je.

Predobdelava, ki vključuje ekstrakcijo in normalizacijo lastnosti, je eden prvih in najpomembnejših delov procesa strojnega učenja. Normalizacija pretvori funkcije v nove spremenljivke, pogosto z ničelno povprečno vrednostjo in varianco enote, včasih pa med določeno najmanjšo in največjo vrednostjo, pogosto 0 in 1. Izločanje lastnosti spremeni besedilo ali slike v številke, uporabne za strojno učenje. Tudi tu Scikit-learn postreže z vsemi okusnimi klasičnimi jedmi, ki bi jih pričakovali na tem smorgasbordu. Prosto lahko zbirate, kar vas zanima.

Upoštevajte to funkcijo pridobivanje se precej razlikuje od funkcije izbiro, omenjeno prej pri zmanjšanju dimenzionalnosti. Izbira lastnosti je način za izboljšanje učenja z odstranjevanjem nespremenljivih, kovariančnih ali drugače statistično nepomembnih lastnosti.

Skratka, Scikit-learn vključuje celoten nabor algoritmov in metod za zmanjševanje dimenzij, izbiro modelov, ekstrakcijo značilnosti in normalizacijo, čeprav za izvajanje tega nima nobenega vodnega delovnega toka, razen dobre zbirke primerov in dobre dokumentacije.

Namestitev in zagon Scikit-learn

Moja namestitev Scikit-learn je bila morda moja najlažja namestitev okvira za strojno učenje doslej. Ker sem že imel vse predpogoje nameščene in dovolj posodobljene (Python, Numpy in Scipy), je bil potreben en ukaz:

$ sudo pip install -U scikit-learn

OK, potreboval sem dva ukaza, ker sem prvič pozabil sudo.

To me je naučilo Scikit-learn 0.18.1. Za dober ukrep sem preveril tudi repozitorij GitHub, namestil okvir za testiranje nosu in zgradil razvojno različico Scikit-learn iz vira, ki je bila tako preprosta kot spreminjanje korena repozitorija in tipkanje naredite. Trajalo je nekaj časa, da je sestavil Python, ustvaril in prevedel vse datoteke C, povezal sklop in zagnal vse teste, vendar ni zahteval nobenega posredovanja.

Izvajanje mojega prvega primera Scikit-learn je bilo tudi zelo enostavno. Na strani s splošnimi primeri sem kliknil primer za načrtovanje navzkrižno preverjenih napovedi, prebral zvezek, prenesel izvorno kodo Pythona in zvezek Jupyter ter jih zagnal. Vir Pythona se je za nekaj sekund zataknil, ustvaril nekaj opozorilnih sporočil in prikazal graf. Prenosnik Jupyter je v bistvu storil enako, ko sem ga poganjal interaktivno, kot lahko vidite na spodnji sliki.

Scikit-learn zasluži najvišje ocene za enostavnost razvoja med vsemi okviri strojnega učenja, ki sem jih preizkusil, predvsem zato, ker algoritmi delujejo tako, kot so oglaševani in dokumentirani, API-ji so dosledni in dobro zasnovani ter je malo "neskladnosti impedance" med podatkovne strukture. V veselje mi je delati s knjižnico, v kateri so bile funkcije temeljito dokončane in napake temeljito odpravljene.

Učenje Scikit-učenja

Dokumentacija Scikit-learn je dobra in primerov je veliko - skupaj približno 200. Večina primerov vključuje vsaj en graf, izdelan iz analiziranih podatkov z uporabo Matplotliba. Vse to prispeva k enostavnosti knjižničnega razvoja in enostavnosti učenja.

Obstaja ena dolga vadnica "Vadnica o statističnem učenju za obdelavo znanstvenih podatkov", ki ima pet oddelkov in dodatek o iskanju pomoči. Vadnica je precej dobra, tako pri pokrivanju osnovnih konceptov kot pri prikazu primerov z uporabo dejanskih podatkov, kode in grafov. Prav tako navaja primere, povezane z besedilom - na primer primerjava štirih različnih klasifikatorjev SVM, prikazanih na spodnji sliki.

Primeri, ki sem jih obdelal, so bili na njihovih spletnih straneh dokaj jasni. V mnogih primerih, ko sem prenesel in zagnal primere, so vrgli opozorila, ki niso prikazana na spletni strani, vendar bi vedno dali enake rezultate. Dober primer je prva slika zgoraj, ki prikazuje izpis mojega zvezka Jupyter za načrtovanje navzkrižno potrjenih napovedi.

Večino opozoril pripisujem napakam v okolju Apple vecLib in razvoju v knjižnicah Python. Zdi se, da so nekatera opozorila v Pythonu 2.7.10, ki jih ni bilo v nobeni različici, uporabljeni za spletno stran. Na spodnji sliki je takšno opozorilo; ustrezna spletna stran ne.

Kot knjižnica Python za strojno učenje z namerno omejenim obsegom je Scikit-learn zelo dober. Ima širok izbor dobro uveljavljenih algoritmov z integrirano grafiko. Namestitev, učenje in uporaba je razmeroma enostaven, vsebuje pa dobre primere in vadnice.

Po drugi strani pa Scikit-learn ne zajema poglobljenega učenja ali učenja okrepitev, kar izpušča trenutne težke, a pomembne probleme, kot sta natančna klasifikacija slik in zanesljivo razčlenjevanje in prevajanje jezika v realnem času. Poleg tega ne vključuje grafičnih modelov ali predvidevanja zaporedja, v resnici ga ni mogoče uporabljati iz drugih jezikov, kot je Python, in ne podpira PyPy ali grafičnih procesorjev.

Na področju oprijemalne kremplje je zmogljivost, ki jo Scikit-learn doseže za strojno učenje, ki ni nevronska mreža, precej dobra, tudi brez pospeševanja PyPy ali grafičnih procesorjev. Python je pogosto bolj živahen, kot ljudje pričakujejo od tolmača, in uporaba Cythona za ustvarjanje kode C za notranje zanke odpravlja večino ozkih grl v Scikit-learn.

Jasno je, da če vas zanima globoko učenje, bi morali iskati drugje. Kljub temu obstaja veliko težav - od gradnje funkcije napovedovanja, ki povezuje različna opazovanja, do razvrščanja opazovanj do učenja strukture v neoznačenem naboru podatkov -, ki omogočajo navadno staro strojno učenje, ne da bi bilo treba na desetine plasti nevronov, in za ta področja Scikit -učenje je zelo dobro.

Če ste ljubitelj Pythona, je Scikit-learn morda najboljša možnost med navadnimi knjižnicami strojnega učenja. Če imate raje Scalo, potem je morda boljša izbira Spark ML. In če vam je všeč oblikovanje učnih poti z risanjem diagramov in občasnim delčkom Pythona ali R-ja, potem Microsoft Cortana Analytics Suite - še posebej Azure Machine Learning Studio - morda ustreza vašim željam.

---

Stroški: Brezplačna odprta koda.Platforma: Zahteva Python, NumPy, SciPy in Matplotlib. Izdaje so na voljo za MacOS, Linux in Windows.

PreglednicaModeli in algoritmi (25%) Enostavnost razvoja (25%) Dokumentacija (20%) Izvedba (20%) Enostavnost uvajanja (10%) Skupna ocena (100%)
Scikit-learn 0.18.199989 8.8