【问题标题】:Drawing boundary lines based on kmeans cluster centres基于kmeans聚类中心绘制边界线
【发布时间】:2018-08-27 02:44:32
【问题描述】:

我是 scikit learn 的新手,但想尝试一个有趣的项目。

我有英国点的经度和纬度,我曾经使用 scikit learns 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)

所以我希望能够将上面示例中的中心转换为划分每个区域的线——这可能吗?

谢谢,

蚂蚁

【问题讨论】:

标签: python scikit-learn k-means


【解决方案1】:

您可以使用 Scipi 生成 Voronoi 图。 docs

对于您的代码,它会是

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()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 2021-04-03
      • 2020-01-06
      • 2019-11-20
      • 2020-02-04
      • 2011-07-02
      • 2012-04-02
      • 2011-04-10
      • 2021-10-09
      相关资源
      最近更新 更多