[PYTHON] Kosinus-Ähnlichkeitsmatrix? Sie können es sofort mit NumPy bekommen

Fazit

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

Einführung

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.

Die Fehler, die ich bis dahin gemacht habe

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

Schließlich

Ich brauche mehr Kraft ... !! (Ich brauche mehr Kraft ... !!)

Recommended Posts

Kosinus-Ähnlichkeitsmatrix? Sie können es sofort mit NumPy bekommen
Verkettung von Matrizen mit Numpy
Versuchen Sie die Matrixoperation mit NumPy
Es scheint, dass Sie jetzt mit blueqat Torbücher schreiben können
Python | Was Sie mit Python machen können
[Python] Um mit Python zu beginnen, müssen Sie zunächst sicherstellen, dass Sie Python ordnungsgemäß verwenden können.
Was tun, wenn TypeError in min und max von numpy auftritt?
Sie können es mit Python tun! Strukturanalyse zweidimensionaler kolloidaler Kristalle