2015-06-29 3 views
9

Ich versuche, Benutzer mit Mahout zu bündeln und zu klassifizieren. Im Moment, in dem ich mich in der Planungsphase befinde, sind meine Gedanken völlig durchsetzt mit Ideen, und da ich relativ neu in diesem Bereich bin, stecke ich bei der Datenformatierung fest.User Profiling mit Mahout aus dem kategorisierten Benutzerverhalten

Nehmen wir an, wir haben zwei Datentabellen (groß genug). In der ersten Tabelle gibt es Benutzer und ihre Aktionen. Jeder Benutzer hat mindestens eine Aktion und sie können auch zu viele Aktionen haben. Ungefähr 10000 verschiedene user_actions und Millionen von Datensätzen sind in der Tabelle.

user  - user_action 
u1   - a 
u2   - b 
u3   - a 
u1   - c 
u2   - c 
u2   - c 
u1   - b 
u4   - f 
u4   - e 
u1   - e 
u1   - d 
u5   - d 

In der anderen Tabelle gibt es Aktionskategorien. Jede Aktion darf keine oder mehrere Kategorien haben. Es gibt 60 Kategorien.

user_action - category 
a   - cat1 
b   - cat2 
c   - cat1 
d   - NULL 
e   - cat1, cat3 
f   - cat4 

Ich werde versuchen, ein Benutzerklassifikationsmodell mit Mahout zu bauen, aber ich habe keine Ahnung, was ich tun soll. Welche Art von Benutzervektoren sollte ich erstellen? Oder brauche ich wirklich Benutzervektoren?

Ich denke, ich muss etwas wie erstellen;

u1 (a, c, b, e, d) 
u2 (b, c, c) 
u3 (a) 
u4 (f, e) 
u5() 

Problem hier durchgeführt, einige Nutzer mehr als 100.000 Aktionen (einige von ihnen sind die gleichen Aktionen)

So; das ist nützlicher, denke ich;

u1 (cat1, cat1, cat2, cat1, cat3) 
u2 (cat2, cat1, cat1) 
u3 (cat1) 
u4 (cat4, cat1, cat3) 
u5() 

Die Dinge, die ich auch zu befürchten sind

  • Wie soll ich Kategorien Gewicht für die Nutzer? Zum Beispiel hat u1 mindestens drei Aktionen, die sich auf cat1 beziehen, während u3 nur 1 hat. Diese sollte anders sein?
  • Wie kann ich den Unterschied zwischen aktiven und passiven Benutzern verringern? Wie u1 hat zu viele Aktionen und so Kategorien, u3 hat nur 1.

Alle Leitlinien sind willkommen.

Antwort

1

Ich würde eine Zeile pro Benutzer erstellen, wie Sie es tun, und ich würde eine Spalte für jede der Kategorien haben; Dies würde zu 60 Spalten führen, wenn ich Ihr Beispiel richtig verstehe. Die Werte der Spalten reichen von 0 bis zur maximalen Anzahl, wie oft die Kategorie für den Benutzer gesehen wurde. Das Ergebnis wäre 60 Zahlen für jeden Benutzer, von denen die meisten 0 sind.

Es könnte notwendig sein, eine Art Normalisierung in den Zeilen durchzuführen. In Analogie zu dem, was zum Erzeugen von Dokumentenvektoren im Text-Mining getan wird, könnte etwas wie Term-Frequenznormierung auf die Zeile angewendet werden. Für jede Spalte ist möglicherweise auch eine Normalisierung erforderlich.

Von hier aus könnte das Clustering mithilfe des Algorithmus Ihrer Wahl mit Clusternvaliditätsmaßen durchgeführt werden, um die Auswahl der interessantesten Clustering zu erleichtern.

Es ist die Natur von diesem, dass Sie den Prozess iterativ wiederholen müssten, vielleicht die Eingabedaten auf neue Arten darstellend.