2010-10-29 12 views
11

Sto cercando di scrivere un motore di raccomandazione di base che prenderà e memorizzerà un elenco di ID numerici (che si riferiscono ai libri), confrontarli con altri utenti con un numero elevato di ID identici e raccomandare ulteriori libri basati su quei reperti.Scrivere un motore di raccomandazione di base

Dopo un po 'di ricerca su Google, ho trovato this article, che descrive un'implementazione di un algoritmo di Slope One, ma sembra fare affidamento sugli utenti che valutano gli articoli da confrontare. Idealmente, mi piacerebbe farlo senza la necessità che gli utenti forniscano valutazioni. Suppongo che se l'utente ha questo libro nella sua collezione, ne è affezionato.

Mentre mi colpisce il fatto che potrei avere un punteggio predefinito di 10 per ogni libro, mi chiedo se ci sia un algoritmo più efficiente che potrei usare. Idealmente mi piacerebbe calcolare questi consigli al volo (evitando il calcolo del lotto). Tutti i suggerimenti sarebbero apprezzati.

risposta

11

Un algoritmo di base per l'attività è un sistema di raccomandazione collaborative memory-based. È abbastanza facile da implementare, specialmente quando i tuoi articoli (nel tuo caso book) hanno solo ID e nessun'altra caratteristica.

Ma, come hai già detto, è necessario un qualche tipo di valutazione dagli utenti per gli articoli. Ma non pensare ad una valutazione come da 1 a 5 stelle, ma più come una scelta binaria come 0 (libro non letto) e 1 (libro letto), o interessato a o non interessato a.

quindi utilizzare un adeguato distance measure per calcolare la differenza tra tutti gli utenti (ei loro insiemi di oggetti) e voi stessi, selezionare i n utenti più simili a te stesso (di chi l'utente attivo è) e scegliere il loro articoli che non hai valutato (o considerato, scelta 0).

Penso che in questo caso, una misura di distanza buona sarebbe la distanza 1-norma o talvolta chiamata la distanza di Manhattan. Ma questo è un punto in cui devi sperimentare con il set di dati per ottenere i migliori risultati.

Un bel introduzione a questo argomento è la carta da Breese et al., empirica Analisi predittiva Algoritmi per la Collaborative Filtering. Disponibile here (PDF). Per un documento di ricerca, è una lettura facile.

+0

Su quale base stai raccomandando la norma L1? – isomorphismes

+0

@Lao Tzu: Puramente nelle mie stesse misure e prove empiriche. Quando ho usato i dati con solo "voti" binari (come il libro in o non in collezione), mi ha dato dei buoni risultati (come meglio della maggior parte delle altre norme). Ma come ho detto, questo è un punto in cui devi sperimentare da solo. O scavare alcuni documenti di ricerca riguardanti queste domande. – dermatthias

+0

Abbastanza giusto. Nel sistema su cui sto lavorando usiamo norme specifiche per il prodotto. Ho trovato più semplice progettare semplicemente lo spazio metrico attorno ai particolari per un determinato cliente. – isomorphismes

2

Il Apriori algorithm può fornire consigli in base a quale insieme di elementi è interessante per l'utente. Devi definire la tua nozione di insieme interessante, ad es. elementi che l'utente ha acquistato in un singolo ordine, articoli che l'utente ha mai acquistato, articoli che l'utente ha commentato favorevolmente, articoli che un utente ha esplorato in dettaglio.

L'algoritmo Apriori richiede l'elaborazione in batch, ma esistono miglioramenti che potrebbero non richiedere l'elaborazione in batch. Questi sono AprioriTid e AprioriHybrid (mi dispiace, nessun link).

0

@ndg Questo è molto perspicace e come qualcuno che lavora in quest'area penso che tu abbia ragione nell'utilizzare ciò che equivale a un sistema di classificazione ~ {0,1}. La maggior parte delle differenze nelle valutazioni stellari sono solo rumore. Puoi consentire {0,1,2} con un "love it!" pulsante, ma ancora una volta gli utenti sono incoerenti nel loro uso di tali pulsanti, quindi può essere utile limitare la scelta. Hotpot consente agli utenti di avere 10 super-plus-loves che lo mantengono coerente.

Il mio consiglio è di fare attenzione a dipingere in modo troppo ampio di pennellate. In altre parole, un algoritmo universale è più semplice, ma si perde l'opportunità di essere opportunisti.

Prendi un set di dati di dimensioni ridotte con cui hai familiarità - come ottenere alcuni dei tuoi amici per utilizzare il sito - e prendi nota di tutti i fattori che potrebbero influire positivamente o negativamente sulle valutazioni della distanza dell'utente. Quindi nel processo di modellazione devi decidere quali fattori e come/quanto.

Tenere presente che il numero di norme è circa la dimensione del numero di curve. E potresti voler considerare un quasinorm, pseudonormo o anche norme non continue.

Non vedo alcun motivo per utilizzare la norma di Manhattan, infatti userei le norme basate su grafici per calcolare la distanza tra gli utenti.

Problemi correlati