对这些数据进行聚类的最佳算法是啥
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? 我的数据.. 它的方式比这更复杂.. 但我认为现在我已经管理了一些东西.. 谢谢以上是关于对这些数据进行聚类的最佳算法是啥的主要内容,如果未能解决你的问题,请参考以下文章