Programmering

Anmeldelse: Scikit-lærer skinner for enklere maskinlæring

Scikits er Python-baserede videnskabelige værktøjskasser bygget omkring SciPy, Python-biblioteket til videnskabelig computing. Scikit-learning er et open source-projekt med fokus på maskinindlæring: klassificering, regression, klyngedannelse, reduktion af dimensionalitet, modelvalg og forbehandling. Det er et temmelig konservativt projekt, der er ret forsigtigt med at undgå omfangskrypning og spring på uprøvede algoritmer af grunde til vedligeholdelse og begrænsede udviklerressourcer. På den anden side har den et ganske godt udvalg af solide algoritmer, og det bruger Cython (Python-til-C-kompilatoren) til funktioner, der skal være hurtige, såsom indre sløjfer.

Blandt de områder, Scikit-lærer gør ikke dækning er dyb læring, forstærkningslæring, grafiske modeller og sekvensforudsigelse. Det er defineret som at være i og for Python, så det har ikke API'er til andre sprog. Scikit-learning understøtter ikke PyPy, den hurtige just-in-time kompilering af Python-implementering, fordi dens afhængigheder NumPy og SciPy ikke fuldt ud understøtter PyPy.

Scikit-learning understøtter ikke GPU-acceleration af flere grunde, der har at gøre med kompleksiteten og de maskinafhængigheder, den ville indføre. Derefter, bortset fra neurale netværk, har Scikit-learning kun lidt behov for GPU-acceleration.

Scikit-lær funktioner

Som jeg nævnte, har Scikit-learning et godt udvalg af algoritmer til klassificering, regression, klyngedannelse, dimensionalitetsreduktion, modelvalg og forbehandling. I klassifikationsområdet, som handler om at identificere den kategori, som et objekt tilhører, og kaldes overvåget læring, implementerer det support vector machines (SVM), nærmeste naboer, logistisk regression, tilfældig skov, beslutningstræer og så videre, op til et neuralt netværk med flere niveauer perceptron (MLP).

Imidlertid er Scikit-lears implementering af MLP udtrykkeligt ikke beregnet til store applikationer. For storskala, GPU-baserede implementeringer og til dyb læring, se på de mange relaterede projekter fra Scikit-learning, som inkluderer Python-venlige dybe neurale netværksrammer som Keras og Theano.

Til regression, som handler om at forudsige en kontinuerlig værdiansat attribut tilknyttet et objekt (såsom en akties pris), har Scikit-learning support vector regression (SVR), ridge regression, Lasso, Elastic Net, minste vinkelregression (LARS ), Bayesisk regression, forskellige former for robust regression osv. Det er faktisk et større udvalg af regressionsalgoritmer, end de fleste analytikere måske ønsker, men der er gode brugssager for hver enkelt, der er inkluderet.

Til klyngedannelse, en ikke-overvåget læringsteknik, hvor lignende objekter automatisk grupperes i sæt, har Scikit-learning k-middel, spektral klyngedannelse, middelforskydning, hierarkisk klyngedannelse, DBSCAN og nogle andre algoritmer. Igen er farveskalaen for konservative algoritmer inkluderet.

Dimensionalitetsreduktion handler om at mindske antallet af tilfældige variabler, der skal overvejes, ved hjælp af nedbrydningsteknikker såsom hovedkomponentanalyse (PCA) og ikke-negativ matrixfaktorisering (NMF) eller funktion til valg af funktioner. Modelvalg handler om at sammenligne, validere og vælge parametre og modeller, og det bruger algoritmer som gittersøgning, krydsvalidering og metriske funktioner. For begge områder inkluderer Scikit-learning alle de velprøvede algoritmer og metoder i let tilgængelige API'er.

Forbehandling, som involverer ekstraktion af funktioner og normalisering, er en af ​​de første og vigtigste dele af maskinlæringsprocessen. Normalisering omdanner funktioner til nye variabler, ofte med nul middelværdi og enhedsvarians, men nogle gange for at ligge mellem en given minimums- og maksimumværdi, ofte 0 og 1. Funktionsudtræk forvandler tekst eller billeder til tal, der kan bruges til maskinindlæring. Her serverer Scikit-learning igen alle de velsmagende klassiske retter, du ville forvente på dette smorgasbord. Du er fri til at indsamle, hvad der appellerer til dig.

Bemærk denne funktion udvinding er ret forskellig fra funktion udvælgelse, tidligere nævnt under dimensionalitetsreduktion. Funktionsvalg er en måde at forbedre indlæring ved at fjerne ikke-variabelt, samvarianter eller på anden måde statistisk uvigtige funktioner.

Kort sagt inkluderer Scikit-learning et komplet sæt af algoritmer og metoder til reduktion af dimensionalitet, modelvalg, funktionsextraktion og normalisering, selvom det mangler enhver form for guidet arbejdsgang til at udføre disse andre end en god samling eksempler og god dokumentation.

Installation og kørsel af Scikit-learning

Min installation af Scikit-learning kan meget vel have været min nemmeste installation af machine learning-rammer nogensinde. Da jeg allerede havde alle forudsætningerne installeret og tilstrækkeligt opdaterede (Python, Numpy og Scipy), tog det en kommando:

$ sudo pip installation -U scikit-lær

OK, det tog mig to kommandoer, for første gang jeg glemte det sudo.

Det fik mig til Scikit-lær 0.18.1. For godt mål, tjekkede jeg også GitHub-arkivet, installerede næsetestningsrammen og byggede udviklingsversionen af ​​Scikit-lær fra kilden, hvilket var så simpelt som at skifte til roden til arkivet og skrive lave. Det tog et stykke tid at kompilere Python, generere og kompilere alle C-filer, linke enheden og køre alle testene, men krævede ikke nogen indgriben.

At køre mit første Scikit-lær-eksempel var også meget let. Fra siden med generelle eksempler klikkede jeg på eksemplet for at tegne krydsvaliderede forudsigelser, læste gennem notesbogen, downloadede Python-kildekoden og Jupyter-notesbogen og kørte dem. Python-kilden slumrede sammen i et par sekunder, genererede nogle advarselsmeddelelser og poppede en graf op. Jupyter-notesbogen gjorde stort set den samme ting, da jeg kørte den interaktivt, som du kan se i nedenstående figur.

Scikit-lærer tjener de højeste karakterer for at lette udviklingen blandt alle de maskinindlæringsrammer, jeg har testet, hovedsageligt fordi algoritmerne fungerer som annonceret og dokumenteret, API'erne er konsistente og veldesignede, og der er få "impedansmatchninger" mellem datastrukturer. Det er en fornøjelse at arbejde med et bibliotek, hvor funktioner er blevet grundigt uddybet og bugs grundigt skyllet ud.

Læring Scikit-lær

Scikit-læringsdokumentationen er god, og eksemplerne er mange - ca. 200 i alt. De fleste eksempler inkluderer mindst en graf produceret ud fra de analyserede data ved hjælp af Matplotlib. Disse bidrager alle til bibliotekets lette udvikling og dets lette læring.

Der er en lang tutorial, "En tutorial om statistisk læring til videnskabelig databehandling", der har fem sektioner og et tillæg om at finde hjælp. Selvstudiet er ret godt, både til at dække de grundlæggende begreber og vise eksempler ved hjælp af faktiske data, kode og grafer. Det kalder også eksempler relateret til teksten - for eksempel sammenligningen af ​​fire forskellige SVM-klassifikatorer vist i figuren nedenfor.

Eksemplerne jeg arbejdede igennem var alle ret tydelige på deres websider. I mange tilfælde, når jeg downloadede og kørte eksemplerne, kastede de advarsler, der ikke blev vist på websiden, men ville altid give de samme resultater. Den første figur ovenfor, der viser min Jupyter-notebook-output til planlægning af krydsvaliderede forudsigelser, er et godt eksempel.

Jeg tilskriver de fleste advarsler til mangler i Apple vecLib-rammen og udvikling i Python-bibliotekerne. Nogle ser ud til at være advarsler i Python 2.7.10, der ikke var til stede i den version, der blev brugt til websiden. Figuren nedenfor har en sådan advarsel; den tilsvarende webside ikke.

Som et Python-bibliotek til maskinindlæring med bevidst begrænset rækkevidde er Scikit-læring meget god. Det har et bredt udvalg af veletablerede algoritmer med integreret grafik. Det er relativt let at installere, lære og bruge, og det har gode eksempler og tutorials.

På den anden side dækker Scikit-læring ikke dyb læring eller forstærkningslæring, hvilket udelader de nuværende hårde, men vigtige problemer, såsom nøjagtig billedklassificering og pålidelig realtids sprogparsing og oversættelse. Derudover inkluderer den ikke grafiske modeller eller sekvensforudsigelse, den kan ikke rigtig bruges fra andre sprog end Python, og den understøtter ikke PyPy eller GPU'er.

På den gribende klo opnår Scikit-lærings ydeevne til anden maskinlæring end neurale netværk ret god, selv uden acceleration af PyPy eller GPU'er. Python er ofte zippier, end folk forventer af en tolk, og brugen af ​​Cython til at generere C-kode til indre sløjfer eliminerer de fleste flaskehalse i Scikit-learning.

Det er klart, at hvis du er interesseret i dyb læring, skal du kigge andre steder. Ikke desto mindre er der mange problemer - lige fra at opbygge en forudsigelsesfunktion, der forbinder forskellige observationer til at klassificere observationer til at lære strukturen i et umærket datasæt - der egner sig til almindelig gammel maskinindlæring uden at have brug for snesevis af lag neuroner, og for disse områder Scikit -lær er meget godt.

Hvis du er en Python-fan, kan Scikit-learning muligvis være den bedste mulighed blandt almindelige maskinlæringsbiblioteker. Hvis du foretrækker Scala, er Spark ML muligvis et bedre valg. Og hvis du kan lide at designe dine læringsrørledninger ved at tegne diagrammer og skrive et lejlighedsvis uddrag af Python eller R, så passer Microsoft Cortana Analytics Suite - specifikt Azure Machine Learning Studio - muligvis godt til dine præferencer.

---

Koste: Gratis open source.Platform: Kræver Python, NumPy, SciPy og Matplotlib. Udgivelser er tilgængelige til MacOS, Linux og Windows.

ScorecardModeller og algoritmer (25%) Nem udvikling (25%) Dokumentation (20%) Ydeevne (20%) Nem implementering (10%) Samlet score (100%)
Scikit-lær 0.18.199989 8.8