python中矩形簇的聚类

问题描述

我有一个二维点的数据库,我想将它们聚集成矩形簇,如下图所示。

我想最小化簇表面的总和,不要有太多簇。

你知道任何相关的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')