Matrix 相似矩阵的有效聚类

Matrix 相似矩阵的有效聚类,matrix,machine-learning,cluster-analysis,distance,similarity,Matrix,Machine Learning,Cluster Analysis,Distance,Similarity,我的主题是(一堆)文本的相似性和聚类。简言之:我想把收集到的文本集中在一起,它们应该以有意义的集群出现在最后。为此,到目前为止,我的方法如下,我的问题在于集群。当前的软件是用php编写的 1) 相似性: 我将每个文档视为“文字包”,并将文字转换为向量。我用 过滤(仅“真实”字) 标记化(将句子拆分为单词) 词干分析(将单词简化为基本形式;波特词干分析器) 删减(频率过高和过低的词的删减) 作为降维的方法。在那之后,我使用余弦相似性(如网站上的建议/描述) 结果是一个相似矩阵,如下所示:

我的主题是(一堆)文本的相似性和聚类。简言之:我想把收集到的文本集中在一起,它们应该以有意义的集群出现在最后。为此,到目前为止,我的方法如下,我的问题在于集群。当前的软件是用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
A…E是我的文本,数字是以百分比表示的相似性;越高,文本越相似。因为sim(A,B)==sim(B,A)只填充了矩阵的一半。因此文本A到文本D的相似性为71%

现在我想从这个矩阵中生成一个先验未知(!)数量的簇。这些簇应该一起表示相似的项(达到某个stop标准)

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

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


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

试试吧。有这么多的聚类算法,没有人会知道它们的全部。另外,这也很大程度上取决于你的数据集和那里的聚类结构。
最后,在余弦距离和BofW特征方面,也可能只有这一个怪物群集。

由于你们都是该领域的新手,群集数量未知,并且已经在使用余弦距离,我建议使用群集算法

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


更不用说,它实际上已经足够好用在很多人的研究中了。如果没有其他方法,你就可以知道这个聚类算法的缺点,你想在转移到另一个算法时解决这些缺点。

也许你可以将你的相似性矩阵转换成一个不同的矩阵,比如transforming x到1/x,那么你的问题是对一个相异矩阵进行聚类。我认为分层聚类可能会起作用。这些可能会帮助你:

你得到了什么好的答案吗?我甚至不清楚聚类应该在多少维度上起作用。。。
    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