【问题标题】:Clustering : No single point clusters聚类:没有单点聚类
【发布时间】:2014-08-27 04:05:57
【问题描述】:

我有需要聚类的 4 维数据,以便为每个聚类构建最小体积边界椭球。我不想有单点集群,或者至少,尽可能少的单点集群,因为我们不能用单点建立一个椭圆形置信区域。在我的问题中,没有预先给出集群的数量。所以我使用 Scikit-learn 的 Affinity Propagation - http://scikit-learn.org/stable/modules/clustering.html#affinity-propagation 来估计聚类的数量并从数据中执行聚类。但是这种方法给了我这么多单点集群。您能否就如何解决此问题提供见解?

P.S:为了给您更多信息,我正在研究用于贝叶斯证据计算的椭圆嵌套采样。

【问题讨论】:

  • 也许先去除异常值?
  • 删除异常值肯定会有所帮助。您甚至可能要考虑使用高斯混合模型。分量高斯的个数可以根据AIC或BIC准则来选择。

标签: scipy cluster-analysis data-mining scikit-learn mcmc


【解决方案1】:

我不知道你是否坚持Affinity Propagation,但是使用DBSCAN,你可以通过算法参数eps和minPts达到你想要的。

更大的 eps 意味着可以检测到密度较小的集群,并且附近的集群也会被合并。

更大的 minPts 意味着您会将更多数据标记为噪声。

【讨论】:

    【解决方案2】:

    Affinity Propagation 没有椭球的概念,所以我不确定它是否符合您的要求。

    MultiNest 使用 X 均值聚类的变体解决了这个问题。基本上,您首先制作一个覆盖所有点的包裹椭球。然后,您确定最重要的轴,并在每一端放置两个 k-means 椭球,然后将它们收敛。现在您可以决定两个椭球体使用的体积是否比单个椭球体少得多。然后递归地重复该过程。 Nestle 是一个开源实现,代码非常清晰:https://github.com/kbarbary/nestle/

    或者,您也可以在每个点周围放置一个椭球,并使用 K 折叠或自举法确定半径。 这就是 MLFriends 使用的;实现、解释和动画在:https://johannesbuchner.github.io/UltraNest/method.html 这里可以先使用样本协方差来选择椭球协方差,当检测到聚类时,可以将它们同心并确定一个共同的样本协方差。 为了确定半径,您省略了一些测试点,并确保训练点周围的椭球足够大以恢复测试点。 这是相当稳定且无参数的。

    DBSCAN 也可能很有趣。但是,最终您需要硬而不是模糊的建议曲面来进行嵌套采样。

    【讨论】:

      猜你喜欢
      • 2014-07-02
      • 2018-09-05
      • 1970-01-01
      • 2015-11-20
      • 2021-02-17
      • 2015-02-14
      • 2018-01-18
      • 2015-03-10
      • 2018-04-03
      相关资源
      最近更新 更多