[PYTHON] Matrice de similarité cosinus? Vous pouvez l'obtenir tout de suite avec NumPy

Conclusion

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

introduction

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.

Les erreurs que j'ai faites alors

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

finalement

J'ai besoin de plus de puissance ... !! (J'ai besoin de plus de puissance ... !!)

Recommended Posts

Matrice de similarité cosinus? Vous pouvez l'obtenir tout de suite avec NumPy
Concaténation de matrices avec Numpy
Essayez l'opération matricielle avec NumPy
Il semble que vous puissiez maintenant écrire des livres de portail avec blueqat
Python | Ce que vous pouvez faire avec Python
[Python] Pour démarrer avec Python, vous devez d'abord vous assurer que vous pouvez utiliser Python correctement.
Que faire lorsque TypeError se produit au minimum et au maximum de numpy
Vous pouvez le faire avec Python! Analyse structurale de cristaux colloïdaux bidimensionnels