5

我的主题是(一堆)文本的相似性和聚类。简而言之:我希望将收集的文本聚集在一起,并在最后显示在有意义的群集中。要做到这一点,我的方法到目前为止,我的问题是在群集。目前的软件是用php编写的。相似矩阵的有效聚类

1)相似度: 我把每个文档看作是一个“袋子文字”,并将单词转换为矢量。我用

  • 过滤(仅适用于“实”字)
  • 标记化(拆分句子进言)
  • 制止(减少的话他们的基本形式;波特词干)
  • 修剪(词切带太低&低频)

作为降维的方法。 。在那之后,我使用余弦相似性(如建议/在网络上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%

我想从这个矩阵中产生一个先验未知(!)数量的簇,簇应该表示类似的项目(直到一定的停止p标准)一起。

我试过基本实现自己,这是基本上是这样的(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 

它的工作(在某种程度上),但也不好,结果往往怪物群。 所以,我想重做这个,并且已经查看了各种聚类算法,但是我仍然不确定哪个算法最好。我认为它应该是一个凝聚的算法,因为每一对文本在开始时都可以看作是一个集群。但问题仍然在于阻塞标准是什么,以及算法是否应该将现有集群划分和/或合并在一起。

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

+0

你有没有得到任何好的答案?我甚至不清楚集群应该在多大程度上工作...... – Jim 2013-10-30 19:00:51

回答

1

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

2

既然你们都是新来的领域,有一个未知数量的集群,并已经使用余弦距离,我会推荐FLAME聚类算法。

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

更不用说,它实际上已经足够用于大量人群的研究。如果没有其他的东西你可以知道这个聚类算法中的缺点是什么,你想在移动到另一个时寻求解决。