Apache Scala e Machine Learning (MLlib)

Autore: Antonio Berti

In questo tutorial verrà illustrato l’uso della libreria di Apache Foundation per il Machine Learning chiamata MLlib.

MLib fa parte delle API di Spark ed è interoperabile con NumPy di Python oltre che con le librerie di R. Implementato con Spark è possibile utilizzare ogni tipo di origine dati della piattaforma Hadoop come per esempio HDFS, HBase,  fonti dati provenienti da database relazionali o sorgenti dati locali come documenti di testo.

Spark eccelle nella computazione iterativa consentendo ai processi scritti con le librerie di MLlib di essere eseguite molto velocemente consentendone l’utilizzo anche e soprattutto a livello industriale.

MLlib fornisce molti tipi di algoritmi oltre che numerose funzioni di utilità. ML include algoritmi di classificazione, regressione, alberi decisionali, algoritmi di raccomandazione, clustering. Fra le utilità più utilizzate si possono annoverare le trasformazioni delle caratteristiche, standardizzazione e normalizzazione, funzioni statistiche e di algebra lineare.

Nel codice seguente verrà illustrato come implementare un semplice modello di regressione logistica con MLlb.

 

Innanzitutto viene caricato il dataset.

val data =MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")

Il dataset viene diviso in una parte utilizzata per addestrare il modello (60%) e in un’altra per il test (40%).

val splits = data.randomSplit(Array(0.6, 0.4), seed=11L)
val training = splits(0).cache()
val test = splits(1)

 

Si addestra l’algoritmo e si costruisce il modello.

val model = new LogisticRegressionWithLBFGS()
   .setNumClasses(10)
   .run(training)

Si esegue il modello sul dataset di test.

val predictionAndLabels = test.map {case LabeledPoint(label, features) => 
 val prediction = model.predict(features)
  (prediction, label)}

In questo modo si ottiene la metrica del modello e l’accuratezza della previsione.

val metrics = new MulticlassMetrics(predictionAndLabels)
val accuracy = metrics.accuracy
println("Accuracy = $accuracy")

E’ possibile salvare il modello appena addestrato e ricaricarlo nuovamente in memoria per un ulteriore uso.

model.save(sc, "target/tmp/scalaLogisticRegressionWithLBFGSModel") 
val sameModel = LogisticRegressionModel.load(sc, 
               "target/tmp/scalaLogisticRegressionWithLBFGSModel")

 

Riferimenti:

documentazine spark – http://spark.apache.org

documentazione mllib – http://spark.apache.org/docs/latest/ml-guide.html

codice d’esempio – https://github.com/apache/spark/tree/master/examples/src/main/scala/org/apache/spark/examples

dataset d’esempio mllib – https://github.com/apache/spark/tree/master/data/mllib