【问题标题】:How to cluster values based on their frequency of occurrence?如何根据出现的频率对值进行聚类?
【发布时间】:2017-08-14 08:08:52
【问题描述】:

我正在研究一种聚类算法,我需要根据它们在数据中的频率对值进行聚类。这将指示哪些值不重要,并将被视为比单个实体更大的集群的一部分。

我是数据科学的新手,想知道实现这一目标的最佳算法/方法。

例如,我有以下数据集。第一列是属性值,第二列表示它们的出现频率。

Value = [1, 1.5, 2, 3, 4, 6, 8, 16, 32, 128]
Frequency = [207, 19, 169, 92, 36, 7, 12, 5, 2, 2]

Here, Frequency[i] corresponds to Value[i]

频率可以被认为是一个值的重要性。表示值重要性的另一件事是数组中元素之间的距离。例如,与 32 或 128 相比,1.5 并没有那么重要,因为它具有更接近的元素,例如 1 和 2。

在对这些值进行聚类时,我需要查看值之间的距离以及它们出现的频率。上述问题的可能输出是

Clust_value = [(1, 1.5), 2, 3, 4, (6, 8), 16, (32, 128)]

这不是最好的集群,而是一种可能的答案。我需要知道解决这个问题的最佳算法。

首先,我尝试在不考虑值数组中元素分布的情况下解决这个问题,但在某些情况下给出了错误的答案。我们再次尝试使用均值和中位数对值进行聚类,但没有成功。

我们尝试比较邻居的频率,然后将这些值合并到一个集群中。我们还尝试找到 values 数组元素之间的最小距离,然后如果它们的差异大于阈值,则将它们放入一个集群中,但如果它们的频率较低,则无法将值集群。我也在网上寻找了聚类算法,但没有得到任何与上面定义的问题相关的有用资源。

有没有更好的方法来解决这个问题?

【问题讨论】:

  • This is not the best cluster but one possible answer. - 问题似乎没有得到很好的定义。例如。为什么在这里聚类 32, 128 但单独留下 16 比例如更好聚类 16 和 32? - that gave wrong answers - 你如何准确地确定什么是对还是错?对于仅基于频率的聚类,我可能会建议使用 Shannon-Fano 或 Huffman 编码。
  • @500-InternalServerError 我无法正确解决问题。问题是来自值数组的集群取决于两件事 - 它们的频率和节点之间的距离。 32、128组成的簇基本构成频率为4的簇。如果它与 16 结合,则集群频率将为 7,而 128 将为 2。因此,为了在集群中实现可比频率,32 与 128 而不是 16 配对,但是 32 比 128 更接近 16。希望我足够清楚现在!

标签: algorithm statistics cluster-analysis frequency similarity


【解决方案1】:

您需要提出一些数学质量标准,以确定一种解决方案优于另一种解决方案的原因。除非您有数千个数字,否则您可以负担得起一种相当“蛮力”的方法:从第一个数字开始,只要您的质量提高就添加下一个数字,否则开始一个新的集群。因为您的数据是排序的,这将是相当有效的,并且会找到一个相当好的解决方案(您可以尝试额外的拆分以进一步提高质量)。

所以这一切都归结为需要指定质量。

不要假设现有标准(例如 k-means 的方差)适合您。最多,您可能能够找到一种数据转换,使您的需求变成差异,但这也将针对您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2011-09-04
    • 2019-11-23
    • 2012-11-28
    • 2019-03-19
    • 2017-06-29
    • 2014-07-19
    相关资源
    最近更新 更多