-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Spark e machine Learning


Spark offre una suite di strumenti per il machine learning attraverso la sua libreria integrata, MLlib.

Utilizzo di Apache Spark per il Machine Learning

Apache Spark è una piattaforma open-source progettata per l'elaborazione dei dati su larga scala e offre una suite di strumenti potenti per il machine learning attraverso la sua libreria integrata, MLlib.
Spark è stato creato per gestire grandi volumi di dati e operazioni complesse in modo distribuito, rendendolo una scelta eccellente per le applicazioni di machine learning (ML) che richiedono alte prestazioni e scalabilità.

Architettura di Spark

Architettura di Spark e il Motore di Calcolo Distribuito. Spark si distingue per la sua architettura basata su un motore di calcolo distribuito in-memory, il che significa che può eseguire operazioni complesse molto più velocemente rispetto a sistemi che memorizzano dati su disco tra un'operazione e l'altra, come Hadoop MapReduce.
La possibilità di eseguire calcoli in-memory è particolarmente utile nel contesto del machine learning, dove spesso è necessario iterare più volte sugli stessi dati (ad esempio, durante il training di un modello).

MLlib

MLlib: La Libreria di Machine Learning di Spark** MLlib è la libreria di machine learning di Spark, che fornisce un insieme di algoritmi e strumenti per eseguire compiti di ML come classificazione, regressione, clustering, riduzione della dimensionalità, e molto altro. MLlib è progettata per essere scalabile e interoperabile con altri componenti di Spark, come SQL e DataFrame, rendendo l'integrazione del machine learning nei flussi di lavoro di elaborazione dei dati semplice ed efficiente.

Alcuni algoritmi chiave di MLlib includono:**
- Classificazione e Regressione: Algoritmi come la regressione lineare, la regressione logistica, gli alberi di decisione e le reti neurali possono essere utilizzati per costruire modelli predittivi su dati etichettati.

- Clustering: Algoritmi come K-means e Gaussian Mixture Models sono disponibili per segmentare i dati non etichettati in gruppi simili.

- Collaborative Filtering: Utilizzato per sistemi di raccomandazione, sfruttando metodi come Alternating Least Squares (ALS).

- Riduzione della Dimensionalità: Tecniche come PCA (Principal Component Analysis) possono essere utilizzate per ridurre il numero di variabili nei dati, mantenendo però la variabilità più significativa.

Esempio di Utilizzo: Training di un Modello di Classificazione

Per addestrare un modello di classificazione con Spark, il primo passo è caricare i dati e rappresentarli in un DataFrame. Spark consente di lavorare direttamente con i dati memorizzati in HDFS, Cassandra, HBase o formati di file tradizionali come CSV e JSON.
Ecco un esempio di come addestrare un modello di classificazione con Spark MLlib:
    
from pyspark.sql import SparkSession
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.evaluation import MulticlassClassificationEvaluator

# Inizializzazione della sessione Spark
spark = SparkSession.builder.appName("ML Example").getOrCreate()

# Caricamento dei dati
data = spark.read.csv("data.csv", header=True, inferSchema=True)

# Preprocessing: trasformare le caratteristiche in un vettore
assembler = VectorAssembler(inputCols=["feature1", "feature2", "feature3"], outputCol="features")
data = assembler.transform(data)

# Divisione dei dati in training e test set
(train, test) = data.randomSplit([0.7, 0.3])

# Creazione e addestramento del modello
lr = LogisticRegression(featuresCol="features", labelCol="label")
model = lr.fit(train)

# Valutazione del modello
predictions = model.transform(test)
evaluator = MulticlassClassificationEvaluator(labelCol="label", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)

print(f"Accuracy: {accuracy:.2f}")

# Chiusura della sessione Spark
spark.stop()
    
    

In questo esempio, un modello di regressione logistica è addestrato utilizzando MLlib. I dati vengono caricati in un DataFrame Spark, trasformati in vettori di caratteristiche, suddivisi in un set di training e uno di test, e infine utilizzati per addestrare un modello.

Integrazione con altre tecnologie

Spark si integra facilmente con altre tecnologie e librerie di machine learning.
Ad esempio, Spark può essere utilizzato insieme a TensorFlow o PyTorch per il deep learning,
sfruttando Spark per la gestione dei dati su larga scala e lasciando il training dei modelli complessi ai framework di deep learning.