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.
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é.