スクリプトでシルエットスコアを使用して、sklearnからk-meansクラスタリングのクラスター数を自動的に計算したいと思います。
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)
誰かが疑問符で私を助けることができますか?疑問符の代わりに何を置くべきかわかりません。例からコードを取得しました。コメントされた部分は以前のバージョンで、固定数のクラスターを4に設定してk-meansクラスタリングを行います。この方法のコードは正しいですが、プロジェクトではクラスターの数を自動的に選択する必要があります。
私はあなたが最適なノーを得るためにシルエットスコアに行くと仮定しています。クラスターの。
最初に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)
より明確にするために この公式の例 を参照してください。