sklearn scikit medoids learn example clusterization clustering python cluster-analysis scikit-learn

python - scikit - sklearn clustering comparison



Usar la clase sklearn.cluster.SpectralClustering con parĂ¡metro affinity=''precomputado'' (1)

Tengo problemas para entender un caso de uso específico de la clase sklearn.cluster.SpectralClustering como se describe en la documentación oficial aquí . Supongamos que quiero usar mi propia matriz de afinidad para realizar clustering. Primero crea una instancia de un objeto de clase SpectralClustering siguiente manera:

from sklearn.clustering import SpectralClustering cl = SpectralClustering(n_clusters=5,affinity=''precomputed'')

La documentación para el parámetro de affinity anterior es la siguiente:

afinidad: string, array-like o invocable, predeterminado ''rbf''

Si es una cadena, esta puede ser una de ''vecinos_cercanos'', ''precalculada'', ''rbf'' o uno de los núcleos soportados por sklearn.metrics.pairwise_kernels. Solo deben usarse kernels que producen puntajes de similitud (valores no negativos que aumentan con similitud). Esta propiedad no está marcada por el algoritmo de agrupamiento.

Ahora el objeto cl tiene un método fit para el cual la documentación sobre su único parámetro X es la siguiente:

X: matriz tipo matriz o dispersa, forma (n_muestras, n_features)

O, si la afinidad == precomputed , una matriz de afinidad de forma precomputada (n_samples, n_samples)

Aquí es donde se vuelve confuso. Estoy usando mi propia matriz de afinidad, donde una medida de 0 significa que dos puntos son idénticos, con un número más alto, lo que significa que dos puntos son más diferentes. Sin embargo, las otras opciones para la affinity parámetros toman un conjunto de datos y producen una matriz de similitud , para la cual los valores más altos son indicativos de más similitud, y los valores más bajos indican desemejanza (como el núcleo de base radial).

Entonces, cuando uso el método de fit en mi instancia de SpectralClustering , ¿realmente necesito transformar mi matriz de afinidad en una matriz de similitud antes de pasarla a la llamada al método de fit como el parámetro X ? La misma página de documentación incluye una nota sobre cómo transformar la distancia en similitudes de buen comportamiento, pero no indica explícitamente dónde debe llevarse a cabo este paso, y a través de qué método se llama.


Directamente de los documentos:

Si tiene una matriz de afinidad, como una matriz de distancia, para la cual 0 significa elementos idénticos, y valores altos significa elementos muy diferentes, puede transformarse en una matriz de similitud que sea adecuada para el algoritmo mediante la aplicación de Gauss (RBF, calor) kernel:

np.exp(- X ** 2 / (2. * delta ** 2))

Esto va en su propio código, y el resultado de esto se puede pasar para fit . A los efectos de este algoritmo, afinidad significa similitud, no distancia.