Clustering ensemble de données à distance par paire
-
16-10-2019 - |
Question
J'ai généré un ensemble de données de distances par paires comme suit:
id_1 id_2 dist_12
id_2 id_3 dist_23
Je veux regrouper ces données afin d'identifier le modèle. J'ai regardé la classification spectrale et dbscan, mais je ne l'ai pas pu arriver à une conclusion et ont été ambiguë sur la façon d'utiliser les implémentations existantes de ces algorithmes. J'ai regardé implémentations Python et Java jusqu'à présent.
Pourriez point quelqu'un me à un tutoriel ou une démonstration sur la façon d'utiliser ces algorithmes de regroupement pour gérer la situation en main?
La solution
Dans la mise en œuvre de la classification spectrale scikit-learn et dbscan vous n'avez pas besoin de précalculer les distances, vous devez saisir les coordonnées échantillons pour tous id_1
... id_n
. Voici une simplification du comparaison exemple documenté d'algorithmes en cluster:
import numpy as np
from sklearn import cluster
from sklearn.preprocessing import StandardScaler
## Prepare the data
X = np.random.rand(1500, 2)
# When reading from a file of the form: `id_n coord_x coord_y`
# you will need this call instead:
# X = np.loadtxt('coords.csv', usecols=(1, 2))
X = StandardScaler().fit_transform(X)
## Instantiate the algorithms
spectral = cluster.SpectralClustering(n_clusters=2,
eigen_solver='arpack',
affinity="nearest_neighbors")
dbscan = cluster.DBSCAN(eps=.2)
## Use the algorithms
spectral_labels = spectral.fit_predict(X)
dbscan_labels = dbscan.fit_predict(X)