В java - группировка похожих значений - PullRequest
3 голосов
/ 08 февраля 2010

Прежде всего, спасибо за чтение моего вопроса.

Я использовал TF / IDF , затем по этим значениям я вычислил косинусное сходство, чтобы увидеть, сколько документов более похоже. Вы можете увидеть следующую матрицу. Имена столбцов похожи на doc1, doc2, doc3, а имена строк такие же, как doc1, doc2, doc3 и т. Д. С помощью следующей матрицы я вижу, что doc1 и doc4 имеют 72% сходство (0,722711142). Это правильно, даже если я вижу оба документа, они похожи. У меня есть 1000 документов, и я могу видеть каждый документ Freq. в матрице, чтобы увидеть, сколько из них похожи. Я использовал разные кластеры, такие как k-means и agnes (иерархия), чтобы объединить их. Это сделало кластеры. Например, Cluster1 имеет (doc4, doc5, doc3), потому что они имеют значения (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 ]

1 голос
/ 15 февраля 2010

Мой подход заключается в том, чтобы вообще не использовать предварительно рассчитанные значения сходства, потому что сходство между документами должно быть найдено самим алгоритмом кластеризации. Я бы просто настроил пространство объектов с одним столбцом на каждый член в корпусе, чтобы количество столбцов равнялось размеру словаря (минус стоп-слово, если хотите). Каждое значение признака содержит относительную частоту соответствующего термина в этом документе. Я думаю, вы могли бы также использовать значения tf * idf, хотя я бы не ожидал, что это слишком сильно поможет. В зависимости от используемого вами алгоритма кластеризации, различающая способность конкретного термина должна быть найдена автоматически, т.е. если термин появляется во всех документах с одинаковой относительной частотой, тогда этот термин плохо различает классы, и алгоритм должен обнаружить, что .

1 голос
/ 08 февраля 2010

Я не знаком с TF / IDF, но процесс может идти не так, как обычно, на многих этапах:

1, вы убрали стоп-слова?

2, ты применил stemming? Портер Стеммер например.

3, нормализовали ли вы частоты по длине документа? (Может быть, у TFIDF есть решение для этого, я не знаю)

4, Кластеризация - это метод открытия, а не Святой Грааль. Документы, которые он получает как группа, могут быть более или менее связаны, но это зависит от данных, настройки, алгоритма кластеризации и т. Д.

Чего вы хотите достичь? Каковы ваши настройки? Удачи!

...