基于kmeans聚类中心绘制边界线

3
我对scikit learn很陌生,但想尝试一个有趣的项目。我有英国各个点的经纬度,并使用scikit learn的KMeans类创建了聚类中心。为了可视化这些数据,我不想将点作为聚类,而是想在每个聚类周围绘制边界线。例如,如果一个聚类是伦敦,另一个是牛津,我目前在每个城市的中心点上有一个点,但我想知道是否有一种方法可以使用我的聚类数据来创建基于聚类的边界线?以下是我用于创建聚类的代码:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

location1="XXX"
df = pd.read_csv(location1, encoding = "ISO-8859-1")

#Run kmeans clustering
X = df[['long','lat']].values #~2k locations in the UK
y=df['label'].values   #Label is a 0 or 1
kmeans = KMeans(n_clusters=30, random_state=0).fit(X, y)
centers=kmeans.cluster_centers_
plt.scatter(centers[:,0],centers[:,1], marker='s', s=100)

我希望能够将上述示例中的中心点转换为划分每个区域的线条--这可行吗?

谢谢,

Anant


1
我建议绘制沃罗诺伊图,肯定有适用于Python的库。 - Bunyk
你是在询问空间边界吗?例如-为城市绘制边界,其中心位于哪里(属于)?还是你指的是其他什么? - MaxU - stand with Ukraine
https://datascience.stackexchange.com/questions/53918/is-there-a-way-to-put-a-separate-line-between-clusters-for-k-means-clustering - TYZ
2个回答

2

我猜你在谈论空间边界,如果是这种情况,你应该遵循Bunyk的建议并使用Voronoi图 [1]。以下是一个实际演示,展示了你可以实现的效果:http://nbviewer.jupyter.org/gist/pv/8037100


2
你可以使用Scipy生成Voronoi图。文档 对于你的代码,应该这样写:
from scipy.spatial import Voronoi, voronoi_plot_2d
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

location1="XXX"
df = pd.read_csv(location1, encoding = "ISO-8859-1")

#Run kmeans clustering
X = df[['long','lat']].values #~2k locations in the UK
y=df['label'].values   #Label is a 0 or 1
kmeans = KMeans(n_clusters=30, random_state=0).fit(X, y)
centers=kmeans.cluster_centers_

plt.scatter(centers[:,0],centers[:,1], marker='s', s=100)


vor = Voronoi(centers)
fig = voronoi_plot_2d(vor,plt.gca())

plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接