Invertida listas funcionan muy bien para los datos dispersos. Esto es lo que por ejemplo, utiliza Lucene.
No sé cómo extensible scikit-learn. Un montón de código parece estar escrito en Cython, por lo que es Python-como el código compilado a través de la C. de Este modo, sería más difícil de extender.
ELKI, la herramienta de minería de datos yo estoy contribuyendo mucho, tiene un - aún inédito y de indocumentados, Lucene addon. Esto podría funcionar para usted. Espero que en algún momento también tienen un índice invertido dispersas vectores en ELKI principal (debido a la Lucene dependencia, tengo la intención de mantener este addon separado).
También tenemos (no integrada) código de un prefijo índice de árbol para acelerar la distancia de Levenshtein. Pero esto necesita un poco más de trabajo para su integración, y tal vez algunos perfiles.
La mayoría de las veces, únicamente los índices de trabajo para una determinada distancia. No hay ningún índice general que puede apoyar arbitraria distancias en el mismo tiempo. Existen algunos índices (por ejemplo, M-tree, y iDistance, ambos disponibles en ELKI) que trabajan con diferentes distancias, pero sólo una distancia en un tiempo. Pero lo bien que trabajan para sus datos y la distancia varía mucho. Generalmente, usted necesita un buen numérico contraste en sus similitudes.
La cuestión que hay que preguntarse es: ¿hay una manera de encontrar todos los objetos dentro de un radio de $\varepsilon$ (o una similitud mayor que $\varepsilon$) sin comparar cada objeto a cualquier otro objeto.
Tenga en cuenta que para DBSCAN puede utilizar falso distancias. Las distancias reales no son utilizados; sólo una decisión binaria ($d\leq\varepsilon$). Este es oficializado como GeneralizedDBSCAN. Así que si tu puede implementar una "función de distancia" que devuelve 0 para "similar" y 1 para "no similares", y conectarlo en scikit-learn DBSCAN, usted debería estar bien.
Dependiendo de la arquitectura de scikit-learn, usted tal vez puede conectar un índice personalizado disfrazado de función de distancia. Invertida listas son un buen candidato para datos binarios.