2016-03-29 2 views
0

In Graphlab, Ich arbeite mit kleinen Fitnessdaten, um Empfehlungsfunktionen zu verwenden, die Empfehlungen bieten könnten. Das Dataset hat die Spalten der Benutzer-ID, aber nicht die Element-IDs, stattdessen sind verschiedene Elemente in Spalten angeordnet und ihre jeweiligen Bewertungen in Zeilen, die jeder Benutzer-ID entsprechen. Um eine beliebige Graphlab-Recommender-Methode verwenden zu können, muss ich eine Benutzer-ID und eine Item-ID haben. Hier ist, was ich getan habe:Grpahlab SFrames: Fehler bei der Verwendung von SFrames mit dem Datensatz

v = graphlab.SFrame.read_csv('Data.csv') 
userId = v["user_id"] 
itemId = v["x","y","z","x1","y1","z1"] //x,y,z,x1,y1,z1 are activities that are actually the columns in Data and contains corresponding ratings given by user 

sf= graphlab.SFrame({'UserId':userId,'ItemId':itemId}) 
print sf.head(5) 

Grundsätzlich ich die user_id col aus Daten extrahiert und versucht, eine Spalte für ItemId machen mit der x, y, z, usw. extrahiert Spalten aus den gleichen Daten, um einen anderen sframe zu machen mit nur diesen 2 Spalten. Dieser Code führt zu einem Tabellenformat sframe mit 2 Spalten wie erwartet, aber nicht in der gleichen Reihenfolge angeordnet übergeben ich Argumente in SFrame. Die Ausgabe gibt ItemId als die erste Spalte und dann UserId. Obwohl ich versuchte, die Reihenfolge der Übergabe dieser 2 in sframe zu ändern, gibt es immer noch die gleiche Ausgabe. Kennt jemand den Grund warum? Dies erzeugt ein weiteres Problem, wenn eine Empfehlungsmethode verwendet wird, da sie den Fehler gibt: Spaltenname user_id existiert nicht.

Antwort

0

Der Grund für die Spaltenreihenfolge liegt darin, dass Sie ein Python-Wörterbuch an den SFrame-Konstruktor übergeben. Wörterbücher in Python behalten die Schlüssel nicht in der Reihenfolge bei, in der sie angegeben wurden. sie haben ihre eigene Ordnung. Wenn Sie "UserId" bevorzugen, können Sie sf.swap_columns('UserId','ItemId') anrufen.

Die Reihenfolge der Spalten hat jedoch keinen Einfluss auf die Empfehlungsmethode. Der Fehler Column name 'user_id' does not exist wird angezeigt, wenn Sie keine Spalte mit dem Namen user_id AND haben und nicht angeben, wie der Name der Spalte user_id lauten soll. In Ihrem Fall möchten Sie Folgendes tun: graphlab.recommender.create(sf, user_id='UserId', item_id='ItemId').

Sie können auch die stack-Methode betrachten, die dazu beitragen könnte, Ihre Daten in die Form zu bringen, die die Empfehlungsmethode erwartet. Ihr aktueller SFrame sf Ich denke, wird eine Spalte von Wörterbüchern haben, wo die Artikel-ID der Schlüssel ist und die Bewertung der Wert ist. Ich glaube, das würde in diesem Fall funktionieren:

sf.stack('ItemId', new_column_name=['ItemId','Rating']) 
+0

Dank Evan, mit Stack() half bei der Verwendung der anderen Empfehlungsmethoden. Der Code wird gut ausgeführt, außer dass er keine Ergebnisse für die Empfehlungsfunktion liefert, die ich auf diese Weise verwendet habe: result = graphlab.recommender.item_similarity_recommender.create (m, user_id = 'UserId', item_id = 'ItemId', target = 'Rating ', Ähnlichkeitsart =' Kosinus ') recs = result.recommend() print recs – user6127405

Verwandte Themen