对这些数据进行聚类的最佳算法是啥

Posted

技术标签:

【中文标题】对这些数据进行聚类的最佳算法是啥【英文标题】:what is the best algorithm to cluster this data对这些数据进行聚类的最佳算法是什么 【发布时间】:2020-02-17 09:43:09 【问题描述】:

谁能帮我找到一个很好的聚类算法,将它聚类成 3 个聚类而不定义聚类的数量。

我已经尝试了许多基本形式的算法.. 似乎没有什么能正常工作。

clustering = AgglomerativeClustering().fit(temp)

同样,我也尝试了 dbscan 和 kmeans.. 只是使用了 sklean 的指南。我无法得到预期的结果。

我的原始数据集是一维数字列表。但数字的顺序很重要,因此生成了一个二维列表,如下所示。

temp = []
for i in range(len(avgs)):
    temp.append([avgs[i], i+1])
clustering = AgglomerativeClustering().fit(temp)

在绘制导航时,我使用了更相似的范围作为 y 轴

ax2.scatter(range(len(plots[i])), plots[i], c=np.random.rand(3,))

数据的顺序很重要,所以需要聚类成3个。可能还有其他一些数据集数据很好,所以结果需要只有一个聚类。

Link to the list if someone want to try

所以我尝试使用步数检测并根据您的回答得到以下图像。但是我怎样才能找到峰值的值..如果我得到最大值,我可以得到其中一个..但是如何得到其余的..第二个最大值不是答案,因为旁边的那个max 是第二个最大值

【问题讨论】:

你为什么要在没有评论的情况下关闭?? 问题是您希望如何对数据进行聚类。您将数据绘制为 2D 并说您想要 3 个集群。另一方面,您说您的数据本质上只是一维的,而第二维没有任何意义。那么,您想将数据聚集成一维还是二维?它看起来像 2D,但也似乎没有意义,因为您的数据只是 1D 并且图中明显的集群结构仅来自您添加 x = range(len(data)) 的事实。您也可以使用x = np.zeros(len(data)),情况会大不相同。 那么您可以将数据视为 2D,然后 range(len(data)) 将生成数据的顺序,这很重要.. 所以现在编辑问题 @a_guest 现在有什么问题吗? 2D 聚类在这里不是正确的方法。您有一个要分段的时间序列。看看步数检测。 【参考方案1】:

您的数据不是二维坐标。所以不要选择为此设计的算法!

相反,您的数据似乎是连续的或时间序列的。

您要使用的是变化点检测算法,能够检测系列平均值的变化。

一种简单的方法是计算接下来 10 个点的总和减去前 10 个点的总和,然后寻找这条曲线的极值。

【讨论】:

感谢您的回答.. 我确实设法计算出您所说的内容和情节.. 但我似乎无法弄清楚如何找到两个(可以是任何数字)峰值。那个情节的 局部最大值(附近没有更大的值)并且大于 100? 我的数据.. 它的方式比这更复杂.. 但我认为现在我已经管理了一些东西.. 谢谢

以上是关于对这些数据进行聚类的最佳算法是啥的主要内容,如果未能解决你的问题,请参考以下文章

带有 PCA 分解的 k-means 聚类的质心是啥?

聚类算法---引言

聊聊聚类算法

数据分析 第六篇:聚类的评估(簇数确定和轮廓系数)和可视化

凝聚型层次聚类算法对数据集进行分类时,如何对合并的新簇计算簇间距离?

使用 python scikit-learn 执行无监督文本分类(聚类)的最佳算法是啥?