Ich habe versucht, DBSCAN-Algorithmus von Scikit-lernen-Bibliothek mit Cosinus-Metrik verwenden, aber war mit dem Fehler stecken. Die Codezeile istDBSCAN Fehler mit Cosinus-Metrik in Python
db = DBSCAN(eps=1, min_samples=2, metric='cosine').fit(X)
wo X
a csr_matrix
ist. Der Fehler ist der folgende:
Metric ‚Cosinus‘ nicht gültig für Algorithmus ‚auto‘,
obwohl die Dokumentation sagt, dass es möglich ist, diese Metrik zu verwenden. Ich habe versucht, Option algorithm='kd_tree'
und 'ball_tree'
zu verwenden, aber das gleiche erhalten. Jedoch gibt es keinen Fehler, wenn ich euclidean
oder, sagen wir, l1
Metrik verwende.
Die Matrix X
ist groß, daher kann ich keine vorberechnete Matrix paarweiser Abstände verwenden.
Ich verwende python 2.7.6
und scikit-learn 0.16.1
. Mein Datensatz enthält keine vollständige Reihe von Nullen, daher ist die Kosinusmetrik gut definiert.
Dies ist wohl ein Fehler in Sklearn, ehrlich gesagt. Kosinusähnlichkeit ist keine Metrik. Es folgt nicht der Dreiecksungleichheit, weshalb es bei einem KDTree nicht funktionieren wird und Sie keine andere Wahl haben, als es brutal zu erzwingen. All dies wirft die Frage auf, warum, wenn Sie den Algorithmus auf "auto" setzen, versucht, eine Methode zu verwenden, von der sie wissen sollte, dass sie sie nicht verwenden kann. –
@AdamAcosta: Wenn ich richtig verstehe, argumentieren Sie, dass das '' auto''algorithmus'-Schlüsselwort '' brute'' verwenden sollte anstatt mit '' ball_tree'' zu versuchen und zu scheitern? (Ich würde zustimmen.) –