Tengo lo siguiente dado:
un conjunto de datos en el rango de miles
una forma de calcular la similitud, pero los puntos de datos en sí mismos no puedo trazarlos en el espacio euclidiano
Sé que DBSCAN debería admitir la métrica de distancia personalizada, pero no sé cómo usarlo.
decir que tengo una función
def similarity(x,y): return similarity ...
y tengo una lista de datos que se pueden pasar por pares a esa función, ¿cómo especifico esto cuando uso la implementación DBSCAN de scikit-learn?
Idealmente, lo que quiero hacer es obtener una lista de los clústeres, pero no sé cómo empezar en primer lugar.
Hay mucha terminología que todavía me confunde:
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html
¿Cómo paso una matriz de características y qué es? ¿Cómo adapto esta implementación a mis necesidades? ¿Cómo podré obtener mis "sublistas" de este algoritmo?
Una "matriz de características" es simplemente una matriz de las características de un punto de datos en su conjunto de datos.
la metric
es el parámetro que está buscando. Puede ser una cadena (el nombre de una métrica integrada) o un . Su función de similarity
es invocable. Esto no está bien descrito en la documentación, pero una métrica tiene que hacer exactamente eso, tomar dos puntos de datos como parámetros y devolver un número.
def similarity(x, y): return ... reduced_dataset = sklearn.cluster.DBSCAN(metric=similarity).fit(dataset)
En caso de que alguien esté buscando lo mismo para cadenas con una métrica personalizada
def metric(x, y): return yourDistFunc(string_seqs[int(x[0])],string_seqs[int(y[0])]) def clusterPockets(): global string_seqs string_seqs = load_data() #["foo","bar"...] dat = np.arange(len(string_seqs)).reshape(-1, 1) clustered_dataset = DBSCAN(metric=metric)).fit(X=dat, y=dat)