如何绘制一维 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 均值集群的主要内容,如果未能解决你的问题,请参考以下文章