【问题标题】:Algorithm for identifying non-ambiguous clusters?识别非模糊聚类的算法?
【发布时间】:2014-07-26 11:49:18
【问题描述】:

聚类算法通常考虑到人类可能认为合理的聚类是模棱两可的,并且计算的解决方案应该能够很好地概括和预测。

这就是为什么我对是否只针对我的具体情况使用久经考验的算法犹豫不决的原因——这并不意味着我确信这些算法不起作用或实际上可能是最佳的。我只是想验证一下。

那么我们来看下面的例子。

基本上这些簇是显而易见的,除了明确的例外,因为它们实际上是线性可分的。我指的数据是二维的。集群遵循一个未知分布,具有一个众数并且是独立的。

对于这种特定的集群模式,哪种算法表现良好(速度、稳健性、简单性)?


rotate <- function(xy, deg, cen) {
  xy <- xy - cen
  return(c(
    xy[1] * cos(deg) - xy[2] * sin(deg), 
    xy[2] * cos(deg) + xy[1] * sin(deg)
  ) + cen)
}

G <- expand.grid(1:2,1:2)

S <- list()
N <- 100
for(i in 1:nrow(G)) {
  set <- data.frame(x = rgamma(N,3,2)*0.2 + G[i,1], y=rgamma(N,3,2)*.1 + G[i,2])
  S[[i]] <- t(apply(set,1,rotate,runif(1,0,pi),c(mean(set[,1]),mean(set[,2]))))
}

S <- do.call(rbind, S)

plot(S)

【问题讨论】:

  • O(N^2) 可以接受吗?
  • 并非如此,因为鉴于情况的简单性,这种努力是不合理的。尽管如此,欢迎您分享您的想法并出于学术兴趣
  • 我的想法只是创建一个所有点的连接图,其中边缘表示它们之间的距离。然后应用Kruskal 的MST 算法和Union Find Path 压缩技术得到簇。但这种方法的一个警告是,您应该从一开始就知道集群的数量。
  • 好主意 - 你知道吗 - 只是有一个非常相似的想法,但有一个关键区别,这让我可以大大减少 O。如果可行,将评估并分享它
  • @user1990169 构建最小生成树与单链接层次聚类相同。

标签: algorithm machine-learning cluster-analysis spatial-data


【解决方案1】:

您可以尝试 alpha 形状。它是一个 delaunay 三角剖分,边缘删除超过 alpha。

【讨论】:

  • 你可以试试我的php类最近邻@phpclasses.org。它使用单链接层次集群,即度量树和 voronoi 图。
【解决方案2】:

大多数算法应该像这样简单地处理数据。

还可以查看基于密度的聚类,例如均值偏移、DBSCAN。

但本质上,任何人都应该这样做。获取包含多种算法(例如 ELKI)的工具包,并尝试一些。

【讨论】:

    【解决方案3】:

    对于您提供的图片,标准 k 均值聚类可以快速有效地工作。一般来说,k-means 聚类对于像你这样的图片很有效,除非你的一些聚类是细长的分离椭圆体并且一个椭圆体的中心靠近另一个椭圆体的远点。如果是这种情况,那么您可能最好使用一种聚类思想,该思想贪婪地将彼此最接近的点聚集在一起,然后分层地不断合并附近的点组,直到达到点组之间距离的阈值(或者,如果您提前知道集群的数量,直到您达到所需的集群数量)。

    关于 k-means 聚类的唯一一点是,如果您使用现成的,那么您需要知道您想要拥有多少个聚类。不过有一些方法可以根据数据来选择集群的数量,如果你不知道要选择多少集群,有兴趣的可以上网看看。

    【讨论】:

    • 实际上,您对在一端(而不是中心)具有最高密度区域的椭圆体集群的描述很好地描述了我的部分用例。您能否详细说明一下您想到的“贪婪”聚类算法?
    【解决方案4】:

    我同意基于密度的聚类建议(例如均值偏移)。我假设您的意思是每对集群都是线性可分的?如果您想自动检查任何两个集群是否是线性可分的,看起来您可以计算它们的凸包并检查它们是否相交: Determine whether the two classes are linearly separable (algorithmically in 2D)

    因此,理论上您可以使用不同的内核带宽运行多次均值偏移试验,检查每个集群与其他集群的线性可分性,并跟踪某种类型的集群分数(请参阅此处的评估和评估部分 http://en.wikipedia.org/wiki/Cluster_analysis) .

    尽管您的数据可能看起来“显而易见”,但要想出一个始终产生“显而易见”输出的通用解决方案并非易事,除非您有一些领域知识可以利用。例如,如果您可以将均值偏移内核带宽(您强烈加权的每个点周围的邻域)作为某个域属性的函数,它可能会更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2014-07-02
      • 2010-09-07
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      相关资源
      最近更新 更多