Il Alternating Least Square, abbreviato in ALS, è un algoritmo di fattorizzazione di matrice (Matrix Factorization algorithm) per il calcolo distribuito e parallelo.
E’ la soluzione stato dell’arte per problemi di Collaborative Filtering, nell’ambito dei sistemi di raccomandazione (Recommender System).
Procediamo con ordine.
Hai ripassato i termini tecnici per comprendere meglio i sistemi di raccomandazione?
Ottimo.
Devi sapere che nell’ultimo post abbiamo compreso e analizzato il Matrix Factorization, un algoritmo per la risoluzione di data scarsity problem.
Sono sicuro che ti ricorderai il problema in chiusura: la necessità di avere un framework per il calcolo distribuito.
Ecco qui per te, Alternating Least Square
ALS: Alternating Least Square
Questo algoritmo risolve i problemi che emergono dalla gestione di matrici sparse, molto comuni nel campo dei sistemi di raccomandazione in cui i dataset hanno spesso parecchi valori mancanti.
Esaminiamo ora alcune caratteristiche generali di Aternating Least Square.
In contrapposizione al Funk SVD (descritto nel post precedente), facente uso della regolarizzazione L1, ALS ricorre a quella L2.
Per non farsi mancare nulla, ALS minimizza poi due loss function alternativamente:
- Prima, blocca la matrice user e usa la Discesa del Gradiente sulla quella item
- Poi, blocca la matrice item e calcola la Discesa del Gradiente sulla matrice user
Concludendo, ALS esegue l’algoritmo di Gradient Descent in parallelo su partizioni multiple del training dataset da un cluster di macchine connesse.
Niente più problemi di scalabilità.
Ottimo risultato.
Così come ogni altro algoritmo di machine learning, anche l’ALS ha il suo set d’iperparametri da ottimizzare, sfruttando tecniche quali hold-out validation o cross-validation.
I più importanti sono tre:
- maxIter: il numero massimo d’iterazioni da eseguire (default a 10)
- rank: il numero di fattori latenti del modello (defautl a 10)
- regParam: il parametro di regolarizzazione per ALS (default a 1.0 => L2 regularization)
Qualora fossi interessato ad approfondire le idee di fondo, ti rimando alla pubblicazione ufficiale.
Qui invece puoi trovare un’implementazione dell’algoritmo sfruttando la libreria di Apache Spark ML
Per il momento è tutto.
Un caldo abbraccio, Andrea.