Cosa succede quando si applica SVD a un problema di filtro collaborativo? Qual è la differenza tra i due?


21

Nel filtro collaborativo, abbiamo valori che non sono stati inseriti. Supponiamo che un utente non abbia guardato un film, quindi dobbiamo inserire un "na".

Se ho intenzione di prendere un SVD di questa matrice, allora devo inserire un numero in essa - diciamo 0. Ora se fattorizzo la matrice, ho un metodo per trovare utenti simili (scoprendo quali utenti sono più vicini tra loro in lo spazio dimensionale ridotto). Ma la preferenza prevista stessa - per un utente a un articolo sarà zero. (perché è quello che abbiamo inserito nelle colonne sconosciute).

Quindi sono bloccato dal problema del filtro collaborativo vs SVD. Sembrano essere quasi uguali, ma non del tutto.

Qual è la differenza tra loro e cosa succede quando applico un SVD a un problema di filtro collaborativo? L'ho fatto e i risultati sembrano accettabili in termini di ricerca di utenti nelle vicinanze, il che è fantastico, ma come?

Risposte:


25

Ok, quando dici SVD, presumibilmente stai parlando di SVD troncato (dove mantieni solo i più grandi valori singolari). Esistono due modi diversi di esaminare il file SVD troncato di una matrice. Uno è la definizione standard:k

Per prima cosa esegui SVD: , dove e sono matrici di rotazione e ha i valori singolari lungo la diagonale. Quindi scegli i primi valori singolari, azzera il resto e elimina le righe e le colonne irrilevanti per fare un'approssimazione di -rank all'originale: UVΣkkX ˜ X = ˜ U n × k k × k ˜ Σ ˜ V T k × mXn×m=Un×nΣn×mVTm×mUVΣkkXX~=U~n×kΣ~k×kV~Tk×m

Tutto questo va bene e dandy (e facile da implementare in R o matlab), ma non ha senso quando si parla di matrici con valori mancanti. Tuttavia, c'è un'interessante proprietà dell'SVD troncato - È la migliore approssimazione -rank dell'originale! Questo è:kkk

X~=argminB:rank(B)=ki,j(XijBij)2

Questa proprietà sembra facile da generalizzare al caso del valore mancante. Fondamentalmente stai cercando una matrice -rank che minimizzi l'errore quadratico medio in termini di elementi attraverso le voci conosciute della matrice originale. Cioè, quando si allena il sistema, si ignorano tutti i valori mancanti. (Per suggerimenti su come potresti effettivamente trovare una approssimazione -rank, qui ci sono alcuni posti in cui cercare).kkk

Quindi, una volta che hai trovato un'approssimazione -rank opportunamente "vicina" all'originale, la usi per riempire i valori mancanti. Cioè, se mancava , allora si compila . Tada! Ora hai finito.X i j ˜ X i jkXijX~ij


3

Sembra che ci siano molti approcci su come gestire i valori mancanti. Il seguente documento con revisione nella Sezione 1.3 può essere un buon punto di partenza.


0

Ho bisogno di più reputazione per commentare la risposta di Stumpy Joe Pete, quindi inserisco questo come risposta.

Stumpy grazie per la risposta, anche se penso che abbia bisogno di un po 'di chiarimenti. In particolare intendo questa frase:

Fondamentalmente stai cercando una matrice di grado k che minimizzi l'errore quadratico medio in termini di elementi attraverso le voci conosciute della matrice originale.

Primo: il grado più alto non minimizzerebbe sempre questo, o ricostruirà effettivamente la matrice X originale? Secondo: perché dovresti prendere solo le voci conosciute . Intuitivamente ha senso, ma in realtà la procedura si adatta anche ai posti vuoti che sono stati sostituiti con alcuni numeri ragionevoli.

Il mio approccio sarebbe quello di realizzare qualcosa come una validazione incrociata:

  1. Riempi i posti vuoti con 0 o mezzi o un altro numero ragionevole.
  2. Sostituisci uno degli n elementi noti con 0 o un numero ragionevole
  3. Effettuare la ricostruzione SVD di rango k
  4. Controllare il valore dell'elemento ricostruito noto .
  5. ripetere per tutti i possibili elementi noti e calcolare MSE
  6. ripetere per tutti i k possibili e scegliere quello con MSE più basso.

1. Volete scegliere un k basso per evitare un eccesso di adattamento (molto più basso di qualunque sia la dimensione di X). Questo è fondamentalmente per lo stesso motivo per cui la regressione lineare è una scelta migliore di una quintica per adattare un set di dati di 6 punti. 2. Non sai quali dovrebbero essere le voci sconosciute, quindi non puoi misurare "l'MSE saggio" tra loro. La mia procedura riempie i valori mancanti con i numeri derivati ​​minimizzando l'errore rispetto ai valori noti (e vincolando che la matrice deve essere di basso livello).
Stumpy Joe Pete,
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.