10

我有一个想要聚类的大型数据集。我的试运行集大小是 2,500 个对象;当我在“真正的交易”上运行它时,我将需要处理至少 20k 个对象。

这些对象之间具有余弦相似性。这种余弦相似度不满足作为数学距离度量的要求;它不满足三角不等式。

我想以某种“自然”的方式对它们进行聚类,将相似的对象放在一起,而无需事先指定我期望的聚类数量。

有谁知道可以做到这一点的算法?真的,我只是在寻找不需要 a) 距离度量和 b) 预先指定数量的集群的任何算法。

非常感谢!

这个问题之前在这里被问过: Clustering from the cosinesimilarity values (但这个解决方案只提供 K-means 聚类),在这里: Effective clustering of asimilarity matrix (但这个解决方案相当模糊)

4

3 回答 3

3

Apache mahout 有许多聚类算法,包括一些不需要您指定 N 并且允许您指定距离度量的算法。

均值偏移聚类类似于 k-means,但没有预先指定数量的聚类https://cwiki.apache.org/confluence/display/MAHOUT/Mean+Shift+Clustering

然后更一般地说,如果您想尝试各种算法,有绝对丰富的可用于 R 的复杂包(包括一些 EM 的变分贝叶斯实现,它们将选择最佳数量的集群)已被证明非常有用我过去的一些研究:http: //cran.r-project.org/web/views/Cluster.html

于 2012-06-22T05:31:28.607 回答
2

您也可以尝试 Affinity Propagation (http://www.psi.toronto.edu/index.php?q=affinity%20propagation)。该算法以相似度矩阵作为输入,并且我相信它还可以自动调整聚类质心的数量。

于 2012-06-23T19:53:07.233 回答
2

实际上,大多数需要“距离函数”的算法并不要求它是度量的。

DBSCAN 可以被概括(参见维基百科)到一个甚至从远处抽象出来的版本,它只需要有某种“密集”的概念。(DBSCAN 也不需要事先知道簇的数量)

但即使对于 k-means——它对距离有相当严格的要求,甚至超出了度量——也有一种称为球形 k-means 的变体。

无论如何,在数据库上下文中,“度量”的全部要求都是空想的。在任何现实世界的数据中,可能有两条坐标相同的记录,所以最多你会有一个伪度量。三角不等式主要用于优化(例如,通过使用具有严格三角不等式要求的 M-tree 索引)或利用此属性的加速 k 均值。

于 2012-06-22T22:53:08.600 回答