def cos_sim_matrix(matrix):
"""
item-étant donné une matrice de caractéristiques
Fonction pour trouver la matrice de similarité cosinus entre les éléments
"""
d = matrix @ matrix.T # item-Une matrice dont les éléments sont les produits internes de vecteurs
#Chaque élément à mettre dans le dénominateur de la similitude cosinus-Racine carrée de taille vectorielle
norm = (matrix * matrix).sum(axis=1, keepdims=True) ** .5
#Divisez par la racine carrée de la taille de chaque élément (un peu intelligent!)
return d / norm / norm.T
Aimez-vous la matrice de similarité cosinus? J'adore: innocent:.
Surtout quand on essaie d'effectuer un filtrage coopératif, etc., je pense qu'on essaie souvent de le faire.
Malheureusement, quand je le recherche en japonais, je vois souvent comment trouver la similitude cosinus entre deux vecteurs, mais je vois rarement comment trouver la matrice de similarité cosinus qui en est une collection.
Ou cela peut être évident pour ceux qui ont un pouvoir un peu plus engourdi, donc cela peut ne pas être spécifié.
Par conséquent, je vais le laisser ici comme un mémorandum pour moi-même.
Veuillez ne pas y faire référence car c'est un échec: pleurer: Cela prend des dizaines de fois plus de temps que ce qui précède: merde:.
@numba.jit('f8(f8[:],f8[:])', nopython=True)
def _cos_sim(v1, v2):
"""
Renvoie la similitude cosinus de deux vecteurs
"""
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):
"""
Étant donné une matrice d'utilisateurs d'article
Fonction pour trouver la matrice de similarité entre les éléments
"""
n = item_user_matrix.shape[0] # n: item counts
sims = np.identity(n) #La similitude entre les mêmes éléments est de 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
J'ai besoin de plus de puissance ... !! (J'ai besoin de plus de puissance ... !!)
Recommended Posts