RECSYS Lecture 6 - Hybrid Recommender Systems
Ecco a voi l’argomento per nulla atteso, la fusione delle fusioni: i sistemi di raccomandazione ibridi.
Ovviamente l’idea di base è quella di sfruttare la combinazione di sistemi già visti, per creare raccomandazioni più accurate.
Qui bisogna fare un’importante distinzione, ossia quella tra sistemi ensemble e sistemi ibridi:
-
i sistemi ensemble sono sistemi che utilizzano più modelli di machine learning, simili o diversi tra loro, per creare delle previsioni su cui poi viene definita una votazione. Il fatto chiave è che però i modelli lavorano in maniera indipendente.
-
voting: considero la somma pesata dei risultati dei singoli modelli
-
stacking: considero i risultati dei singoli modelli che vengono dati in pasto a un ulteriore modello che effettuerà la predizione finale
-
bagging: gli input forniti ai singoli modelli (tutti dello stesso tipo) è un sottoinsieme del set di dati e il risultato finale è la somma pesata dei valori degli output dei singoli modelli
-
boosting: vengono forniti dei dati di input a un modello, il cui input è poi fornito a un altro modello che migliora gli errori del modello precedente. La somma pesata dei risultati funge poi da risultato finale
-
-
i sistemi ibridi invece sono sistemi che usano più modelli anche molto diversi tra loro che vengono eseguiti al fine di ottenere un singolo risultato. È possibile che un modello X manipoli risultati di un altro modello Y. I singoli modelli non lavorano in modo indipendente per raggiungere più risultati che devono essere votati come invece i sistemi ensemble.
Possiamo classificare questi sistemi ibridi nelle seguenti categorie
-
weighted: uso più modelli e sommo i risultati
-
switching: in base al contesto decido se usare un modello piuttosto che un altro
-
feature augmentation: uso l’output di un modello per accrescere il numero di features dei dati passati al modello successivo
-
feature combination: raccolgo dati da più sorgenti e fondo assieme le loro features per poi darle in pasto a un singolo modello
-
cascade: uilizzo più modelli concatenati tra loro, è l’equivalente del boosting
-
mixed: propongo i risultati generati da più modelli (non è visto come un vero e proprio modello ibrido)
-
meta-level: utilizzo un modello per setacciare i dati da passare al modello successivo
-
Piccolo recap:
Come al solito, le domande che ci dobbiamo porre quando abbiamo più metodi da poter applicare, sono:
-
che differenza c’è tra ciascun modello?
Dipende dai modelli che vogliamo paragonare, ma in genere uno quando viene applicato in un certo produce un buon risultato, quando viene usato in un altro contesto produce un risultato peggiore, mentre un altro ne produrrà uno migliore.
-
in base a cosa posso valutare se un modello è migliore di un altro?
Attraverso i risultati che produce
-
eh, grazie al cazzo, ma quindi come vengono prodotti i risultati?
ora lo vediamo, stai calmo.
Se vogliamo capire come vengono prodotti i risultati dobbiamo prima parlare di alcune cose
-
come capire se i risultati sono buoni oppure no
-
varianza
-
bias
-
noise
-
-
capire come vengono prodotti i risultati
- gradient descent
Varianza
La varianza serve a capire quanto le nostre previsioni si discostano dai dati reali , ovverosia quanto sono concentrati o dispersi tra loro.
Bias
Il bias serve a capire se le nostre previsioni si discostano dai dati reali secondo un errore sistematico o meno.
Noise
La noise (o rumore) serve per capire se quanto le nostre previsioni sono soggette a un errore casuale.
Gradient descent
Il gradient descent viene usato per aggiornare i parametri del modello in base a una funzione di costo. Se con certi parametri il valore della funzione di costo che stiamo usando si alza, aggiorneremo i parametri per cercare di abbassarla. L’obiettivo è quello di minimizzare la funzione di costo.
Prendiamo ad esempio una funzione di regressione lineare semplice, come questa qua
Per capire quanto i nostri risultati sono belli, usiamo una funzione di costo definita come
Che produrrà un certo grafico, con delle concavità, delle curve etc etc.
Comunque questa funzione di costo sarà di questo tipo
Per certi valori dei parametri (nell’immagine corrisponde a “weight”) la funzione di costo crescerà, per altri valori decrescerà. Noi vogliamo capire per quale valore la funzione di costo è minima.
Ora facciamo caso a quella sigla chiamata “gradient” e a quel pallino nero che è il valore iniziale del nostro parametro. Il gradiente è rappresentato da quella linea tratteggiata e non è altro che la derivata della funzione in quel punto, ossia in parole povere la pendenza della curva. Secondo quella linea, se mi sposto a destra mi allontano dal minimo, se mi sposto a sinistra mi avvicino.
Eh, ma come facciamo quindi a fare in modo che il gradiente si sposti?
Semplice, aggiorniamo il valore del parametro in base al valore del gradiente. Se il gradiente è positivo (pendenza positiva) allora decremento il valore del parametro (mi sposto a sinistra). Viceversa se il gradiente è positivo incremento il valore del parametro (mi sposto a destra).
In sostanza faccio questo
È importante notare che esitono più modi per aggiornare i parametri.
Possiamo infatti
-
aggiornare i parametri una volta che tutti i sample sono stati predetti -> stochastic gradient descent
-
aggiornare i parametri ogni volta che viene predetto un sample -> mini-batch gradient descent
-
aggiornare i parametri quando un certo numero di sample è stato predetto -> batch gradient descent
Weighted model
Questo tipo di modello è piuttosto semplice, non si fa altro che sommare i valori delle predizioni date dai singoli modelli.
Come prima, ora bisogna trovare una funzione di costo opportuna, tipo questa
E per finire si aggiornano i pesi
Tutto molto semplice.
Switching
Questo tipo di sistema è basato sul cambiare modello di raccomandazione in base alle necessità del contesto. Ad esempio in caso ci siano problemi di cold-start il sistema potrebbe optare per usare un modello knowledge based per poi usare un modello content-based non appena l’utente abbia valutato un numero sufficiente di items.
I pro sono chiaramente questa adattabilità alle situazioni, ma di contro non sono visti propriamente come dei sistemi ibridi.
Cascade
I sistemi ibridi cascade sono modelli in cui si esegue un refinement degli output dei modelli prima di passarli ai modelli successivi della catena. Questo permette di diminuire l’errore della predizione finale.
Feature combination
L’idae non è altro che considerare più sorgenti di dati, combinarli e usare le features estratte come input per un modello.
Ad esempio si può usare dei dati collaborativi (numero di utenti che hanno valutato positivamente un certo items, etc. ) per poi addestrare un modello che invece è di tipo content-based.
Come funzione di costo può essere usata qualcosa del tipo
J = collaborative object (θ) + ß·content-based object(θ) + termine di regolarizzazione