在java中 - 分组相似的值

时间:2010-02-08 16:45:48

标签: java math cluster-analysis classification

首先,感谢您阅读我的问题。

我在那些值上使用了TF/IDF,我计算了余弦相似度,看看有多少文档更相似。您可以看到以下矩阵。列名称类似于doc1,doc2,doc3,行名称与doc1,doc2,doc3等相同。在以下矩阵的帮助下,我可以看到doc1和doc4具有72%的相似度(0.722711142)。即使我看到两个文件都相似也是正确的。我有1000个文件,我可以看到每个文件freq。在矩阵中看看它们中有多少是相似的。 我使用了不同的聚类,如k-means和agnes(层次结构)来组合它们。它创造了集群。例如,Cluster1具有(doc4,doc5,doc3)becoz,它们的值分别为0.722711142,0.602301766,0.69912109。但是当我手动看到这3个文件是否真的相同所以它们不是。 :(我在做什么或者我应该使用除聚类之外的其他东西??????

    1             0.067305859  -0.027552299   0.602301766   0.722711142    
    0.067305859   1             0.048492904   0.029151952  -0.034714695 
   -0.027552299   0.748492904   1             0.610617214   0.010912109    
    0.602301766   0.029151952  -0.061617214   1             0.034410392    
    0.722711142  -0.034714695   0.69912109    0.034410392   1            
P.S:价值观可能是错误的,只是为了给你一个想法。 如果您有任何疑问,请询问。 感谢

2 个答案:

答案 0 :(得分:1)

我不熟悉TF / IDF,但这个过程在很多阶段都会出错:

1,你删除了停用词吗?

2,你申请了什么?例如Porter stemmer。

3,您是否规范了文档长度的频率? (也许TFIDF有一个解决方案,我不知道)

4,聚类是一种发现方法,但不是圣杯。它作为一组检索的文档可能或多或少相关,但这取决于数据,调优,聚类算法等。

你想要达到什么目的?你的设置是什么? 祝你好运!

答案 1 :(得分:1)

我的方法是根本不使用预先计算的相似度值,因为文档之间的相似性应该由聚类算法本身找到。我只需在语料库中设置一个每个术语一列的特征空间,这样列的数量就等于词汇量的大小(减去停止词,如果你想要的话)。每个特征值包含该文档中相应术语的相对频率。我想你也可以使用tf * idf值,虽然我不希望它能帮助太多。根据您使用的聚类算法,应该自动找到特定术语的区分能力,即如果一个术语出现在具有相似相对频率的所有文档中,则该术语在类之间不能很好地区分,算法应该检测到