2013-08-25 12 views
5

Ich habe Daten in einer Datei in folgenden Form:wie Ähnlichkeitsmatrix in numpy Python erstellen?

user_id, item_id, rating 
1, abc,5 
1, abcd,3 
2, abc, 3 
2, fgh, 5 

also die Matrix I für über Daten bilden will, ist folgende:

# itemd_ids 
# abc abcd fgh 
[[5, 3, 0] # user_id 1 
[3, 0, 5]] # user_id 2 

wo fehlende Daten durch 0

ersetzt werden

Aber von diesem möchte ich sowohl Benutzer zu Benutzer Ähnlichkeitsmatrix und Artikel zu Artikel Ähnlichkeitsmatrix erstellen?

Wie mache ich das?

Antwort

4

Technisch ist dies kein Programmierproblem, sondern ein mathematisches Problem. Aber ich denke, Sie verwenden die Varianz-Kovarianz-Matrix besser. Oder Korrelationsmatrix, wenn die Skala der Werte sehr unterschiedlich sind, sagen wir, statt mit:

>>> x 
array([[5, 3, 0], 
     [3, 0, 5], 
     [5, 5, 0], 
     [1, 1, 7]]) 

Sie haben:

>>> x 
array([[5, 300, 0], 
     [3, 0, 5], 
     [5, 500, 0], 
     [1, 100, 7]]) 

Um eine Varianz-cov Matrix zu erhalten:

>>> np.cov(x) 
array([[ 6.33333333, -3.16666667, 6.66666667, -8.  ], 
     [ -3.16666667, 6.33333333, -5.83333333, 7.  ], 
     [ 6.66666667, -5.83333333, 8.33333333, -10.  ], 
     [ -8.  , 7.  , -10.  , 12.  ]]) 

Oder die Korrelationsmatrix:

>>> np.corrcoef(x) 
array([[ 1.  , -0.5  , 0.91766294, -0.91766294], 
     [-0.5  , 1.  , -0.80295507, 0.80295507], 
     [ 0.91766294, -0.80295507, 1.  , -1.  ], 
     [-0.91766294, 0.80295507, -1.  , 1.  ]]) 

Dies ist der Weg, um es zu betrachten, die diagonale Zelle, dh (0,0) Zelle, ist die Korrelation von Ihrem ersten Vektor in X zu ihm selbst, also ist es 1. Die anderen Zellen, dh (0,1) Zelle, ist die Korrelation zwischen der 1. und 2. Vektor in X. Sie sind negativ korreliert. Oder ähnlich sind die 1. und 3. Zelle positiv korreliert.

Kovarianzmatrix oder Korrelationsmatrix vermeiden Sie das Nullproblem, das von @Akavall aufgezeigt wird.

+1

Ich denke, Kovarianz Ansatz ist besser als meine Lösung. – Akavall