我有一个大型数据集,我想集群。我的试运行集大小是2,500个对象;当我在'真正的交易'上运行时,我将需要处理至少20k的对象。
这些对象之间具有余弦相似性。该余弦相似性不满足作为数学距离度量的要求;它不满足三角不等式。
我想以一种“自然”的方式将它们聚类在一起,将类似的对象放在一起,而不需要事先指定我期望的聚类数。
有谁知道会这样做的算法?真的,我只是在寻找任何不需要a)距离度量和b)预先指定数量的聚类的算法。
非常感谢!
此问题在此之前已被提出: Clustering from the cosine similarity values (但此解决方案仅提供K-means聚类),此处: Effective clustering of a similarity matrix (但这个解决方案相当模糊)
答案 0 :(得分:3)
Apache mahout有许多聚类算法,包括一些不需要你指定N的算法,它们允许你指定距离度量。
平均移位聚类类似于k均值但没有预先指定数量的聚类https://cwiki.apache.org/confluence/display/MAHOUT/Mean+Shift+Clustering。
然后更一般地说,如果你想尝试各种算法,R有一个绝对丰富的复杂软件包(包括一些已经证明可以选择最佳数量的EM的变分贝叶斯实现)对我过去的一些研究非常有用:http://cran.r-project.org/web/views/Cluster.html。
答案 1 :(得分:2)
实际上,大多数需要“距离函数”的算法都不要求它是度量标准。
DBSCAN可以推广到一个甚至从距离抽象的版本(见维基百科),它只需要有某种“密集”的概念。 (DBSCAN也不需要事先知道集群的数量)
但即使对于k-means--对距离有相当严格的要求,甚至超出了测量范围 - 也有一种叫做球形k-means的变体。
无论如何,在数据库环境中,“度量”的全部要求都是utopic。在任何现实世界的数据中,可能有两个具有相同坐标的记录,因此最多只有一个伪度量。三角不等式主要起到优化的作用(例如,通过使用具有严格三角不等式要求的M树索引)或利用该属性的加速k均值。
答案 2 :(得分:2)
你也可以尝试Affinity Propagation(http://www.psi.toronto.edu/index.php?q=affinity%20propagation)。该算法将相似度矩阵作为输入,我相信也可以自动调整聚类质心的数量。