问题描述
我有一个二维点的数据库,我想将它们聚集成矩形簇,如下图所示。
我想最小化簇表面的总和,不要有太多簇。
你知道任何相关的python实现吗?
解决方法
所以我找到了解决方案:具有切比雪夫距离的 kmeans 聚类效果很好。
您可以在下面找到一个实现,使用 2d pandas 数据框 df
from scipy.cluster.hierarchy import fclusterdata
n_clusters = 10 #To choose (elbow method,...)
def chebychev_dist(v1,v2):
return max([abs(v1[i]-v2[i]) for i in range(len(v1))])
cluster_data = fclusterdata(df,t=n_clusters,criterion='maxclust',metric=chebychev_dist)
df['c'] = cluster_data
plt.scatter(df['x'],df['y'],c=df['c'],s=50,cmap='viridis')