Stavo cercando di utilizzare l'algoritmo DBSCAN dalla libreria scikit-learn con la metrica coseno, ma sono rimasto bloccato con l'errore. La riga di codice èErrore DBSCAN con metrica coseno in python
db = DBSCAN(eps=1, min_samples=2, metric='cosine').fit(X)
dove X
è un csr_matrix
. L'errore è la seguente:
Metric 'cosine' non è valida per l'algoritmo 'auto',
se la documentazione dice che è possibile utilizzare questa metrica. Ho provato a utilizzare l'opzione algorithm='kd_tree'
e 'ball_tree'
ma ho ottenuto lo stesso. Tuttavia, non vi è alcun errore se utilizzo la misura euclidean
o, ad esempio, l1
.
La matrice X
è grande, quindi non è possibile utilizzare una matrice pre-elaborata di distanze a coppie.
Io uso python 2.7.6
e scikit-learn 0.16.1
. Il mio set di dati non ha una riga completa di zeri, quindi la metrica coseno è ben definita.
Questo è probabilmente un bug in sklearn, francamente. La somiglianza del coseno non è una metrica. Non obbedisce alla disuguaglianza triangolare, ed è per questo che non funzionerà con un KDTree e non hai altra scelta se non quella di forzarlo. Tutto ciò solleva la questione del perché quando si imposta l'algoritmo su "auto", si tenta di utilizzare un metodo che dovrebbe sapere che non può utilizzare. –
@AdamAcosta: Se ho capito bene, stai sostenendo che la parola chiave '' auto'' 'algorithm' dovrebbe usare' 'brute'' piuttosto che provare e fallire usando '' ball_tree''? (Sono d'accordo.) –