在地图上的聚类位置,每个聚类有相同数量的点。

问题描述 投票:0回答:1

我在地图上有一些特定的点,我需要将它们归为大小相同的不同群组,最后一个群组可以是 count %n. 我看了这些答案 1, 23 但它没有帮助。我试过不同的方法,但都不奏效。在这段代码中,我将 n_clusters=4 因为这是一个集群的最佳数量,我可以对它们进行排序,并采取了。n 最好的点从排序的点,然后我将通过所有的点。例如,我需要的是 32 图中所示的点要集聚到一起。4 簇,每个簇都有 8 分数enter image description here

dfcluster = DataFrame(position, columns=['x', 'y'])
kmeans = KMeans(n_clusters=4).fit(dfcluster)
centroids = kmeans.cluster_centers_

# plt.scatter(dfcluster['x'], dfcluster['y'], c=kmeans.labels_.astype(float), s=50, alpha=0.5)
# plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=50)
# plt.show()
dfcluster['cluster'] = kmeans.labels_
dfcluster=dfcluster.drop_duplicates(['x', 'y'], keep='last')
dfcluster = dfcluster.sort_values(['cluster', 'x', 'y'], ascending=True)
# d=pd.DataFrame()
# m = pd.DataFrame()
# n=8
# for x in range(4) :
#     m= dfcluster[dfcluster.cluster == x]
#
#
#     if len(m) > int( n /2)-1:
#         m=m.head(int(n/2)-1)
#         # for idx, row in m.iterrows():
#         #     print("code3 group",  "=", row['cluster'])
#         d=d.append(m,ignore_index = True)
#
#     else :
#         d=d.append(m,ignore_index = True)
#
#
# if len(d)>=n:
#     dfcluster = d
# dfcluster.groupby('cluster').nth(n))
dfcluster=dfcluster.head(n)
i=0
if (len(dfcluster )< n):
   change_df()
python python-3.x k-means
1个回答
-1
投票

聚类本身会决定每个聚类需要哪种数量的数据点。

如果你想根据距离的远近,将数据分成4个同样大的组,那么你应该确定4个点,这4个点是相距最远的,然后在这些数据点上迭代添加最近的邻居,以防这些数据点还不在一个簇中。不过我不指望这样做会好看。

© www.soinside.com 2019 - 2024. All rights reserved.