【问题标题】:Clustering algorithm with upper bound requirement for each cluster size对每个簇大小有上限要求的聚类算法
【发布时间】:2011-09-20 20:58:29
【问题描述】:

我需要将大约 50000 个点划分为不同的集群。有一个要求:每个簇的大小不能超过K。有没有什么聚类算法可以做这个工作?

请注意,每个集群的上限 K 是相同的,例如 100。

【问题讨论】:

    标签: c++ algorithm machine-learning cluster-analysis


    【解决方案1】:

    一种方法是使用hierarchical K-means,但你不断拆分大于K的每个集群,直到它们都更小。

    另一种(在某种意义上相反的方法)是使用hierarchical agglomerative clustering,即自下而上的方法,并再次确保您不会合并集群,如果它们会形成一个大小 > K 的新集群。

    【讨论】:

    • 但是在凝聚聚类中,我们是否必须计算每对点之间的所有距离?时间复杂度太高?
    【解决方案2】:

    大多数聚类算法可用于创建一棵树,其中最低级别只是单个元素 - 要么因为它们自然地通过连接元素对然后连接元素组来“自下而上”地工作,或者因为 - 像 K -意思是,它们可用于重复地将组分成更小的组。

    一旦你有了一棵树,你就可以决定在哪里分割子树以形成大小

    f(tree-node, list_of_clusters)
    {
      cost = infinity;
      if (size of tree below tree-node <= 100)
      {
        cost = cost_function(stuff below tree-node);
      }
      temp_list = new List();
      cost_children = 0;
      for (children of tree_node)
      {
        cost_children += f(child, temp_list);
      }
      if (cost_children < cost)
      {
        list_of_clusters.add_all(temp_list);
        return cost_children;
      }
      list_of_clusters.add(tree_node);
      return cost;
    }
    

    【讨论】:

      【解决方案3】:

      朴素聚类的问题在于,您确实必须计算一个距离矩阵,该矩阵包含 A 与集合中每个其他成员的距离。这取决于您是对总体进行了预处理,还是将集群合并为典型个体,然后再次重新计算距离矩阵。

      【讨论】:

      • 我使用点之间的欧几里得距离。统计显着性是什么意思?
      • 在这种情况下缺乏统计意义意味着你有很多漂亮的图片,但你缺乏任何真正具体的东西。您通常使用聚类来表明存在需要进一步调查的关系。
      • 您还可以使用聚类将观察结果分组,以便您可以逐个研究这些组。如果您要预测的每个观察值都有一个因变量,则可以对其他变量的值进行聚类,而无需向聚类算法显示因变量,然后使用聚类结构来帮助您查找因变量之间的关系和自变量。然后,聚类算法应该与找到的连接的重要性无关。
      猜你喜欢
      • 2018-09-08
      • 2018-10-28
      • 2020-01-31
      • 2012-07-19
      • 2017-06-09
      • 2014-12-06
      • 2011-07-24
      • 2019-04-13
      • 2016-10-03
      相关资源
      最近更新 更多