【问题标题】:Clusters merge threshold集群合并阈值
【发布时间】:2013-01-08 15:51:27
【问题描述】:

我正在使用均值偏移,此过程计算数据集中每个点的收敛位置。我还可以计算两个不同点收敛的坐标之间的欧几里得距离,但我必须给出一个阈值,也就是说,如果(距离

如何找到用作阈值的正确值??
(我可以使用每一个值,并且取决于结果,但我需要最优值)

【问题讨论】:

  • 请在以后谨慎选择您的标签:放置错误的标签很可能会导致您的问题对可能知道如何回答的人不可见。
  • 你有没有想过使用药盒内核:它具有更好的收敛性。
  • 药盒内核?我不知道它是什么...但是我的问题与收敛属性无关,我只需设置适当的阈值即可将点合并到集群中,只是我不知道如何选择最佳值!(是k-means 中 k 的一种选择)
  • 在均值漂移聚类中,每个聚类在诱导密度中表示为不同的“吸引盆地”。如果附近的数据点收敛到密度函数的不同模式,那么你的内核不够平滑:你有太多的本地模式。您需要一个更本地化和更流畅的内核。一个这样的内核是有限支持统一内核(又名药盒内核)。
  • 我有 3d 点,所以,如果一个点收敛到 (11.345,23.896, 87.52) 而另一个点收敛到 (11.789,23.24,87.25),它们不属于同一个集群,问题是我的内核不够平滑?(那么重点必须完全相同,对吗?)很高兴知道...我在哪里可以找到有关此药盒内核的一些示例?

标签: cluster-analysis threshold kernel-density


【解决方案1】:

我已经多次实施均值偏移聚类并遇到了同样的问题。根据您愿意为每个点移动多少次迭代,或者您的终止标准是什么,通常有一些后处理步骤,您必须将移动的点分组到集群中。 理论上转移到相同模式的点不需要实际上直接在彼此之上结束。

我认为最好和最通用的方法是使用基于内核带宽的阈值,如 cmets 中所建议的那样。过去,我执行此后期处理的代码通常如下所示:

threshold = 0.5 * kernel_bandwidth
clusters = []
for p in shifted_points:
    cluster = findExistingClusterWithinThresholdOfPoint(p, clusters, threshold)
    if cluster == null:
        // create new cluster with p as its first point
        newCluster = [p]
        clusters.add(newCluster)
    else:
        // add p to cluster
        cluster.add(p)

对于findExistingClusterWithinThresholdOfPoint 函数,我通常使用p 到每个当前定义的集群的最小距离。

这似乎工作得很好。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2018-05-26
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多