Как использовать силуэтную оценку в кластеризации k-средних из библиотеки sklearn? - PullRequest
0 голосов
/ 02 июля 2018

Я хотел бы использовать силуэтную оценку в моем скрипте, чтобы автоматически вычислять количество кластеров в кластеризации k-средних из 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)

Кто-то может помочь мне с вопросительными знаками? Я не понимаю, что поставить вместо вопросительных знаков. Я взял код из примера. Часть с комментариями - предыдущая версия e, где я делаю кластеризацию k-средних с фиксированным числом кластеров, равным 4. Код в этом случае корректен, но в моем проекте мне нужно автоматически выбрать количество кластеров.

1 Ответ

0 голосов
/ 03 июля 2018

Я предполагаю, что вы собираетесь набрать максимальное количество баллов, чтобы получить оптимальное число. кластеров.

Сначала объявите отдельный объект KMeans, а затем вызовите его fit_predict функции над вашими данными df, как это

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)

См. этот официальный пример для большей ясности.

...