web-dev-qa-db-fra.com

Comment utiliser le score de silhouette dans le clustering k-means de la bibliothèque sklearn?

Je voudrais utiliser le score de silhouette dans mon script, pour calculer automatiquement le nombre de clusters dans le clustering k-means à partir de sklearn.

import numpy as np
import pandas as pd
import csv
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

filename = "CSV_BIG.csv"

# Read the CSV file with the Pandas lib.
path_dir = ".\\"
dataframe = pd.read_csv(path_dir + filename, encoding = "utf-8", sep = ';' ) # "ISO-8859-1")
df = dataframe.copy(deep=True)

#Use silhouette score
range_n_clusters = list (range(2,10))
print ("Number of clusters from 2 to 9: \n", range_n_clusters)

for n_clusters in range_n_clusters:
    clusterer = KMeans (n_clusters=n_clusters).fit(?)
    preds = clusterer.predict(?)
    centers = clusterer.cluster_centers_

    score = silhouette_score (?, preds, metric='euclidean')
    print ("For n_clusters = {}, silhouette score is {})".format(n_clusters, score)

Quelqu'un peut m'aider avec des points d'interrogation? Je ne comprends pas quoi mettre à la place des points d'interrogation. J'ai pris le code d'un exemple. La partie commentée est la version précédente, où je fais un clustering k-means avec un nombre fixe de clusters défini sur 4. Le code de cette manière est correct, mais dans mon projet, je dois choisir automatiquement le nombre de clusters.

7
Jessica Martini

Je suppose que vous allez marquer la silhouette pour obtenir le non optimal. de grappes.

Déclarez d'abord un objet séparé de KMeans puis appelez c'est fit_predict fonctionne sur vos données df comme ceci

for n_clusters in range_n_clusters:
    clusterer = KMeans (n_clusters=n_clusters)
    preds = clusterer.fit_predict(df)
    centers = clusterer.cluster_centers_

    score = silhouette_score (df, preds, metric='euclidean')
    print ("For n_clusters = {}, silhouette score is {})".format(n_clusters, score)

Voir cet exemple officiel pour plus de clarté.

12
Mohammed Kashif