我对scikit学习很新,但想尝试一个有趣的项目。
我在英国拥有经度和纬度,我曾经使用scikit创建集群中心学习KMeans课程。为了可视化这些数据,而不是将点作为聚类,我想改为在每个聚类周围绘制边界。例如,如果一个集群是伦敦和另一个集群,我目前在每个城市的中心有一个点,但我想知道是否有办法使用这些数据来创建基于我的集群的边界线?/ p>
以下是我创建群集的代码:
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
答案 0 :(得分:0)
我猜你在谈论空间边界,在这种情况下你应该遵循Bunyk的建议并使用Voronoi图[1]。以下是您可以实现的实际演示:http://nbviewer.jupyter.org/gist/pv/8037100。
答案 1 :(得分:0)
您可以使用 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()