SVD di una matrice con valori mancanti


12

Supponiamo di avere una matrice di consigli in stile Netflix e di voler costruire un modello che preveda potenziali valutazioni future sui film per un determinato utente. Usando l'approccio di Simon Funk, si userebbe la pendenza stocastica del gradiente per ridurre al minimo la norma di Frobenius tra la matrice completa e la matrice elemento per elemento * utente per utente combinata con un termine di regolarizzazione L2.

In pratica, cosa fanno le persone con i valori mancanti dalla matrice delle raccomandazioni, che è il punto centrale del calcolo? La mia ipotesi dalla lettura del post sul blog di Simon è che usa SOLO i termini non mancanti (che consistono in (diciamo) ~ 1% della matrice delle raccomandazioni) per costruire un modello (con una scelta oculata di iperparametri e regolarizzazione) per prevedere l'altro 99% della matrice?

In pratica, salti davvero tutti quei valori? O deduci il più possibile PRIMA di fare una discesa stocastica a gradiente? Quali sono alcune delle migliori pratiche standard per gestire i valori mancanti?


1
Sembra la stessa domanda a questo . Ho risposto alla domanda lì.
d_ijk_stra,

2
Anch'io ho risposto .
Stumpy Joe Pete,

2
@d_ijk_stra "risposte" lo sta mettendo un po 'generosamente per quello che equivale a un collegamento a un PDF
ali_m

Risposte:


6

Sì, in pratica quei valori vengono saltati. Nella tua descrizione in termini di una norma di Frobenius, ciò corrisponde a minimizzare i componenti della norma che possono essere misurati, cioè quelli che hanno valutazioni note. Il termine di regolarizzazione può essere visto come un precedente bayesiano sui componenti dei vettori delle caratteristiche, con l'SVD che calcola lo stimatore della massima verosimiglianza, soggetto a questi valori precedenti e noti.

Probabilmente è meglio pensare all'SVD come un metodo per inferire i valori mancanti. Se hai già un modo migliore per farlo, perché hai bisogno di SVD? In caso contrario, SVD riempirà felicemente le lacune per te.


1
Come si usa SVD per inferire quei valori mancanti? Hai provato altri metodi per inferire i valori mancanti, ad esempio utilizzando i valori non mancanti per addestrare un classificatore di foreste casuali, che potrebbe quindi essere utilizzato per indovinare i valori mancanti? Ottieni risultati migliori o dipende davvero dal problema?
Vishal,

1
Ne deducete i valori mancanti nello stesso modo in cui prevedereste valori futuri, utilizzando i componenti rilevanti della decomposizione SVD. La previsione di valutazioni future è esattamente lo stesso problema di inferire i valori mancanti. Se hai un buon modo per inferire i valori mancanti, basta usarlo per prevedere le valutazioni future. Se non lo fai, allora è a questo che serve SVD.
Martin O'Leary,

"Probabilmente è meglio pensare all'SVD come un metodo per inferire i valori mancanti". Ah, no, in realtà SVD dipende dall'utente per pre-inferire tutti i valori mancanti in qualche altro modo, prima di eseguire un SVD. SVD non imputa nulla.
Geoffrey Anderson,

1

In pratica, cosa fanno le persone con i valori mancanti dalla matrice delle raccomandazioni, che è il punto centrale del calcolo? La mia ipotesi dalla lettura del post sul blog di Simon è che usa SOLO i termini non mancanti per costruire un modello.

Esatto - questo è il punto del suo e del tuo modello, prevedere i termini mancanti, giusto? È un punto cruciale che molti dimenticano davvero. Pensano di poter semplicemente "presumere" di pre-assegnare una costante ai dati mancanti senza preoccuparsi del mondo, e le cose funzioneranno magicamente abbastanza bene da un SVD. Immondizia, immondizia: è reale, e faresti meglio a guardarla. Faresti meglio a non inviare dati spazzatura a un modello se desideri ottenere risultati utili.

NON è certamente "meglio dedurre alcun valore mancante" sul set di dati sparse di maggioranza e quindi eseguire SVD su quello con qualche speranza di imputare i valori per te (cosa che hai già imputato prima di eseguire SVD, giusto?). Cosa ne pensi, un modello è magico? Non esiste magia né tecnologia per superare la maggior parte dei dati sui rifiuti. Non puoi mentire a un modello secondo cui i dati sono dati reali quando non sono affatto reali, ma in realtà solo una spazzatura che hai semplicemente inventato dal nulla.

SVD fa altre cose utili, quindi sicuramente non sto dicendo che SVD non abbia alcun valore. Vai avanti e usa SVD solo su set di dati completi, forse sui quali hai imputato in modo intelligente valori mancanti sull'utilizzo già di un modello di apprendimento automatico con tutta la dovuta attenzione all'errore di polarizzazione e all'errore di varianza durante il suo sviluppo.

L'apprendimento automatico è la strada. Quindi, se vuoi ancora sapere come imputare i valori usando un design di fattorizzazione a matrice, ci sono certamente buoni modi per fare esattamente questo usando l'apprendimento automatico, e, soprattutto, non forniscono dati spazzatura a un modello da cui tentare inutilmente di imparare.

Esattamente un tale modello di fattorizzazione a matrice di apprendimento automatico è presentato abbastanza bene dagli istruttori del corso online di Stanford Mining Massive Data Set, nel modulo 5. Ti mostrano la matematica e spiegano il modello. Tuttavia non ti codificano.

Va bene perché puoi codificarlo tu stesso, se capisci l'apprendimento automatico di base. Sai cosa sono una funzione di perdita e una funzione di costo? Regolarizzazione? Discesa gradiente? Stai bene con la moltiplicazione e l'aggiunta di matrici? Errore di polarizzazione ed errore di varianza? Se è così, allora sei bravo. Altrimenti dovresti prendere in considerazione l'idea di frequentare il corso online Machine Learning di Andrew Ng a Coursera, che è uno dei tanti buoni posti di partenza. Poi vai anche al corso online Mining Massive Data Set che parla esattamente della fattorizzazione a matrice e dell'apprendimento automatico per creare modelli di raccomandazione.

Basti dire che puoi progettare completamente e codificare il tuo modello di fattorizzazione che gestisce molto bene i dati mancanti, proprio come ha fatto Simon Funk, e puoi farlo da zero ma non è affatto difficile come se fosse tornato ai suoi tempi, perché ora puoi usare uno strumento come TensorFlow o Microsoft CNTK che fa molto per te. Definire una funzione di perdita e una funzione di costo, scegliere un ottimizzatore, partizionare il set di dati in formazione, sviluppo, testare dai dati effettivamente disponibili (dati etichettati) e lasciarlo funzionare. Seriamente, funziona. Non è facile eseguire il debug di TF e dei suoi errori di creazione dei grafici, ma alla fine può funzionare alla grande e richiede meno di una pagina di codice.

In particolare, un modo per non inviare dati falsi a un modello di apprendimento automatico della fattorizzazione a matrice è quello di saltare gli elementi della matrice dei dati mancanti nelle funzioni di perdita e costo .


1

Esiste una tesi che esamina molti sistemi di raccomandazione e li confronta, ma non parla del monitoraggio a lungo termine degli elementi mancanti, ad esempio per testare le previsioni. Fa parte della tua domanda? Usando la componente temporale in quel modo? Tra i numerosi articoli e metodi, le revisioni della tesi sono sistemi sensibili al tempo / sensibili, come la ricerca sui documenti Rendle. Se la tua domanda riguarda anche la gestione della scarsità di dati, questo è anche discusso in dettaglio durante la tesi e ci sono molti metodi. matrici sparse e imputazione con zero o fattorizzazione a matrice che aggiunge una matrice di collegamento del raggruppamento di utenti (utenti che valutano gli oggetti in modo simile) o una matrice di collegamento del raggruppamento di elementi.

Il titolo della tesi è "Modelli di basso livello per sistemi di raccomandazione con informazioni sulle preferenze limitate" di Evgeny Frolov https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dissertation_Final1.pdf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.