[PYTHON] Berechnung der Ähnlichkeit durch MinHash

Ich habe ein Beispiel für eine Ähnlichkeitsberechnung von MinHash implementiert.

Referenz Schnelle und platzsparende Ähnlichkeitsbeurteilung durch b-Bit Min Hash

Gemäß dem obigen Dokument MurmurHash3 (Python-Wrapper) für die Hash-Berechnung. ) Wurde benutzt.

minhash.py


# -*- coding: utf-8


import mmh3


MIN_HASH_VALUE = 2 ** 128


def min_hash(words, seed):
    min_hash_word = None
    min_hash_value = MIN_HASH_VALUE

    for word in words:
        hash_ = mmh3.hash128(word, seed)
        if hash_ < min_hash_value:
            min_hash_word = word
            min_hash_value = hash_

    return min_hash_word


def get_score(s1, s2, k):
    """Get the similarity between s1 and s2 using min-hash algorithm

    k: the number of hash functions
    """
    num_match = 0

    for seed in xrange(k):
        if min_hash(s1, seed) == min_hash(s2, seed):
            num_match += 1

    return float(num_match) / k


def main():
    s1 = ['a', 'b']
    s2 = ['a']
    s3 = ['b']
    # a-z
    s4 = [chr(ascii) for ascii in xrange(97, 123)]

    k = 2 ** 10

    # Should be ~0.074
    print get_score(s1, s4, k)
    # Should be ~0.370
    print get_score(s2, s4, k)
    # Should be ~0.370
    print get_score(s3, s4, k)


if __name__ == '__main__':
    main()
[yamaneko]$ time python min_hash.py 
0.078125
0.046875
0.03125

real    0m0.112s
user    0m0.076s
sys     0m0.015s

Wenn der Wert von k erhöht wurde, konvergierte der Wert, aber die Berechnungszeit erhöhte sich.

Als nächstes möchte ich b-Bit Min Hash implementieren.

Recommended Posts

Berechnung der Ähnlichkeit durch MinHash
[Python] Berechnung der Bildähnlichkeit (Würfelkoeffizient)
Berechnung der technischen Indikatoren durch TA-Lib und Pandas
Numerische Berechnung von kompressiblem Fluid nach der Methode des endlichen Volumens
Berechnung der Ähnlichkeit zwischen Sätzen mit Word2Vec (vereinfachte Version)
Berechnung der Homographiematrix nach der Methode der kleinsten Quadrate (DLT-Methode)
Visualisierung von Daten nach Präfektur
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
Über die Kostenberechnung von MeCab
Vergleich der Berechnungsgeschwindigkeit durch Implementierung von Python mpmath (willkürliche Genauigkeitsberechnung) (Hinweis)
Visualisierung der von numpy erstellten Matrix
Fehlerfreie Berechnung mit Golangs big.Float
Berechnung der Zeitreihen-Kundenbindung
Fehler geteilt durch 0 Verarbeitung von ZeroDivisionError 2
Erweiterung des Python-Wörterbuchs um Argumente
Berechnung des Normalenvektors mittels Faltung
Fehler geteilt durch 0 Behandlung von ZeroDivisionError
Beurteilung, ob durch Listeneinschlussnotation
Zusammenfassung der grundlegenden Implementierung von PyTorch
Train_test_split des Feature-Betrags, der von dict gehalten wird
Berechnung des Stroms im Gleichstromkreis
Berechnung der Anzahl der Assoziationen von Klamer
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
Liste der von conda installierten Pakete
Darstellung der Regressionslinie durch Restdarstellung
10 Auswahlen der Datenextraktion durch pandas.DataFrame.query
Verhalten von Python3 durch Sakuras Server
Animation von Geodaten durch Geopandas
[Python] Berechnung des Kappa (k) -Koeffizienten
Geschwindigkeitsverbesserung durch Selbstimplementierung von numpy.random.multivariate_normal
Beispiel für das Umschreiben von Code durch ast.NodeTransformer
Berechnung des Spearman-Rangkorrelationskoeffizienten
Geschichte der Potenznäherung von Python
Projekt Euler 9 Aufbewahrung der Berechnungsergebnisse
Ähnlichkeitsberechnung zwischen präzisen Episoden unter Verwendung der Live-Timeline und des Themenmodells
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Steuerungstechnik] Berechnung von Übertragungsfunktionen und Zustandsraummodellen durch Python