【问题标题】:How to cluster multivariate angular data? Distance measures and algorithms如何对多元角度数据进行聚类?距离测量和算法
【发布时间】:2014-10-19 21:51:59
【问题描述】:

我想对一组多维向量 (n > 10) 进行聚类,其中每个属性都是一个角度。我可以使用哪些距离度量和算法?

我想到了:
- 曼哈顿距离
- 获取属性对之间的最大/最小距离 (http://www.ncbi.nlm.nih.gov/pubmed/9390236)
- 对所有属性对之间的角距离求和

在距离度量方面,欧几里得距离似乎非常自然和直观,即使对于位于多维空间中的对象也是如此。但是,我没有找到某种角度的等价物。

和算法:
- 亲和力传播
- 数据库扫描
- 一般而言,scikit-learn 算法,K-Means 除外。 (http://scikit-learn.org/stable/modules/clustering.html#clustering)

这里有一些例子: ['179.5', '58.8', '78.2', '211.8', '295.6', '194.9', '9.3', '328.3', '40.9', '323.1', '17.2']
['171.4', '74.9', '81.5', '204.4', '284.1', '193.8', '2.1', '326.7', '49.3', '310.4', '30.5']
['64.2', '119.8', '147.2', '213.0', '167.4', '256.4', '349.4', '28.3', '325.6', '29.6', '348.0']
顺便说一下,这些数字是二面角。

【问题讨论】:

  • 请提供一些示例数据...这几乎不可能说什么会起作用。
  • 这不是我所说的样本数据...我的意思是允许我尝试一些聚类算法和不同距离测量的数据。这只是 3 个数据点。
  • 如果您尝试对特定领域的信息进行聚类,那么探索该领域的其他人是如何做到这一点的也是有意义的。从你提到的“二面角”中,我用谷歌搜索并猜测你可能对聚集分子感兴趣。这让我找到了这个发现:chemcomp.com/journal/cluster.htm 我敢肯定还有更多关于有机化学分子聚类的出版物。

标签: python scikit-learn cluster-analysis distance


【解决方案1】:

如果您打算使用 k-means,您必须真正将数据映射到欧几里得空间,即每个角度的 sin(angle), cos(angle)。原因是,否则,mean 函数没有意义:角度 -179+179 的平均值应该是 -180(或 +180),但是当天真地完成时,意思是0,正好相反!

如果您尝试其他算法,例如 HAC、PAM、CLARA、DBSCAN、OPTICS 等,那么您可以定义一个自定义距离函数来处理 360° 环绕。例如,您可以使用

min(abs(x-y), 360-abs(x-y))

然后计算它们的总和,或平方和。

但是这种方法不适用于 k-means!

【讨论】:

【解决方案2】:

考虑将角度映射到单位圆。即使两个角度是-pi和pi,这样距离也很近。这意味着每个向量都从 n 维变为 (2n) 维。

然后,我会尝试所有正常的距离测量。

【讨论】:

猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 2014-06-18
  • 2011-04-18
  • 2019-03-14
  • 2021-03-16
  • 2014-07-24
  • 1970-01-01
  • 2016-07-07
相关资源
最近更新 更多