相似矩阵的有效聚类

时间:2012-04-10 09:53:54

标签: matrix machine-learning cluster-analysis distance similarity

我的主题是(一堆)文本的相似性和聚类。简而言之:我想将收集的文本聚集在一起,最后它们应该出现在有意义的聚类中。为此,我到目前为止的方法如下,我的问题在于群集。目前的软件是用PHP编写的。

1)相似度: 我将每个文档视为“词袋”并将单词转换为向量。我用

  • 过滤(仅“真实”字样)
  • 标记化(将句子分成单词)
  • 词干(将词语缩减为基本形式; Porter的词干)
  • 修剪(剪切过高和低频率的文字)

作为降维的方法。在那之后,我使用余弦相似性(如网络上各种网站上建议/描述and here

结果就是这样的相似性矩阵:

        A   B   C   D   E 
    A   0  30  51  75  80
    B   X   0  21  55  70
    C   X   X   0  25  10
    D   X   X   X   0  15
    E   X   X   X   X   0

A ... E是我的文本,数字是相似的百分比;越高,文本越相似。因为sim(A,B)== sim(B,A)只填充了矩阵的一半。因此,文本A与文本D的相似度为71%。

我想现在从这个矩阵中生成一个先验未知(!)的簇数。群集应该一起代表相似的项目(直到某个停止标准)。

我自己尝试了一个基本的实现,基本上就是这样(60%作为固定的相似性阈值)

    foreach article
      get similar entries where sim > 60
              foreach similar entry
              check if one of the entries already has a cluster number
              if no: assign new cluster number to all similar entries
              if yes: use that number

它起作用(不知何故),但一点也不好,结果往往是怪物群。 所以,我想重做这个并且已经了解了所有类型的聚类算法,但我仍然不确定哪个算法效果最好。我认为它应该是一个凝聚性的算法,因为每一对文本都可以在一开始就被视为一个集群。但问题仍然是停止标准是什么,以及算法是否应该将现有的聚类分开和/或合并在一起。

很抱歉,如果有些东西看起来很基本,但我在这个领域比较新。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

由于你们都是该领域的新手,拥有未知数量的聚类并且已经在使用余弦距离,我建议采用FLAME聚类算法。

它直观,易于实现,并且具有大量语言的实现(但不是PHP,主要是因为很少有人使用PHP进行数据科学)。

更不用说,它实际上已经足够用于许多人的研究。如果没有别的,你可以了解这个聚类算法的缺点究竟是什么,你想要转移到另一个算法中。

答案 1 :(得分:1)

试试吧。那里有很多聚类算法,没有人会知道所有聚类算法。此外,它还取决于您的数据集和那里的集群结构。 最后,关于余弦距离和BofW特征,也可能只有这一个怪物群。

答案 2 :(得分:1)

也许您可以将相似度矩阵转换为相异矩阵,例如将x转换为1 / x,然后您的问题是聚类不相似矩阵。我认为分层集群可能有效。这些可能会对您有所帮助:hierarchical clusteringClustering a dissimilarity matrix