Deși conceptul Data Science nu este neapărat nou, provoacă încă numeroase dezbateri între cercetători și practicieni, cu privire la ceea ce este și ce nu este. O modalitate de a defini Data Science este ca un pas evolutiv în domenii interdisciplinare, cum ar fi analiza de afaceri care încorporează știința calculatoarelor, modelarea datelor, statistică, analiza datelor și matematică. Două cărți foarte bune care vă vor ajuta să începeți călătoria în Data Science sunt Developing Analytic Talent: Becoming a Data Scientist, de Vincent Granville, și The Field Guide to Data Science, lansat de către firma Booz Allen Hamilton.
În cazul în care nu știați acest lucru, Data Scientist a fost numit ,,cel mai sexy loc de muncă al secolului 21". Acest rol a devenit unic în industrie, guvern, precum și în alte organizații care dezvoltă procese bazate pe date. Mai mult decât orice, scopul unui Data Scientist este acela de a face descoperiri cu valoare pentru business, în timp ce analizează datele din toate perspectivele. De asemenea, aceste persoane sunt de obicei generaliste în analiza de business, statistici și informatică, cu expertiză în domenii precum robustețe, complexitatea algoritmilor, și tehnici de vizualizare a datelor. Acest lucru este reprezentat foarte des în articolele de specialitate prin diagrama Venn pentru Data Science din figura 1 de mai jos.
Figura 1. Diagrama Venn pentru Data Science
În cele ce urmează, vom expune îmbunătățirile aduse de Apache Spark domeniului Data Science, în ceea ce priveste scalabilitatea și ușurința în utlizare. Asa cum probabil ați mai citit în edițiile anterioare ale revistei TSM, Spark este un framework foarte performant de prelucrare a datelor pe scară largă, care a fost dezvoltat la U.C. Berkeley de doi români: Matei Zaharia și Ionel Stoica.
În prezent, este cel mai activ proiect Apache, cuprinzând mai multe librării, așa cum se poate observa în figura 2 de mai jos. Cea mai recentă versiune stabilă până în prezent este Spark 1.6.1. Recent, unul dintre proiectele incipiente de top, numit Spark ML Pipeline, a fost lansat ca o extindere a activității anterioare începute pe Spark MLlib. Acest nou pachet Spark ML își propune să ofere un set uniform de API-uri pentru algoritmi de machine learning. Este construit pentru a permite utilizatorilor să creeze și să îmbunătățească algoritmi existenti de machine learning. Cea mai recentă versiune stabilă Apache Spark acoperă algoritmi precum: Clasificare, Regresie, Recomandare, Clusterizare, Reducerea Dimensionalității, Extracție și Selecție de caracteristici, Import / Export modele, Fluxuri (Pipelines), și Metrici de evaluare.
Figura 2. Librăriile Spark
Spark ML folosește DataFrame din cadrul librăriei Spark SQL ca un set de date ML, care este practic o colecție distribuită de date organizate în coloane. Conceptual, este echivalent cu un tabel într-o bază de date relațională sau un Data Frame în R sau Python, dar cu optimizări mai bogate. Această structură poate fi construită dintr-o varietate de surse de date: fișiere, tabele Hive, baze de date externe, sau RDD-uri existente. De exemplu, un DataFrame într-un ML Pipeline poate avea coloane diferite pentru a stoca text, vectori de caracteristici, label-uri și predicții.
Un Transformer reprezintă o abstracție care include funcții de transformare pentru feature-uri și modele învățate. Programatic vorbind, implementează metoda transform(), care transformă un DataFrame în altul, prin adăugarea mai multor coloane, numite în mod obișnuit caracteristici sau features. De exemplu, un model ML ar putea să ia un DataFrame care conține caracteristici, să obțină predicțiile și să creeze implicit un nou DataFrame cu predicțiile atașate ca o nouă coloană.
Un Estimator reprezintă o abstracție a unui algoritm de învățare automată (ML), care poate fi antrenat pe date de intrare. Din punct de vedere tehnic, un Estimator implementează metoda fit(), care acceptă un DataFrame și produce un model ML, care este, de asemenea, un Transformer. De exemplu, un algoritm ML, cum este un Estimator, și prin apelul metodei fit(), antrenează un model de regresie liniară, care este un Model și, prin urmare, un Transformer.
Un Pipeline este specificat ca o succesiune de etape, iar fiecare dintre ele este un Transformer sau un Estimator. Aceste etape respectă ordinul de execuție, și prin urmare, DataFrame-ul de intrare este transformat pe măsură ce trece prin fiecare etapă. Un exemplu de proces de învățare automată poate fi o simplă procesare de text, care cuprinde mai multe etape:
• Împărțirea textului în cuvinte și simboluri.
• Conversia cuvintelor într-un vector de caracteristici numeric.
• Învățarea unui model de predicție ML folosind vectorii cu caracteristici și etichete.
Acest Pipeline ML cu trei etape este ilustrat în figura 3 de mai jos. Componentele Tokenizer și HashingTF sunt de tip Transformer, în timp ce LogisticRegression este de tip Estimator.
Cu toate acestea, în acest exemplu, un Pipeline este de tip Estimator. Astfel, metoda fit() unui Pipeline produce un PipelineModel, care este de tip Transformer. Acest PipelineModel poate fi folosit în continuare în timpul testarii modelului ML, după cum se poate observa în figura 4 de mai jos.
De obicei, ML Pipelines sunt complexe și implică mai multe etape interdependente, ilustrate în figura 5 de mai jos:
1. Data ingestion. RDD-uri Spark sau DataFrames pot fi folosite pentru a stoca date de intrare.
2. Feature extraction. Prin exploatarea Spark ML Pipelines, un Transformer poate fi folosit pentru a converti un DataFrame în alt DataFrame care conține caracteristicile necesare.
Figura 5. Complexitatea unui algoritm ML
3. Model training. De exemplu, un Estimator poate fi antrenat pe un DataFrame cu caracteristici, și poate produce unul sau mai multe modele ML.
4. Model evaluation. Predictii bazate pe modele ML pot fi realizate în Spark ML Pipelines folosind componente de tip Transformer.
Privind în perspectivă, dezvoltarea viitoare a Spark MLlib va include un API pentru SparkR, îmbunătățirea algoritmilor de inspecție a modelelor ML, precum și optimizări Pipeline. Până ce o nouă versiune stabilă este pusă la dispoziție, echipa Apache Spark a postat o versiune inițială Spark 2.0, menită să ofere mai devreme acces comunității pentru a încerca noua versiune a codului. Această versiune include o îmbunătățire foarte bună numită Machine Learning Model Persistence, care este o abilitate de a salva și încărca modelele ML din orice limbaj de programare suportat de Spark. Mai mult decât atât, API-ul Pipeline ML bazat pe DataFrame va deveni API-ul principal, cu mai mult suport pentru algoritmi ML populari, cum ar fi Generalized Linear Models (GLM), Naive Bayes, Survival Regression și K-Means.