Как создать кластеры документов с помощью иерархической кластеризации

Я пытаюсь сгруппировать документы на основе их сходства, идея состоит в том, чтобы сопоставить похожие слова в двух документах и ​​разделить это число на общее количество слов в обоих документах. Каждое значение хранится в двумерном массиве:

1.0000 0.1548 0.0968 0.0982 0.2750 0.1239 0.0891 0.1565
0.1548 1.0000 0.0960 0.0898 0.1631 0.0756 0.0874 0.2187
0.0957 0.2300 1.0000 0.4964 0.0980 0.2004 0.4582 0.2315
0.0971 0.2234 0.4946 1.0000 0.0995 0.2010 0.4533 0.2244
0.2793 0.1631 0.0986 0.1001 1.0000 0.1324 0.0904 0.1662
0.1726 0.0756 0.2149 0.2157 0.1795 1.0000 0.2019 0.0819
0.0880 0.2108 0.4582 0.4550 0.0899 0.1880 1.0000 0.2124
0.1556 0.2094 0.0950 0.0884 0.1662 0.0764 0.0867 1.0000

Таким образом, если имеется 8 документов, результат каждого документа по сравнению с другим сохраняется, так как в таблице выше каждый индекс массива показывает один документ. Таким образом, документ 0,0 1,1 2,2 ... всегда будет иметь значение один, потому что они одинаковы.

Как сгруппировать похожие документы, т.е. чьи значения близки друг к другу?


person mdanishs    schedule 10.11.2013    source источник


Ответы (1)


Вы пытались преобразовать сходство в расстояние, используя, например.

dist = 1 - sim

Поскольку ваше сходство ограничено 1, это должно работать нормально.

Однако обратите внимание, что иерархическая кластеризация плохо масштабируется. Обычная наивная реализация масштабируется с помощью O(n^3), а очень осторожные реализации могут работать в O(n^2) для некоторых типов связи (одиночная ссылка, полная ссылка, возможно, также UPGMA). Тем не менее, ваш обычный текстовый корпус будет слишком велик, чтобы это было возможно.

person Has QUIT--Anony-Mousse    schedule 10.11.2013