如何绘制一维 K 均值集群

Posted

技术标签:

【中文标题】如何绘制一维 K 均值集群【英文标题】:How to plot a 1D K-means cluster 【发布时间】:2021-12-13 15:03:44 【问题描述】:

我有一个向量 (X2),我想研究它们可以形成的组。 我已经执行了 K-means 分析,其中包含 2 个集群: 形状 X2 = (19,1)

kmeans = KMeans(n_clusters=2,random_state=123)                 
kmeans.fit(X2)                                                
label = kmeans.fit_predict(X2)
 
print(label)
[0 0 1 0 1 1 0 1 1 0 0 1 0 1 1 0 0 1 0]

现在我想制作这两个集群的散点图。 有人可以帮我完成剧情吗?

我不确定如何将标签与我的向量 (X2) 以及在 x 轴和 y 轴中放置什么相关联。

我想要这样的东西:

但我不知道如何组织情节,因为标签不是 x 轴。我现在是 y 轴 (X2),缺少的是 x 轴以及如何将标签与颜色关联到 X2

【问题讨论】:

【参考方案1】:

您可以将 x 点绘制为索引,将 y 点绘制为实际值 (X2)。如果我们想要关联颜色,可以使用 matplotlib 的 scatter 方法的 'c' 关键字。

举个例子:

plt.scatter([i for i in range(len(X2))], X2, c=labels)

color(c) = labels,将分散具有相同颜色的相同对应标签的索引。您还可以使用 c="red" 使每个点都变成红色。

【讨论】:

第一个参数与更简单的range(len(X2))相同。 @JenifferBarreto 我不知道在一维数组的情况下该怎么做。我建议将X2 拆分为多个数组,其中每个新数组包含X2 的元素,这些元素与labels 中的相应集群ID 相关联。这是一个非常重要的练习——我相信您会希望保留原始X2 中每个元素的绘制“x”索引,否则绘图将不像您预期​​的那样。 @JenifferBarreto,不客气!而且我不确定但搜索了一下,你可以为每个集群标签指定特定的颜色,所以它可以是 ['red','red', 'blue','blue'] ,因为你知道哪个标签是哪个颜色,使用图例会更容易。 @JenifferBarreto:实际上,有一个简单的方法:将散点图调用分配给某物,例如artist。然后尝试以下操作:plt.legend(artist.legend_elements()[0], ['c_0', 'c_1']) 其中列表中的字符串是您想要的图例标签。对于默认标签,只需执行 plt.legend(*artist.legend_elements()) 即可。注意那里的* 更多自定义选项见matplotlib.org/stable/gallery/lines_bars_and_markers/…【参考方案2】:

您显示的绘图是 3 维图形、空间 X (x,y) 和类。

如果我理解您的问题,您正在对一维样本进行聚类。您不需要 3 维图,而是需要 2 维。可以忘记图形的颜色,用 y 轴来表示类 (-1,1)。

如果需要,您可以通过添加假维度 (y=0) 并将 matplotlib 的颜色参数与预测的类一起使用来将它们投影到二维空间。

【讨论】:

以上是关于如何绘制一维 K 均值集群的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ruby 进行一维 k 均值聚类?

如何获得一维数据的k均值聚类?

Python DBSCAN - 如何根据向量的平均值绘制集群?

我如何从熊猫绘制 k 均值聚类?

如何在python中绘制重叠簇

无法为一维数据绘制 K-Means 聚类