【发布时间】:2020-09-25 23:04:16
【问题描述】:
我正在做 KMeans 聚类,我也事先进行主成分分析。我正在尝试寻找不错的可用集群。为此,我想自动查看聚类数 k 的哪个值可以为每个 p 提供最佳轮廓分数。
在我的双 for 循环中,我在第一个 for 循环中应用带有多个主成分的 PCA,然后在第二个嵌套 for 循环中应用多个 k。最终,我想要一个字典,显示 k 的数量和每个 p 的轮廓分数。这是我目前的功能:
def optimal_clust(df_scaled, minPCA, maxPCA, minClust, maxClust):
p = 'Number of PCs'
k = 'Number of k'
silhouette = 'Silhouette score'
clustdict = {p :[k, silhouette]}
for p in range(minPCA, maxPCA):
pca = PCA(n_components = p)
df_pca = pca.fit_transform(df_scaled)
for k in range(minClust, maxClust+1):
kmeans_labels = KMeans(n_clusters = k, random_state = 0).fit_predict(df_pca)
silhouette = silhouette_score(df_pca, kmeans_labels)
clustdict[p] = []
clustdict[p].append([k, silhouette])
return clustdict
print(optimal_clust(df_scaled, minPCA, maxPCA, minClust, maxClust))
这只是给我一个字典,每个 p 的 maxClust+1 的值,即 5。输出如下:
{'Number of PCs': ['Number of k', 'Silhouette score'], 1: [[5, 0.5242417773868049]], 2: [[5, 0.3274181367447551]], 3: [[5, 0.267904945833515]], 4: [[5, 0.22204357317276344]], 5: [[5, 0.1917496386757678]], 6: [[5, 0.16193197736304277]], 7: [[5, 0.14803935348320568]]}
我怎样才能解决这个问题,以便在字典中给出完整的结果?当我选择打印它而不是将其存储在字典中时,它确实给了我一切。谢谢。
【问题讨论】:
-
你确定 maxPCA 大于 2 吗?
-
@Vincenzo Lavorini 是的,它设置为我用于分析的数据框的列数。
标签: python machine-learning k-means pca