Articolo basato filtraggio collaborativo
La raccomandazione originale dell'oggetto-based è totalmente in base al ranking utente-oggetto (ad esempio, un utente nominale un film con 3 stelle, o un utente "piace" un video) . Quando calcoli la somiglianza tra gli elementi, non devi conoscere altro che la cronologia degli utenti di tutti gli utenti. Quindi la somiglianza tra gli elementi è calcolata in base alle valutazioni invece dei metadati del contenuto dell'articolo.
Lasciatemi fare un esempio. Supponiamo di avere accesso solo ad alcuni dati di rating come di seguito:
user 1 likes: movie, cooking
user 2 likes: movie, biking, hiking
user 3 likes: biking, cooking
user 4 likes: hiking
Supponiamo ora si vuole fare raccomandazioni per l'utente 4.
Prima si crea un indice invertito per gli oggetti, si otterrà:
movie: user 1, user 2
cooking: user 1, user 3
biking: user 2, user 3
hiking: user 2, user 4
Poiché si tratta di una valutazione binaria (simile o meno), è possibile utilizzare una misura di somiglianza come Jaccard Similarity per calcolare la somiglianza degli articoli.
|user1|
similarity(movie, cooking) = --------------- = 1/3
|user1,2,3|
Nel numeratore, utente1 è l'unico elemento che il film e la cottura hanno entrambi. Nel denominatore l'unione di film e cucina ha 3 utenti distinti (utente 1,2,3). |.|
qui indicano la dimensione del set. Quindi sappiamo che la somiglianza tra film e cucina è 1/3 nel nostro caso. Fai semplicemente la stessa cosa per tutte le possibili coppie di articoli (i,j)
.
Dopo aver finito con il calcolo similitudine per tutte le coppie, per esempio, è necessario fare una raccomandazione per l'utente 4.
- sguardo al punteggio di somiglianza di
similarity(hiking, x)
dove x è un qualsiasi altro tag che potrebbero avere .
Se è necessario fornire un suggerimento per l'utente 3, è possibile aggregare il punteggio di somiglianza tra ciascuna voce del proprio elenco. Ad esempio,
score(movie) = Similarity(biking, movie) + Similarity(cooking, movie)
score(hiking) = Similarity(biking, hiking) + Similarity(cooking, hiking)
basa-content content-based raccomandazione
Il punto è che dobbiamo conoscere il contenuto di entrambi utente e voce. Generalmente si costruiscono profilo utente e profilo oggetto utilizzando il contenuto dello spazio attributo condiviso. Ad esempio, per un film, lo si rappresenta con le stelle del film in esso e i generi (utilizzando una codifica binaria per esempio). Per il profilo utente, puoi fare la stessa cosa in base agli utenti, ad esempio alcune stelle/generi cinematografici, ecc. Quindi la somiglianza tra utente e oggetto può essere calcolata usando, ad esempio, somiglianza del coseno.
Ecco un esempio concreto:
Supponiamo che questo è il nostro profilo utente (utilizzando la codifica binaria, 0 significa non-like, 1 mezzi simili), che contiene la preferenza dell'utente più di 5 stelle del cinema e 5 generi cinematografici:
Movie stars 0 - 4 Movie Genres
user 1: 0 0 0 1 1 1 1 1 0 0
user 2: 1 1 0 0 0 0 0 0 1 1
user 3: 0 0 0 1 1 1 1 1 1 0
Suppongo che questo sia il nostro film-profilo:
Movie stars 0 - 4 Movie Genres
movie1: 0 0 0 0 1 1 1 0 0 0
movie2: 1 1 1 0 0 0 0 1 0 1
movie3: 0 0 1 0 1 1 0 1 0 1
per calcolare quanto è buono un film è quello di un utente, usiamo cosine similarity:
dot-product(user1, movie1)
similarity(user 1, movie1) = ---------------------------------
||user1|| x ||movie1||
0x0+0x0+0x0+1x0+1x1+1x1+1x1+1x0+0x0+0x0
= -----------------------------------------
sqrt(5) x sqrt(3)
= 3/(sqrt(5) x sqrt(3)) = 0.77460
Allo stesso modo:
similarity(user 2, movie2) = 3/(sqrt(4) x sqrt(5)) = 0.67082
similarity(user 3, movie3) = 3/(sqrt(6) x sqrt(5)) = 0.54772
Se si vuole dare una raccomandazione per l'utente i
, basta scegliere film j
che ha il più alto similarity(i, j)
.
Spero che questo aiuti.
grazie per il tuo post, ed è così dettagliato. – cstur4
Cooking ha 2 utenti distinti? –