2012-03-24 4 views
-1

Ich baue eine Empfehlungsmaschine und versuche, das neue Benutzerproblem zu überwinden. Ich möchte neue Benutzer bitten, eine bestimmte Anzahl von Elementen zu bewerten und dann herauszufinden, mit welchen anderen Nutzern sie am ähnlichsten sind. Dann verwenden Sie die Daten von ähnlichen Benutzern, um die ersten Empfehlungen zu generieren.Bewertungen basierend auf Benutzerähnlichkeitsalgorithmus Beispiel

Ich bin nicht sicher, wie dies zu tun ist, da ich zuvor an Artikel-zu-Artikel-Empfehlungen gearbeitet habe. Hat jemand ein Beispiel dafür? Entweder ein Pseudo-Code oder eine Implementierung in einer beliebigen Sprache (vorzugsweise keine funktionale Sprache).

Ich glaube, ich bin auf der Suche nach einem Benutzer nächsten Nächsten Algorithmus aber nicht sicher.

Vielen Dank im Voraus

Antwort

3

Die Kaltstartproblem wird auf eine Implementierung auf Basis von Benutzer zu Benutzer Ähnlichkeit nicht angegeben. Wie hast du das in deiner Artikel-Ähnlichkeits-basierten Implementierung gelöst?

Sie haben bereits einen Ansatz vorgeschlagen: Lassen Sie den Benutzer Ihnen Daten geben. Wenn das machbar ist, ist das eine gute Antwort. Idealerweise wählst du Gegenstände aus, die unterschiedlich sind - untereinander nicht sehr ähnlich.

Es ist nicht so falsch, eine einfache Top-10-Liste als Empfehlungen zu präsentieren, bevor Sie irgendwelche Daten haben, und dann zu empfehlen, so gut Sie können ab dem Moment, wenn Sie 1 Datenpunkt haben. Das ist der "normale" Weg zu mir.

+0

Ich habe nicht das item-Element Kaltstart Problem gelöst. Gegenwärtig wird die Mehrzahl der Empfehlungen unter Verwendung einer Matrix aller Elemente mit einem Zähler der Anzahl von Malen durchgeführt, bei denen einem der Benutzer zwei Elemente gefallen haben. Wenn zum Beispiel userA item1, item2 und item3 mag und userB like item1 und item3 mag, sieht die Matrix wie folgt aus: (item1, item2) 1, (item1, item3) 2 usw. Für die neuen Benutzerempfehlungen möchte ich die Ähnlichkeit zwischen Nutzern und Benutzern verwenden Ich denke, die Empfehlungen werden relevanter sein. Wenn sie nicht sind, habe ich etwas Neues gelernt :) – TrueWheel

+0

OK. Ihre Anzahl an Co-Vorkommen wird Ihnen jedoch nicht dabei helfen, die Ähnlichkeit zwischen Benutzern und Benutzern zu berechnen. Dafür würden Sie wirklich Benutzer-Benutzer-Cooccurrence benötigen. Aber das ist eine Tangente. Ich denke, die beste Antwort für Sie ist, Empfehlungen aus der ersten Bewertung, die Sie haben, zu berechnen und eine Top-10-Liste zu zeigen, wenn Sie keine Bewertungen haben. –

+0

Danke für den Rat. Ich habe die Nutzer gebeten, Produkte zu bewerten, wenn sie sich zum ersten Mal bei der Website anmelden. Identifiziere dann ähnliche Benutzer für die anfänglichen Empfehlungen, bis ich die Co-Häufigkeitszählungen verwenden kann. Ich werde den folgenden Code einfügen. – TrueWheel

1

Dies kann als ein aktives Lernproblem gerahmt werden. Karimi, Freudenthaler, Nanopoulos, and Schmidt-Thieme (2011) geben einen Weg, um es in einer Matrix Faktorisierung Einstellung zu behandeln, aber IMO gibt es eine Menge Probleme mit ihrem Ansatz (und ich arbeite an einem besseren Weg, obwohl für jetzt ist es zu langsam, um verwendbar zu sein).

Die grundlegende Frage ist: Welche Artikel werden mir am meisten über die Präferenzen dieses neuen Benutzers erzählen? Ohne die Besonderheiten Ihrer Empfehlungsmaschine zu kennen, ist es schwer, mehr zu sagen, als ein paar relativ unterschiedliche Dinge auszuwählen, über die Nutzer wahrscheinlich Meinungen haben (z. B. populäre Filme aus verschiedenen Genres).

+0

Danke für deinen Rat. Ich werde die Benutzer fragen, wenn die erste Anmeldung eine Reihe von verschiedenen Elementen bewerten, um ähnliche Benutzer für die ersten Empfehlungen zu identifizieren.Ich werde den folgenden Code einfügen. – TrueWheel

0

Hier ist mein erster Versuch, dieses Problem zu lösen. Ich bitte alle neuen Benutzer, eine Reihe verschiedener Produkte zu bewerten. Dann identifiziere ich basierend auf diesen Bewertungen die 3 existierenden Nutzer, denen sie am ähnlichsten sind. Dann kann ich die Informationen, die ich über diese drei Benutzer habe, verwenden, um die Artikel beim ersten Besuch der Website zu empfehlen.

Dank an alle, die mir Ratschläge gab :)

/** 

    * Select all of the customer ratings 
    */ 

$rows = getRows("SELECT * FROM customer_ratings;", 'NUM'); 

if(isset($_POST['submit'])){ 

    //Fill distanse array to zero for all items 
    $distance = array_fill(0, count($rows), 0); 

    $instance = $_POST['instance']; 


    //Loop over each of the exisiting ratings rows 
    for($i = 0; $i < count($rows); $i++) { 
     //Loop over the 5 items (The first two are id and name we only need 2-6) 
     for($j = 2; $j < 7; $j++) { 
       $distance[$i] += abs(($rows[$i][$j] - $instance[$j])); 
     } 
    } 

    //Sort distances by ascending order 
    asort($distance); 

    $distanceCopy = $distance; 

    $stringBuff = ""; 

    //Select the three most similar 
    for($i = 0; $i < 3; $i++){ 
     $maxs = array_keys($distanceCopy, min($distanceCopy)); 
     $stringBuff = $stringBuff . " ". ($maxs[0]+1) .","; 
     unset($distanceCopy[$maxs[0]]); 
    } 

    $stringBuff = substr_replace($stringBuff,"", -1); 

    echo "String buff: ".$stringBuff; 

    $mostSimilar = getRows("SELECT name FROM customer_ratings WHERE id IN ($stringBuff);", 'NUM'); 

} 
Verwandte Themen