相似矩阵的有效聚类

Mar*_*tin 6 cluster-analysis machine-learning distance similarity matrix

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

1)相似性:我将每个文档视为"词袋"并将单词转换为向量.我用

  • 过滤(仅"真实"单词)
  • 标记化(将句子分成单词)
  • 阻止(将词语缩减为基本形式;波特的词干)
  • 修剪(剪切过高和低频的单词)

作为降维的方法.之后,我正在使用余弦相似性(如网站和此处各种网站所建议/描述的那样).

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

        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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

对不起,如果有些东西看起来很基本,但我在这个领域比较新.谢谢您的帮助.

Ano*_*sse 1

尝试一下吧。那里有很多聚类算法,没有人会知道所有它们。另外,它还很大程度上取决于您的数据集和那里的聚类结构。最后,就余弦距离和 BofW 特征而言,也可能只有这一怪物簇。