Я використовую латентний семантичний аналіз для представлення корпусу документів у просторі нижчих розмірів. Я хочу класифікувати ці документи на дві групи за допомогою k-засобів.
Кілька років тому я робив це, використовуючи gensim Python і писав власний алгоритм k-означає. Я визначив центроїди кластера за евклідовою відстані, але потім згрупував кожен документ на основі подібності косинусу до центроїда. Здавалося, це працює досить добре.
Зараз я намагаюся зробити це на набагато більшому корпусі документів. K-засоби не збігаються, і мені цікаво, чи це помилка в моєму коді. Нещодавно я читав, що не слід кластеризувати подібність косинусу, оскільки k-означає працює лише на евклідовій відстані. Навіть незважаючи на те, що, як я вже згадував, у моїй меншій тестовій справі це виявилося чудово.
Зараз я натрапив на це на сторінці Вікіпедії LSA :
Документи та термінові векторні подання можуть бути згруповані за допомогою традиційних алгоритмів кластеризації, таких як k-засоби, використовуючи заходи подібності, як косинус.
Так що це? Чи можу я використовувати косинусну схожість чи ні?
I then assigned each document to a cluster based on cosine similarity
- Косинус між док і центроїдом? І після того, як всі документи будуть призначені, ви оновлюєте центроїди звичайним (евклідовим) способом, оскільки координати документів у просторі відомі. Невже це так?