Mis a jour le 2025-04-14, 12:10

Clustering

KMeans : on doit préciser le nombre de clusters. L'algorithme cherche K centroïdes qui vont minimiser l'inertie, en faisant l'hypothèse que les clusters sont convexes et isotropes.
  • Si X est une matrice avec les individus en ligne et les paramètres en colonne :
    import sklearn.cluster
    kmeans = sklearn.cluster.KMeans(n_clusters = 3, random_state = 0)
    kmeans.fit(X)
        
  • kmeans.labels_ : les labels des classes prédites
  • kmeans.predict(X2) : pour faire la prédiction des classes sur une nouvelle matrice (donne les labels prédits)
  • kmeans.transform(X2) : donne pour chaque individus les distances par rapport aux différents centroïdes (matrice nombre d'individus x nombre de clusters).
MiniBatchKMeans : même principe que kmeans, mais sur des petits batchs (de 100 par défaut) :
  • kmeans = sklearn.cluster.MiniBatchKMeans(n_clusters = 3, random_state = 0)
  • un peu moins précis que KMeans, mais beaucoup plus rapide.
Clustering hierarchique :
  • Si X est une matrice avec les individus en ligne et les paramètres en colonne :
    import sklearn.cluster
    hclust = sklearn.cluster.AgglomerativeClustering(n_clusters = 3, affinity = 'euclidean', linkage = 'ward')
    hclust.fit(X)
        
  • affinity : distance à utiliser, qui peut être 'euclidean', 'l1', 'l2', 'manhattan', 'cosine'
  • linkage : 'ward', 'average', 'complete', 'single'.
  • hclust.labels_ : les labels des classes prédites
Gaussian mixture : cherche des clusters sous forme de mélange de modèles gaussien avec un algorithme de EM (Expectation Maximization) :
  • Si X est une matrice avec les individus en ligne et les paramètres en colonne :
    import sklearn.mixture
    gm = sklearn.mixture.GaussianMixture(n_components = 3, random_state =  0)
    gm.fit(X)
        
  • gm.predict(X) : fait la prédiction des labels
  • gm.predict_proba(X) : renvoie une matrice nombre d'individus x nombre de classes de probabilité d'appartenance à chaque classe.
  • gm.aic(X) : renvoie le citère d'information de Akaike : plus il est bas, meilleur est le modèle.
  • gm.bic(X) : renvoie le citère d'information Bayésien : plus il est bas, meilleur est le modèle.
Affinity propagation : pas besoin de préciser le nombre de clusters, par contre, l'algorithme est couteux en temps et en mémoire (n^2) :
  • Si X est une matrice avec les individus en ligne et les paramètres en colonne :
    import sklearn.cluster
    ap = sklearn.cluster.AffinityPropagation(random_state = 0)
    ap.fit(X)
        
  • ap.labels_ : les labels des classes.
  • ap.predict(X2) : pour faire la prédiction sur un nouveau set de données (renvoie les labels)
DBSCAN : pas besoin de préciser le nombre de clusters, par contre, il suppose que la densité des clusters est similaire, et il faut en général chercher le bon paramètre eps qui est critique.
  • Si X est une matrice avec les individus en ligne et les paramètres en colonne :
    import sklearn.cluster
    dbscan = sklearn.cluster.DBSCAN(eps = 0.5, min_samples = 5, metric = 'euclidean')
    dbscan.fit(X)
        
  • il est important d'essayer plusieurs valeurs notamment de eps qui est la distance maximum pour appartenir au même voisinage.
  • min_samples est le nombre minimum d'individus dans le même voisinage pour considérer que l'individu est un "core sample"
  • la distance doit être une des distances de sklearn.metrics.pairwise.PAIRWISE_DISTANCE_FUNCTIONS ou acceptée par scipy.spatial.distance.pdist
Résultats :
  • dbscan.labels_ : les labels des classes. Attention, certains individus peuvent avoir comme label -1, ce qui veut dire qu'ils sont outliers (n'appartiennent à aucun cluster).

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert