def cos_sim_matrix(matrix):
"""
item-eine Merkmalsmatrix gegeben
Funktion zum Ermitteln der Kosinus-Ähnlichkeitsmatrix zwischen Elementen
"""
d = matrix @ matrix.T # item-Eine Matrix, deren Elemente die inneren Produkte von Vektoren sind
#Jedes Element, das in den Nenner der Kosinusähnlichkeit eingegeben werden soll-Quadratwurzel der Vektorgröße
norm = (matrix * matrix).sum(axis=1, keepdims=True) ** .5
#Teilen Sie durch die Quadratwurzel der Größe jedes Artikels (etwas klug!)
return d / norm / norm.T
Gefällt euch die Cosinus-Ähnlichkeitsmatrix? Ich liebe: unschuldig :.
Besonders wenn versucht wird, eine kooperative Filterung usw. durchzuführen, denke ich, dass oft versucht wird, dies zu erreichen.
Wenn ich es auf Japanisch nachschlage, sehe ich leider oft, wie man die Kosinusähnlichkeit zwischen zwei Vektoren findet, aber ich sehe selten, wie man die Kosinusähnlichkeitsmatrix findet, die eine Sammlung von ihnen ist.
Oder es kann für diejenigen offensichtlich sein, die etwas mehr Kraft haben, so dass es möglicherweise nicht spezifiziert ist.
Deshalb werde ich es hier als Memorandum für mich selbst belassen.
Bitte beziehen Sie sich nicht darauf, da es sich um einen Fehler handelt: cry :. Es dauert Dutzende Male länger als oben: poop :.
@numba.jit('f8(f8[:],f8[:])', nopython=True)
def _cos_sim(v1, v2):
"""
Gibt die Kosinusähnlichkeit zweier Vektoren zurück
"""
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
@numba.jit('f8[:, :](f8[:,:])',nopython=True)
def item_similarities(item_user_matrix):
"""
Gegeben eine Artikelbenutzermatrix
Funktion zum Ermitteln der Ähnlichkeitsmatrix zwischen Elementen
"""
n = item_user_matrix.shape[0] # n: item counts
sims = np.identity(n) #Die Ähnlichkeit zwischen denselben Elementen beträgt 1
for i in range(n):
for j in range(i+1, n):
sim = _cos_sim(item_user_matrix[i], item_user_matrix[j])
sims[i][j] = sim
sims[j][i] = sim
return sims
Ich brauche mehr Kraft ... !! (Ich brauche mehr Kraft ... !!)
Recommended Posts