Programmering

Gjennomgang: Scikit-learning skinner for enklere maskinlæring

Scikits er Python-baserte vitenskapelige verktøykasser bygget rundt SciPy, Python-biblioteket for vitenskapelig databehandling. Scikit-learning er et open source-prosjekt med fokus på maskinlæring: klassifisering, regresjon, klynging, dimensjonsreduksjon, modellvalg og forbehandling. Det er et ganske konservativt prosjekt som er ganske forsiktig med å unngå kryp av omfang og hoppe på uprøvde algoritmer, av grunner til vedlikehold og begrensede utviklerressurser. På den annen side har den et ganske fint utvalg av solide algoritmer, og den bruker Cython (Python-til-C-kompilatoren) for funksjoner som trenger å være raske, for eksempel indre sløyfer.

Blant områdene Scikit-lærer gjør ikke cover er dyp læring, forsterkningslæring, grafiske modeller og sekvensforutsigelse. Det er definert som å være i og for Python, så det har ikke API-er for andre språk. Scikit-learning støtter ikke PyPy, den raske just-in-time kompilering av Python-implementering fordi dens avhengigheter NumPy og SciPy ikke fullt ut støtter PyPy.

Scikit-learning støtter ikke GPU-akselerasjon av flere grunner som har å gjøre med kompleksiteten og maskinavhengighetene det ville innføre. Så igjen, bortsett fra nevrale nettverk, har Scikit-learning lite behov for GPU-akselerasjon.

Scikit-lær funksjoner

Som jeg nevnte, har Scikit-learning et godt utvalg av algoritmer for klassifisering, regresjon, klynging, dimensjonsreduksjon, modellvalg og forbehandling. I klassifiseringsområdet, som handler om å identifisere kategorien som et objekt tilhører, og som kalles overvåket læring, implementerer det support vector machines (SVM), nærmeste naboer, logistisk regresjon, tilfeldig skog, beslutningstrær og så videre, opp til et nevralt nettverk med flere nivåer perceptron (MLP).

Imidlertid er Scikit-lears implementering av MLP uttrykkelig ikke ment for store applikasjoner. For store, GPU-baserte implementeringer og for dyp læring, se på de mange relaterte prosjektene til Scikit-learning, som inkluderer Python-vennlige dype nevrale nettverksrammer som Keras og Theano.

For regresjon, som handler om å forutsi et kontinuerlig verdsatt attributt assosiert med et objekt (for eksempel prisen på en aksje), har Scikit-learning support vector regression (SVR), ryggregresjon, Lasso, Elastic Net, minste vinkelregresjon (LARS ), Bayesisk regresjon, ulike typer robust regresjon, og så videre. Det er faktisk et større utvalg av regresjonsalgoritmer enn de fleste analytikere måtte ønske seg, men det er gode brukssaker for hver enkelt som er inkludert.

For klynging, en ikke-overvåket læringsteknikk der lignende objekter automatisk grupperes i sett, har Scikit-lær k-betyr, spektral klynging, middel-skift, hierarkisk klynging, DBSCAN og noen andre algoritmer. Igjen er fargekonsollen til konservative algoritmer inkludert.

Dimensjonsreduksjon handler om å redusere antall tilfeldige variabler som skal tas i betraktning, ved å bruke spaltningsteknikker som hovedkomponentanalyse (PCA) og ikke-negativ matriksfaktorisering (NMF), eller funksjonsvalgsteknikker. Modellvalg handler om å sammenligne, validere og velge parametere og modeller, og det bruker algoritmer som rutenett, kryssvalidering og metriske funksjoner. For begge områdene inkluderer Scikit-learning alle de velprøvde algoritmene og metodene, i lett tilgjengelige API-er.

Forbehandling, som innebærer ekstraksjon av funksjoner og normalisering, er en av de første og viktigste delene av maskinlæringsprosessen. Normalisering forvandler funksjoner til nye variabler, ofte med null middel- og enhetsvarians, men noen ganger for å ligge mellom et gitt minimum og maksimum, ofte 0 og 1. Funksjonstraksjon gjør tekst eller bilder til tall som kan brukes for maskinlæring. Også her serverer Scikit-learning alle de smakfulle klassiske rettene du forventer på dette smorgasbordet. Du står fritt til å samle inn de som appellerer til deg.

Legg merke til den funksjonen utdrag er ganske forskjellig fra funksjonen utvalg, nevnt tidligere under dimensjonsreduksjon. Valg av funksjoner er en måte å forbedre læring ved å fjerne funksjoner som ikke varierer, er medvarlige eller på annen måte statistisk uviktige.

Kort fortalt inkluderer Scikit-learning et komplett sett med algoritmer og metoder for dimensjonsreduksjon, modellvalg, funksjonsutvinning og normalisering, selv om det mangler noen form for guidet arbeidsflyt for å oppnå disse annet enn en god samling eksempler og god dokumentasjon.

Installere og kjøre Scikit-learn

Installasjonen min av Scikit-learning kan godt ha vært min enkleste installasjon av maskinlæringsrammeverk noensinne. Siden jeg allerede hadde alle forutsetningene installert og tilstrekkelig oppdatert (Python, Numpy og Scipy), tok det en kommando:

$ sudo pip install -U scikit-lær

OK, det tok meg to kommandoer, for første gang jeg glemte det sudo.

Det fikk meg Scikit-lær 0.18.1. For godt mål sjekket jeg også ut GitHub-depotet, installerte rammene for nesetesting og bygde utviklingsversjonen av Scikit-learning fra kilden, som var så enkelt som å endre til roten til depotet og skrive gjøre. Det tok en stund å kompilere Python, generere og kompilere alle C-filene, koble sammen forsamlingen og kjøre alle testene, men krever ingen inngripen.

Å kjøre mitt første Scikit-lær-eksempel var også veldig enkelt. Fra siden med generelle eksempler, klikket jeg på eksemplet for å tegne kryssvaliderte spådommer, leste gjennom notatboken, lastet ned Python-kildekoden og Jupyter-notatboken og kjørte dem. Python-kilden kom sammen i noen sekunder, genererte noen advarsler og poppet opp en graf. Jupyter-notatboken gjorde egentlig det samme da jeg kjørte den interaktivt, som du kan se i figuren nedenfor.

Scikit-learning tjener de høyeste karakterene for enkel utvikling blant alle maskinlæringsrammene jeg har testet, hovedsakelig fordi algoritmene fungerer som annonsert og dokumentert, API-ene er konsistente og godt utformede, og det er få "impedansmatcher" mellom datastrukturer. Det er en glede å jobbe med et bibliotek der funksjonene er grundig utdypet og insekter er grundig spylt ut.

Læring Scikit-lær

Scikit-lær dokumentasjonen er god, og eksemplene er mange - omtrent 200 totalt. De fleste eksempler inkluderer minst en graf produsert fra de analyserte dataene ved hjelp av Matplotlib. Disse bidrar alle til bibliotekets enkle utvikling og lette læring.

Det er en lang veiledning, "En opplæring om statistisk læring for vitenskapelig databehandling", som har fem seksjoner og et vedlegg om hvordan du finner hjelp. Opplæringen er ganske bra, både til å dekke de grunnleggende konseptene og vise eksempler ved hjelp av faktiske data, kode og grafer. Det kaller også ut eksempler relatert til teksten - for eksempel sammenligning av fire forskjellige SVM-klassifiserere vist i figuren nedenfor.

Eksemplene jeg jobbet gjennom var alle ganske tydelige på websidene deres. I mange tilfeller, når jeg lastet ned og kjørte eksemplene, kastet de advarsler som ikke vises på websiden, men vil alltid gi de samme resultatene. Den første figuren ovenfor, som viser min Jupyter-notatbokutgang for å tegne kryssvaliderte spådommer, er et godt eksempel.

Jeg tilskriver de fleste advarslene til mangler i Apple vecLib-rammeverket og evolusjon i Python-bibliotekene. Noen ser ut til å være advarsler i Python 2.7.10 som ikke var til stede i hvilken versjon som ble brukt til websiden. Figuren nedenfor har en slik advarsel; tilsvarende nettside ikke.

Som et Python-bibliotek for maskinlæring, med bevisst begrenset omfang, er Scikit-learning veldig bra. Den har et bredt utvalg av veletablerte algoritmer, med integrert grafikk. Det er relativt enkelt å installere, lære og bruke, og det har gode eksempler og veiledninger.

På den annen side dekker ikke Scikit-læring dyp læring eller forsterkningslæring, noe som utelater de nåværende harde, men viktige problemene, for eksempel nøyaktig bildeklassifisering og pålitelig sanntidssamarbeid og oversettelse. I tillegg inkluderer den ikke grafiske modeller eller sekvensforutsigelse, den kan egentlig ikke brukes fra andre språk enn Python, og den støtter ikke PyPy eller GPUer.

På den gripende kloen oppnår ytelsen Scikit-learning for maskinlæring annet enn nevrale nettverk, ganske bra, selv uten akselerasjon av PyPy eller GPUer. Python er ofte zippier enn folk forventer fra en tolk, og bruken av Cython for å generere C-kode for indre sløyfer eliminerer de fleste flaskehalsene i Scikit-learning.

Det er tydelig at hvis du er interessert i dyp læring, bør du se andre steder. Likevel er det mange problemer - fra å bygge en prediksjonsfunksjon som knytter forskjellige observasjoner til å klassifisere observasjoner til å lære strukturen i et umerket datasett - som egner seg til vanlig gammel maskinlæring uten å ha behov for dusinvis av lag med nevroner, og for disse områdene Scikit -lær er veldig bra.

Hvis du er en Python-fan, kan Scikit-learning godt være det beste alternativet blant de vanlige maskinlæringsbibliotekene. Hvis du foretrekker Scala, kan Spark ML være et bedre valg. Og hvis du liker å designe læringsrørledningene dine ved å tegne diagrammer og skrive et sporadisk utdrag av Python eller R, kan det hende at Microsoft Cortana Analytics Suite - spesielt Azure Machine Learning Studio - passer dine preferanser pent.

---

Koste: Gratis åpen kildekode.Plattform: Krever Python, NumPy, SciPy og Matplotlib. Utgivelser er tilgjengelige for MacOS, Linux og Windows.

PoengkortModeller og algoritmer (25%) Enkel utvikling (25%) Dokumentasjon (20%) Opptreden (20%) Enkel distribusjon (10%) Total poengsum (100%)
Scikit-lær 0.18.199989 8.8
$config[zx-auto] not found$config[zx-overlay] not found