如何在sklearn库中使用轮廓系数评分进行k-means聚类?

16

我想在我的脚本中使用轮廓分数,以便从sklearn中自动计算k均值聚类中的簇数。

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聚类。这种方式的代码是正确的,但在我的项目中,我需要自动选择聚类的数量。


1
不幸的是,轮廓度在处理单簇数据集时存在问题。因为这个指标并不适用于单簇问题。如果您的问题仍未解决,可以尝试使用此链接 - mostafa yari
2个回答

30

我假设您将使用轮廓分数来获取最佳聚类数。

首先声明一个独立的KMeans对象,然后像这样在数据df上调用它的fit_predict函数。

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)
    print("For n_clusters = {}, silhouette score is {})".format(n_clusters, score))

请参阅此官方示例以获得更多明确的信息。


0

问号代表你要对其应用K-means的数据集或数据框。

谢谢。

1
目前你的回答写得不清楚。请编辑并添加更多细节,以帮助其他人理解这个问题的解决方法。你可以在帮助中心找到更多关于如何编写好的答案的信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接