Spark MLlib - Libreria di machine learning di Apache Spark



Questo blog Spark MLlib ti introdurrà alla libreria di Machine Learning di Apache Spark. Include un progetto del sistema di raccomandazione dei film che utilizza Spark MLlib.

Spark MLlib è il componente di Machine Learning di Apache Spark.Una delle principali attrazioni di Spark è la capacità di scalare in modo massiccio il calcolo, ed è esattamente ciò di cui hai bisogno per gli algoritmi di apprendimento automatico. Ma il limite è che tutti gli algoritmi di apprendimento automatico non possono essere parallelizzati efficacemente. Ogni algoritmo ha le proprie sfide per la parallelizzazione, che si tratti di parallelismo dei compiti o parallelismo dei dati.

Detto questo, Spark sta diventando la piattaforma di fatto per la creazione di algoritmi e applicazioni di machine learning.Bene, puoi controllare il file curato da esperti del settore prima di procedere con il blog.Gli sviluppatori che lavorano su Spark MLlib stanno implementando sempre più algoritmi di macchina in modo scalabile e conciso nel framework Spark. Attraverso questo blog, impareremo i concetti di Machine Learning, Spark MLlib, le sue utilità, gli algoritmi e un caso d'uso completo di Movie Recommendation System.





I seguenti argomenti verranno trattati in questo blog:

  1. Cos'è l'apprendimento automatico?
  2. Panoramica di Spark MLlib
  3. Spark MLlib Tools
  4. Algoritmi MLlib
  5. Caso d'uso - Sistema di raccomandazione per i film

Cos'è l'apprendimento automatico?

Evoluto dallo studio del riconoscimento di modelli e della teoria dell'apprendimento computazionale nell'intelligenza artificiale, l'apprendimento automatico esplora lo studio e la costruzione di algoritmi in grado di apprendere e fare previsioni sui dati - tali algoritmi superano seguendo istruzioni di programma strettamente statiche facendo previsioni o decisioni basate sui dati , attraverso la creazione di un modello da input di esempio.



Apprendimento automatico - Spark MLlib - Edureka Figura: Strumenti di machine learning

L'apprendimento automatico è strettamente correlato alla statistica computazionale, che si concentra anche sulla previsione attraverso l'uso dei computer. Ha forti legami con l'ottimizzazione matematica, che fornisce metodi, teoria e domini applicativi sul campo. Nel campo dell'analisi dei dati, l'apprendimento automatico è un metodo utilizzato per ideare modelli e algoritmi complessi che si prestano a una previsione che nell'uso commerciale è nota come analisi predittiva.

Esistono tre categorie di attività di apprendimento automatico:



  1. Apprendimento supervisionato : L'apprendimento supervisionato è dove si hanno variabili di input (x) e una variabile di output (Y) e si utilizza un algoritmo per apprendere la funzione di mappatura dall'input all'output.
  2. Apprendimento senza supervisione : L'apprendimento non supervisionato è un tipo di algoritmo di apprendimento automatico utilizzato per trarre inferenze da set di dati costituiti da dati di input senza risposte etichettate.
  3. Insegnamento rafforzativo : Un programma per computer interagisce con un ambiente dinamico in cui deve raggiungere un determinato obiettivo (come guidare un veicolo o giocare contro un avversario). Il programma riceve feedback in termini di ricompense e punizioni man mano che naviga nel suo spazio problematico.Questo concetto è chiamato apprendimento per rinforzo.

Panoramica di Spark MLlib

Spark MLlib viene utilizzato per eseguire l'apprendimento automatico in Apache Spark. MLlib è costituito da algoritmi e utilità popolari.

Panoramica di MLlib:

  • spark.mllib contiene l'API originale costruita sopra gli RDD. Attualmente è in modalità di manutenzione.
  • spark.ml fornisce API di livello superiore basate su DataFrames percostruzione di pipeline ML. spark.ml è l'API di Machine Learning principale per Spark al momento.

Spark MLlib Tools

Spark MLlib fornisce i seguenti strumenti:

  • Algoritmi ML: Gli algoritmi ML costituiscono il nucleo di MLlib. Questi includono algoritmi di apprendimento comuni come classificazione, regressione, clustering e filtraggio collaborativo.
  • Funzionalità: La funzionalità include l'estrazione, la trasformazione, la riduzione della dimensionalità e la selezione delle caratteristiche.
  • Condutture: Le pipeline forniscono strumenti per costruire, valutare e ottimizzare le pipeline ML.
  • Persistenza: La persistenza aiuta a salvare e caricare algoritmi, modelli e pipeline.
  • Utilità: Utilitàper algebra lineare, statistica e trattamento dei dati.

Algoritmi MLlib

Gli algoritmi e le utilità popolari in Spark MLlib sono:

  1. Statistiche di base
  2. Regressione
  3. Classificazione
  4. Sistema di raccomandazione
  5. Clustering
  6. Riduzione della dimensionalità
  7. Estrazione delle caratteristiche
  8. Ottimizzazione

Vediamo alcuni di questi in dettaglio.

Statistiche di base

Statistiche di base include le più basilari tecniche di apprendimento automatico. Questi includono:

architettura mvc in java con esempio
  1. Statistiche riassuntive : Gli esempi includono media, varianza, conteggio, max, min e numNonZeros.
  2. Correlazioni : Spearman e Pearson sono alcuni modi per trovare la correlazione.
  3. Campionamento stratificato : Questi includono sampleBykey e sampleByKeyExact.
  4. Verifica di ipotesi : Il test chi quadrato di Pearson è un esempio di verifica delle ipotesi.
  5. Generazione di dati casuali : RandomRDD, Normal e Poisson vengono utilizzati per generare dati casuali.

Regressione

Regressione l'analisi è un processo statistico per stimare le relazioni tra le variabili. Include molte tecniche per modellare e analizzare diverse variabili quando il focus è sulla relazione tra una variabile dipendente e una o più variabili indipendenti. Più specificamente, l'analisi di regressione aiuta a capire come cambia il valore tipico della variabile dipendente quando una qualsiasi delle variabili indipendenti viene variata, mentre le altre variabili indipendenti vengono mantenute fisse.

L'analisi di regressione è ampiamente utilizzata per la previsione e la previsione, dove il suo utilizzo ha una sostanziale sovrapposizione con il campo dell'apprendimento automatico. L'analisi di regressione viene utilizzata anche per capire quali tra le variabili indipendenti sono correlate alla variabile dipendente e per esplorare le forme di queste relazioni. In circostanze limitate, l'analisi di regressione può essere utilizzata per inferire relazioni causali tra le variabili indipendenti e dipendenti.

Classificazione

Classificazione è il problema di identificare a quale di un insieme di categorie (sottopopolazioni) appartiene una nuova osservazione, sulla base di un training set di dati contenente osservazioni (o istanze) di cui si conosce l'appartenenza alla categoria. È un esempio di riconoscimento di pattern.

Qui, un esempio potrebbe essere l'assegnazione di una determinata e-mail in classi 'spam' o 'non spam' o l'assegnazione di una diagnosi a un dato paziente come descritto dalle caratteristiche osservate del paziente (sesso, pressione sanguigna, presenza o assenza di determinati sintomi, eccetera.).

Sistema di raccomandazione

PER sistema di raccomandazione è una sottoclasse del sistema di filtraggio delle informazioni che cerca di prevedere la 'valutazione' o la 'preferenza' che un utente darebbe a un elemento. I sistemi di raccomandazione sono diventati sempre più popolari negli ultimi anni e vengono utilizzati in una varietà di aree tra cui film, musica, notizie, libri, articoli di ricerca, query di ricerca, tag sociali e prodotti in generale.

I sistemi di raccomandazione in genere producono un elenco di raccomandazioni in due modi: attraverso il filtraggio collaborativo e basato sui contenuti o l'approccio basato sulla personalità.

  1. Filtraggio collaborativo approcci alla creazione di un modello dal comportamento passato di un utente (articoli acquistati o selezionati in precedenza e / o valutazioni numeriche assegnate a tali articoli), nonché decisioni simili prese da altri utenti. Questo modello viene quindi utilizzato per prevedere gli articoli (o le valutazioni degli articoli) a cui l'utente potrebbe essere interessato.
  2. Filtro basato sui contenuti gli approcci utilizzano una serie di caratteristiche distinte di un elemento al fine di consigliare elementi aggiuntivi con proprietà simili.

Inoltre, questi approcci sono spesso combinati come sistemi di raccomandazione ibridi.

Clustering

Clustering è il compito di raggruppare un insieme di oggetti in modo tale che gli oggetti nello stesso gruppo (chiamato cluster) siano più simili (in un senso o nell'altro) tra loro che a quelli di altri gruppi (cluster). Quindi, è il compito principale del data mining esplorativo e una tecnica comune per l'analisi statistica dei dati, utilizzata in molti campi, tra cui l'apprendimento automatico, il riconoscimento di modelli, l'analisi delle immagini, il recupero delle informazioni, la bioinformatica, la compressione dei dati e la computer grafica.

Riduzione della dimensionalità

Riduzione della dimensionalità è il processo di riduzione del numero di variabili casuali in esame, ottenendo un insieme di variabili principali. Può essere suddiviso in selezione delle caratteristiche ed estrazione delle caratteristiche.

  1. Selezione delle caratteristiche: La selezione delle caratteristiche trova un sottoinsieme delle variabili originali (chiamate anche caratteristiche o attributi).
  2. Estrazione delle caratteristiche: Questo trasforma i dati nello spazio ad alta dimensione in uno spazio di meno dimensioni. La trasformazione dei dati può essere lineare, come nell'analisi dei componenti principali (PCA), ma esistono anche molte tecniche di riduzione della dimensionalità non lineare.

Estrazione delle caratteristiche

Estrazione delle caratteristiche parte da un set iniziale di dati misurati e costruisce valori derivati ​​(caratteristiche) destinati ad essere informativi e non ridondanti, facilitando le successive fasi di apprendimento e generalizzazione, e in alcuni casi portando a migliori interpretazioni umane. Ciò è correlato alla riduzione della dimensionalità.

Ottimizzazione

Ottimizzazione è la selezione dei migliorielemento (per quanto riguarda alcuni criteri) da un insieme di alternative disponibili.

Nel caso più semplice, un problema di ottimizzazione consiste nel massimizzare o ridurre al minimo una funzione reale scegliendo sistematicamente i valori di input all'interno di un insieme consentito e calcolando il valore della funzione. La generalizzazione della teoria e delle tecniche di ottimizzazione ad altre formulazioni comprende una vasta area della matematica applicata. Più in generale, l'ottimizzazione include la ricerca dei valori 'migliori disponibili' di una funzione obiettivo dato un dominio (o input) definito,compresa una varietà di diversi tipi di funzioni obiettivo e diversi tipi di domini.

Caso d'uso - Sistema di raccomandazione per i film

Dichiarazione problema: Per creare un sistema di consigli sui film che consiglia i film in base alle preferenze di un utente utilizzando Apache Spark.

I nostri requisiti:

Quindi, valutiamo i requisiti per creare il nostro sistema di consigli sui film:

  1. Elabora enormi quantità di dati
  2. Input da più sorgenti
  3. Facile da usare
  4. Elaborazione veloce

Come possiamo valutarele nostre esigenze, abbiamo bisogno del miglior strumento Big Data per elaborare dati di grandi dimensioni in breve tempo. Pertanto, Apache Spark è lo strumento perfetto per implementare il nostro sistema di raccomandazione sui film.

Esaminiamo ora il diagramma di flusso per il nostro sistema.

Come possiamo vedere, quanto segue usa Streaming da Spark Streaming. Possiamo eseguire lo streaming in tempo reale o leggere i dati da Hadoop HDFS.

Recupero del set di dati:

Per il nostro sistema di raccomandazione sui film, possiamo ottenere le valutazioni degli utenti da molti siti Web popolari come IMDB, Rotten Tomatoes e Times Movie Ratings. Questo set di dati è disponibile in molti formati come file CSV, file di testo ae database. Possiamo eseguire lo streaming dei dati in tempo reale dai siti Web o scaricarli e archiviarli in formatoil nostro file system locale o HDFS.

Set di dati:

La figura seguente mostra come possiamo raccogliere set di dati da siti Web popolari.

Una volta trasmessi i dati in Spark, è simile a questo.

Apprendimento automatico:

L'intero sistema di raccomandazione è basato su algoritmo di Machine Learning Minimi quadrati alternati . Qui, la SLA è un tipo di analisi di regressione in cui la regressione viene utilizzata per disegnare una linea tra i punti dati in modo tale da ridurre al minimo la somma dei quadrati della distanza da ciascun punto dati. Pertanto, questa linea viene quindi utilizzata per prevedere i valori della funzione in cui incontra il valore della variabile indipendente.

La linea blu nel diagramma è la linea di regressione più adatta. Per questa linea, il valore della dimensione D è minimo. Tutte le altre linee rosse saranno sempre più lontane dal set di dati nel suo insieme.

Implementazione di Spark MLlib:

  1. Useremo il Collaborative Filtering (CF) per prevedere le valutazioni degli utenti per determinati film in base alle loro valutazioni per altri film.
  2. Successivamente collaboriamo con la valutazione di altri utenti per quel particolare film.
  3. Per ottenere i seguenti risultati dal nostro Machine Learning, dobbiamo utilizzare DataFrame, Dataset e SQL Service di Spark SQL.

Ecco lo pseudo codice per il nostro programma:

import org.apache.spark.mllib.recommendation.ALS import org.apache.spark.mllib.recommendation.Rating import org.apache.spark.SparkConf // Importa altri pacchetti necessari oggetto Movie {def main (args: Array [String] ) {val conf = new SparkConf (). setAppName ('Movie'). setMaster ('local [2]') val sc = new SparkContext (conf) val rawData = sc.textFile ('* Leggi dati dal file CSV del film * ') //rawData.first () val rawRatings = rawData.map (* Split rawData on tab delimiter *) val rating = rawRatings.map {* Map case array of User, Movie and Rating *} // Training the data val model = ALS.train (valutazioni, 50, 5, 0,01) model.userFeatures model.userFeatures.count model.productFeatures.count val predictedRating = * Previsione per l'utente 789 per il film 123 * val userId = * Utente 789 * val K = 10 val topKRecs = model.recommendProducts (* Consigliato per l'utente per il valore particolare di K *) println (topKRecs.mkString ('')) val movies = sc.textFile ('* Read Movie List Data *') val titles = movies.map (line => line.split ('|'). take ( 2)). Map (array => (array (0) .toInt, array (1))). CollectAsMap () val titleRDD = movies.map (line => line.split ('|'). Take (2) ) .map (array => (array (0) .toInt, array (1))). cache () documents (123) val moviesForUser = rating. * Cerca utente 789 * val sqlContext = * Crea contesto SQL * val moviesRecommended = sqlContext. * Crea un DataFrame di film consigliati * moviesRecommended.registerTempTable ('moviesRecommendedTable') sqlContext.sql ('Seleziona conteggio (*) da moviesRecommendedTable'). foreach (println) moviesForUser. * Ordina le valutazioni per Utente 789 * .map (* Mappa la valutazione sul titolo del film *). * Stampa la valutazione * val risultati = moviesForUser.sortBy (-_. Rating) .take (30) .map (rating => (titoli (rating.product), rating.rating))}}

Una volta generate le previsioni, possiamo utilizzare Spark SQL per archiviare i risultati in un sistema RDBMS. Inoltre, questo può essere visualizzato su un'applicazione web.

Risultati:

Figura: Film consigliati per l'utente 77

Evviva! Abbiamo quindi creato con successo un sistema di raccomandazione di film utilizzando Apache Spark. Con questo, abbiamo coperto solo uno dei tanti algoritmi popolari che Spark MLlib ha da offrire. Approfondiremo l'apprendimento automatico nei prossimi blog sugli algoritmi di data science.

In futuro, puoi continuare a imparare Apache Spark con Spark Tutorial, Spark Streaming Tutoriale Spark Interview Questions.Edureka si impegna a fornire la migliore esperienza di apprendimento possibile online.

Dai un'occhiata al nostro io Se desideri imparare Spark e costruire una carriera nel dominio di Spark e sviluppare competenze per eseguire l'elaborazione dei dati su larga scala utilizzando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala con casi d'uso reali.