2014-10-12 18 views
7

Dato un MatrixFactorizationModel quale sarebbe il modo più efficiente per restituire la matrice completa delle previsioni del prodotto utente (in pratica, filtrata da qualche soglia per mantenere la scarsità)?Come valutare tutte le combinazioni prodotto-utente in Spark MatrixFactorizationModel?

Via l'API corrente, una volta potrebbe passare un prodotto cartesiano di facilità d'uso del prodotto alla funzione di prevedere, ma mi sembra che questo farà un sacco di elaborazione aggiuntiva.

Avrebbe accesso all'utente privatoCaratteristiche, le caratteristiche del prodotto sono l'approccio corretto e, in tal caso, c'è un buon modo per sfruttare altri aspetti del framework per distribuire questo calcolo in modo efficiente? In particolare, c'è un modo semplice per fare meglio di moltiplicare tutte le coppie di userFeature, productFeature "a mano"?

risposta

5

Spark 1.1 ha un metodo recommendProducts che può essere mappato a ciascun ID utente. Questo è meglio di niente, ma non è davvero ottimizzato per raccomandare a tutti gli utenti.

Vorrei ricontrollare che intendete davvero fare raccomandazioni per tutti; su scala, questa è intrinsecamente una grande operazione lenta. Considera di prevedere utenti che sono stati solo attivi di recente.

Altrimenti, la soluzione migliore è creare il proprio metodo. Il join cartesiano delle feature RDD è probabilmente troppo lento poiché mescola così tante copie dei vettori di feature. Scegli il più grande set di caratteristiche utente/prodotto e mappalo. In ciascun lavoratore, tenere in memoria l'altro prodotto/set di funzioni utente in ciascun lavoratore. Se ciò non è fattibile, è possibile renderlo più complesso e mappare più volte contro sottoinsiemi del RDD più piccolo in memoria.

+0

Sì, è una grande operazione che è il motivo per cui mi sembrava vale la pena di cercare di ottimizzare ulteriormente. Grazie per i suggerimenti! – cohoz

Problemi correlati