我已经在这个问题上挣扎了一段时间,始终无法找到一种方法来获取特定聚类中的数据点数量。以下是我目前的进展:
第一段代码输出我的8个聚类中每个聚类的数据点数量:
def CountFrequency(my_list): freq = {} for item in my_list: if (item in freq): freq[item] += 1 else: freq[item] = 1 for key, value in freq.items(): print ("% d : % d"%(key, value)) def clusterCounts(df): df3 = df.fillna(df.mean()) array3 = df3[['column1', 'column2', 'column3']].values kmeans = KMeans(n_clusters=8, random_state=42) kmeans.fit(array3) return CountFrequency(kmeans.labels_)
结果如下:
1 : 26625 6 : 2562 2 : 9892 7 : 2165 3 : 1633 0 : 3072 4 : 1228 5 : 4315 None
(我不确定为什么会有None
,但我认为这是一个小问题)
我的下一段代码输出我的8个聚类的每个聚类的中心点:
def clusters(df): df3 = df.fillna(df.mean()) array3 = df3[['column1', 'column2', 'column3']].values kmeans = KMeans(n_clusters=8, random_state=42) kmeans.fit(array3) kmeans.labels_ clusters = kmeans.cluster_centers_ return clusters
结果如下:
[[49.2 2.4 48.4] [18.9 18.9 62.1] [ 0.2 0.4 99.4] [ 1.1 98.3 0.6] [98.2 1. 0.9] [33.3 32.7 34. ] [27. 1.2 71.7] [ 3.6 51.9 44.5]]
我正在尝试找出如何确定具有[33.3 32.7 34. ]
中心点的聚类中的数据点数量。我如何隔离这个中心点的聚类以获取它包含的数据点数量?作为次要问题,我发布的第一个结果代码段中的键(即每个聚类的数据点数量的那个)是否与上面中心点的顺序一致?我希望这清楚明白,提前感谢!
回答:
你为什么不简单地做以下操作呢?
for i in range(len(kmeans.cluster_centers)): print("Cluster", i) print("Center:", kmeans.cluster_centers_[i]) print("Size:", sum(kmeans.labels_ == i))
因为TRUE将被视为1,而FALSE被视为0。