Я использую скрытый семантический анализ для представления совокупности документов в пространстве меньшего размера. Я хочу сгруппировать эти документы в две группы с помощью k-средних.
Несколько лет назад я сделал это с помощью gensim Python и написал свой собственный алгоритм k-средних. Я определил кластерные центроиды, используя евклидово расстояние, но затем сгруппировал каждый документ на основе косинусного сходства с центроидом. Казалось, работает довольно хорошо.
Сейчас я пытаюсь сделать это в гораздо большем объеме документов. К-значит не сходится, и мне интересно, если это ошибка в моем коде. Недавно я прочитал, что вы не должны кластеризоваться, используя косинусное сходство, потому что k-means работает только на евклидовом расстоянии. Хотя, как я уже упоминал, в моем меньшем тестовом случае это работало нормально.
Теперь я сталкиваюсь с этим на странице Википедии LSA :
Документы и представления векторов терминов могут быть сгруппированы с использованием традиционных алгоритмов кластеризации, таких как k-средних, с использованием мер сходства, таких как косинус.
Так что это? Можно ли использовать косинусное сходство или нет?
I then assigned each document to a cluster based on cosine similarity
- Косинус между доктором и центроидом? И после того, как все документы назначены, вы обновляете центроиды обычным (евклидовым) способом, потому что координаты документов в пространстве известны. Это так?