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.