Die Berechnung der ähnlichkeit zwischen zwei Listen
Ich würde gerne zur Berechnung der ähnlichkeit zwischen zwei Listen von verschiedenen Längen.
zB:
listA = ['apple', 'orange', 'apple', 'apple', 'banana', 'orange'] # (length = 6)
listB = ['apple', 'orange', 'grapefruit', 'apple'] # (length = 4)
wie Sie sehen können, ein einzelnes Objekt kann mehrere Male angezeigt in einer Liste, und die Längen sind in verschiedenen Größen.
Habe ich mir bereits gedacht vergleicht man die Frequenzen der einzelnen Elemente, aber das umfasst nicht die Größe der einzelnen Liste (eine Liste, die ist einfach zweimal, eine weitere Liste sollte ähnlich sein, aber nicht perfekt ähnlich)
eg2:
listA = ['apple', 'apple', 'orange', 'orange']
listB = ['apple', 'orange']
similarity(listA, listB) # should NOT equal 1
Also habe ich im Grunde wollen umfassen die Größe der Listen und die Verteilung der Elemente in der Liste.
Irgendwelche Ideen?
- Das sind Listen, keine sets.
- Durch
similarity
willst du damit erstellen Sie eine Dritte Liste enthält die Elemente, die in beiden listA und listB? so dass das Ergebnis in deinem Fall wäre['apple', 'orange']
? - durch die ähnlichkeit, die ich meine, einige Messen, wie ähnlich Sie sind. so ein Vergleich 2 identische Sätze (oder Liste) würde geben Ihnen einen score von 1 und 2 komplett unterschiedlichen sets geben würde, ist Sie null. diese Sätze sind allerdings von unterschiedlicher Größe, und enthalten sich wiederholende Elemente
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
Sammlungen.Counter()
vielleicht; diese sind in multi-sets, oder Taschen, in datatype-Sprachgebrauch:Jetzt können Sie vergleichen diese, indem Sie Einträge oder Frequenzen:
Können Sie berechnen, Ihre Kosinus-ähnlichkeit mit:
Gibt:
Je näher an 1, der Wert ist, desto ähnlicher sind die zwei Listen sind.
Die Kosinus-ähnlichkeit ist eine score berechnen zu können. Wenn Sie sich sorgen über die Länge der Liste, können Sie berechnen, andere; wenn Sie halten, dass die Punktzahl zwischen 0,0 und 1,0, wie gut Sie können, multiplizieren Sie die beiden Werte für eine final-score zwischen -1.0 und 1.0).
Zum Beispiel, um relative Längen in Konto, das Sie verwenden könnten:
und dann kombinieren Sie in einer Funktion, die Listen als Eingaben:
Für deine beiden Beispiel zeigt, dass die Ergebnisse in:
Können Sie mischen in anderen Metriken, wie gebraucht.
.most_common(1)
auf beiden) einstellen, etc.Aus theoretischer Sicht : ich empfehle Ihnen, schauen bis Kosinus-ähnlichkeit
http://en.wikipedia.org/wiki/Cosine_similarity
Müssen Sie möglicherweise ändern, passen Sie Ihre Regelung, sondern die Idee der Kosinus-ähnlichkeit ist groß.
Ich glaube was du suchst ist zum zählen der Anzahl der Inversionen in einem array
Die Frage hat Ihre Antwort: Zählen Inversionen in einem array