Programavimas

Apžvalga: „Scikit-learn“ šviečia, kad būtų paprasčiau mokytis mašinoje

„Scikits“ yra „Python“ pagrindu sukurtos mokslinės įrankių dėžutės, sukurtos aplink „SciPy“, „Python“ biblioteką, skirtą moksliniam skaičiavimui. „Scikit-learn“ yra atviro kodo projektas, orientuotas į mašininį mokymąsi: klasifikavimą, regresiją, grupavimą, matmenų mažinimą, modelio pasirinkimą ir išankstinį apdorojimą. Tai gana konservatyvus projektas, kuris yra gana atsargus, kad išvengtų taikymo srities šliaužimo ir pereitų prie neįrodytų algoritmų, dėl palaikomumo ir ribotų kūrėjo išteklių. Kita vertus, jis turi gana gražų patikimų algoritmų pasirinkimą ir naudoja „Cython“ („Python-to-C“ kompiliatorius) funkcijoms, kurios turi būti greitos, pvz., Vidinėms kilpoms.

Tarp sričių, kurias daro „Scikit-learn“ ne apima gilųjį mokymąsi, mokymąsi sustiprinti, grafinius modelius ir sekos numatymą. Jis apibrėžiamas kaip „Python“ ir skirtas „Python“, todėl neturi API kitoms kalboms. „Scikit-learn“ nepalaiko „PyPy“ - greito ir tinkamo „Python“ diegimo laiku, nes jo priklausomybės „NumPy“ ir „SciPy“ nevisiškai palaiko „PyPy“.

„Scikit-learn“ nepalaiko GPU spartinimo dėl daugelio priežasčių, susijusių su sudėtingumu ir priklausomybė nuo mašinos. Vėliau, be nervinių tinklų, „Scikit-learn“ mažai reikia GPU pagreičio.

„Scikit-learn“ funkcijos

Kaip jau minėjau, „Scikit-learn“ turi gerą algoritmų pasirinkimą klasifikavimui, regresijai, grupavimui, matmenų mažinimui, modelio pasirinkimui ir išankstiniam apdorojimui. Klasifikavimo srityje, kuri yra susijusi su kategorijos, kuriai priklauso objektas, identifikavimu ir vadinama prižiūrimu mokymu, ji įdiegia atraminių vektorių mašinas (SVM), artimiausius kaimynus, logistinę regresiją, atsitiktinį mišką, sprendimų medžius ir pan. daugiapakopio perceptrono (MLP) neuroninis tinklas.

Tačiau „Scikit-learn“ MLP įgyvendinimas aiškiai nėra skirtas didelio masto programoms. Norėdami atlikti didelio masto GPU pagrįstus diegimus ir giliai mokytis, atkreipkite dėmesį į daugelį susijusių „Scikit-learn“ projektų, kurie apima „Python“ pritaikytas giliųjų neuronų tinklo sistemas, tokias kaip „Keras“ ir „Theano“.

Regresijai, kuri yra apie nenutrūkstamo vertinamo atributo, susijusio su objektu, prognozavimą (pvz., Atsargų kainą), „Scikit-learn“ turi palaikomojo vektoriaus regresiją (SVR), kraigo regresiją, „Lasso“, „Elastic Net“, mažiausios kampo regresiją (LARS). ), Bajeso regresija, įvairių rūšių tvirta regresija ir pan. Iš tikrųjų tai yra didesnis regresijos algoritmų pasirinkimas, nei to norėtų dauguma analitikų, tačiau kiekvienam iš jų yra gerų naudojimo atvejų.

Klasteriams - neprižiūrimam mokymosi metodui, pagal kurį panašūs objektai automatiškai grupuojami į rinkinius, „Scikit-learn“ yra k-priemonės, spektrinis grupavimas, vidurkio poslinkis, hierarchinis grupavimas, DBSCAN ir kai kurie kiti algoritmai. Vėlgi, konservatyvių algoritmų gama buvo įtraukta.

Matmenų mažinimas reiškia atsitiktinių kintamųjų, į kuriuos reikia atsižvelgti, skaičiaus mažinimą, naudojant skaidymo metodus, tokius kaip pagrindinio komponento analizė (PCA) ir ne neigiamos matricos faktorizacija (NMF), arba funkcijų parinkimo metodai. Modelio pasirinkimas yra susijęs su parametrų ir modelių palyginimu, patvirtinimu ir pasirinkimu, taip pat naudojami tokie algoritmai kaip tinklelio paieška, kryžminis patvirtinimas ir metrinės funkcijos. Abiejose srityse „Scikit-learn“ apima visus gerai patikrintus algoritmus ir metodus lengvai pasiekiamose API.

Išankstinis apdorojimas, apimantis funkcijų išskyrimą ir normalizavimą, yra viena pirmųjų ir svarbiausių mašininio mokymosi proceso dalių. Normalizavus ypatybes paverčia naujais kintamaisiais, kurių vidutinis ir vienetinis dispersija dažnai būna lygi nuliui, tačiau kartais jie būna tarp nurodytos mažiausios ir didžiausios vertės, dažnai 0 ir 1. Funkcijos išskyrimas paverčia tekstą ar vaizdus skaičiais, tinkamais naudoti mašininiam mokymuisi. Vėlgi, „Scikit-learn“ patiekiami visi skanūs klasikiniai patiekalai, kurių galima tikėtis šiame smorgasborde. Galite laisvai rinkti bet kurį jums patrauklų.

Atkreipkite dėmesį į šią funkciją gavyba yra visiškai kitoks nei bruožas pasirinkimas, minėtą anksčiau skiltyje „Matmenų mažinimas“. Funkcijų pasirinkimas yra būdas pagerinti mokymąsi pašalinant nekintančias, kovariančias ar kitaip statistiškai nesvarbias savybes.

Trumpai tariant, „Scikit-learn“ apima visą matmenų mažinimo, modelio pasirinkimo, funkcijų išskyrimo ir normalizavimo algoritmų ir metodų rinkinį, nors šiems tikslams atlikti nėra jokio vadovaujamo darbo srauto, išskyrus gerą pavyzdžių rinkinį ir gerą dokumentaciją.

„Scikit-learn“ diegimas ir vykdymas

Mano įdiegtas „Scikit-learn“ gali būti mano lengviausias mašininio mokymosi pagrindo diegimas. Kadangi jau buvau įdiegęs visas reikalingas sąlygas ir pakankamai atnaujintas („Python“, „Numpy“ ir „Scipy“), reikėjo vienos komandos:

$ sudo pip install -U scikit-learn

Gerai, man prireikė dviejų komandų, nes pirmą kartą pamiršau sudo.

Tai privertė mane „Scikit-learn 0.18.1“. Norėdamas tinkamai įvertinti, aš taip pat patikrinau „GitHub“ saugyklą, įdiegiau „nosies“ testavimo sistemą ir sukūriau „Scikit-learn“ iš šaltinio kūrimo versiją, kuri buvo tokia paprasta, kaip pakeisti saugyklos šaknį ir įvesti tekstą padaryti. Užtruko, kol buvo sukomponuotas „Python“, sugeneruoti ir sukompiliuoti visi C failai, susieti surinkimą ir paleisti visus testus, tačiau nereikėjo jokio įsikišimo.

Taip pat buvo labai lengva paleisti savo pirmąjį „Scikit-learn“ pavyzdį. Iš bendrųjų pavyzdžių puslapio spustelėjau kryžminių patvirtintų prognozių braižymo pavyzdį, perskaičiau bloknotą, parsisiunčiau „Python“ šaltinio kodą ir „Jupyter“ bloknotą ir juos paleidžiau. „Python“ šaltinis kelias sekundes glaudėsi, sugeneravo keletą įspėjamųjų pranešimų ir iššoko grafiką. Iš esmės tą patį padarė „Jupyter“ užrašų knygelė, kai ją paleidau interaktyviai, kaip matote paveikslėlyje žemiau.

„Scikit-learn“ pelnė aukščiausius įvertinimus dėl lengvumo tobulinti iš visų mano išbandytų mašininio mokymosi sistemų, daugiausia todėl, kad algoritmai veikia taip, kaip reklamuojami ir dokumentuojami, API yra nuoseklios ir gerai sukurtos, o tarp „impedansų neatitikimų“ yra nedaug. duomenų struktūros. Malonu dirbti su biblioteka, kurioje funkcijos buvo kruopščiai papildytos, o klaidos - kruopščiai pašalintos.

Mokytis Scikit-mokytis

„Scikit-learn“ dokumentacija yra gera, o pavyzdžių yra daug - iš viso apie 200. Daugelyje pavyzdžių yra bent vienas grafikas, gautas iš analizuotų duomenų naudojant „Matplotlib“. Visa tai prisideda prie bibliotekos tobulėjimo ir jos mokymosi paprastumo.

Yra viena ilga pamoka „Statistinio mokymosi pamoka mokslo duomenims apdoroti“, kurioje yra penki skyriai ir priedas apie pagalbos paiešką. Pamoka yra gana gera, ji apima pagrindines sąvokas ir pateikia pavyzdžius, naudodama faktinius duomenis, kodą ir grafikus. Taip pat pateikiami pavyzdžiai, susiję su tekstu, pavyzdžiui, keturių skirtingų SVM klasifikatorių palyginimas, parodytas toliau pateiktame paveikslėlyje.

Visi pavyzdžiai, kuriuos dirbau, jų tinklalapiuose buvo gana aiškūs. Daugeliu atvejų, kai atsisiųsdavau ir vykdydavau pavyzdžius, jie išmesdavo įspėjimus, kurie nerodomi tinklalapyje, bet visada duodavo tuos pačius rezultatus. Pirmasis aukščiau pateiktas paveikslėlis, rodantis mano „Jupyter“ nešiojamojo kompiuterio išvestį kryžminėms patvirtintoms prognozėms braižyti, yra geras pavyzdys.

Daugumą įspėjimų priskiriu „Apple vecLib“ sistemos defektams ir „Python“ bibliotekų evoliucijai. Atrodo, kad kai kurie iš jų yra „Python 2.7.10“ įspėjimai, kurių nebuvo jokioje tinklalapio versijoje. Žemiau esančiame paveikslėlyje yra toks įspėjimas; atitinkamas tinklalapis to nedaro.

Kaip „Python“ biblioteka mašininiam mokymuisi, turinti sąmoningai ribotą taikymo sritį, „Scikit-learn“ yra labai gera. Jis turi platų gerai žinomų algoritmų asortimentą su integruota grafika. Tai palyginti lengva įdiegti, išmokti ir naudoti, joje yra gerų pavyzdžių ir pamokymų.

Kita vertus, „Scikit-learn“ neapima gilaus mokymosi ar mokymosi sustiprinimo, o tai palieka dabartines sunkias, bet svarbias problemas, tokias kaip tikslus vaizdų klasifikavimas ir patikimas realaus laiko kalbų analizavimas ir vertimas. Be to, jame nėra grafinių modelių ar sekos numatymo, jo negalima naudoti iš kitų kalbų, išskyrus „Python“, ir jis nepalaiko „PyPy“ ar GPU.

Griebiantis nagas, našumas, kurį „Scikit-learn“ pasiekia mašininiam mokymuisi, išskyrus neuroninius tinklus, yra gana geras, net ir be PyPy ar GPU pagreičio. „Python“ dažnai yra zippier, nei žmonės tikisi iš vertėjo, o naudojant „Cython“ C kodui generuoti vidinėms kilpoms pašalinama dauguma „Scikit-learn“ trūkumų.

Aišku, jei jus domina gilus mokymasis, turėtumėte ieškoti kitur. Nepaisant to, yra daug problemų - pradedant prognozavimo funkcijos, susiejančios skirtingus stebėjimus, sukūrimu, stebėjimų klasifikavimu ir struktūros mokymusi nepažymėtame duomenų rinkinyje, kurios yra paprastos senojo mašininio mokymosi nereikalaujant dešimčių neuronų sluoksnių, ir toms sritims -mokti yra labai gerai.

Jei esate „Python“ gerbėjas, „Scikit-learn“ gali būti geriausias pasirinkimas tarp paprastų mašininio mokymosi bibliotekų. Jei jums labiau patinka „Scala“, „Spark ML“ gali būti geresnis pasirinkimas. Ir jei jums patinka kurti savo mokymosi linijas, piešiant diagramas ir rašant retkarčiais „Python“ arba „R“ fragmentą, tada „Microsoft Cortana Analytics Suite“ - ypač „Azure Machine Learning Studio“, gali gerai atitikti jūsų nuostatas.

---

Kaina: Nemokamas atvirasis šaltinis.Platforma: Reikalingi „Python“, „NumPy“, „SciPy“ ir „Matplotlib“. Leidimai galimi „MacOS“, „Linux“ ir „Windows“.

Rezultatų kortelėModeliai ir algoritmai (25%) Plėtros paprastumas (25%) Dokumentacija (20%) Spektaklis (20%) Diegimo paprastumas (10%) Bendras rezultatas (100%)
„Scikit-learn“ 0.18.199989 8.8