Vector 在c++;

Vector 在c++;,vector,binary,cluster-analysis,hamming-distance,Vector,Binary,Cluster Analysis,Hamming Distance,我想将二进制向量(数百万个)聚类成k个簇,我使用汉明距离来寻找初始簇的最近邻(这也是非常慢的)。我认为K-means聚类并不适合这里。问题在于计算到某个初始簇中心的最近邻(二元向量)的平均值,以更新质心 第二种选择是使用K-medoid,其中新的簇中心是从最近的邻居中选择的(对于特定簇中心,最接近所有邻居的邻居)。但这是另一个问题,因为最近邻居的数量也相当大 有人能给我指点一下吗?的确,k-means在这里不太合适,因为这种方法在二进制数据上是不合理的 为什么您需要确切的k集群?这可能意味着,某

我想将二进制向量(数百万个)聚类成k个簇,我使用汉明距离来寻找初始簇的最近邻(这也是非常慢的)。我认为K-means聚类并不适合这里。问题在于计算到某个初始簇中心的最近邻(二元向量)的平均值,以更新质心

第二种选择是使用K-medoid,其中新的簇中心是从最近的邻居中选择的(对于特定簇中心,最接近所有邻居的邻居)。但这是另一个问题,因为最近邻居的数量也相当大


有人能给我指点一下吗?

的确,k-means在这里不太合适,因为这种方法在二进制数据上是不合理的

为什么您需要确切的
k
集群?这可能意味着,某些向量将无法很好地适应它们的簇


对于聚类,您可以研究一些东西:minhash、位置敏感哈希。

可以使用二进制特征向量进行k-means聚类。这篇名为《我合著》的论文有详细内容。质心是通过取每个维度中最常出现的位来计算的。TopSig论文将此应用于文档聚类,其中我们通过稀疏高维单词包特征向量的随机投影创建了二进制特征向量。在上有一个java实现。我们目前正在使用C++版本,但它是非常早期的代码,它仍然凌乱,可能包含bug,但您可以在它找到。如果您有任何问题,请随时与我联系chris@de-弗里斯


如果你想对大量的二元向量进行聚类,还有更具可伸缩性的基于树的聚类算法K-tree、TSVQ和EM-tree。有关这些算法的更多详细信息,您可以查看我最近提交给同行评审的一篇论文,该论文尚未发表。

是的,我需要K个集群,因为它们将用作我的数据点的词汇表(代码本)。我将把它们用于单词袋模型。好吧,你可以只使用你得到的任何集群,并忽略未分配的点,例如。如果聚类算法说317个聚类是合适的,1000个点是噪声,为什么不使用317个单词呢?我对LSH的理解是,它可以用来找到一些初始群集中心的最近邻居。我仍然不知道如何为群集过程的下一次迭代选择下一个群集中心。或者我们真的需要运行下一次迭代吗?你能详细说明一下吗?你可以使用LSH来加速基于邻域的聚类算法。可能不是k-means,而是几乎所有更现代的算法。如何准确地使用LWM树对ORB描述符进行聚类?