Я использую скрытый семантический анализ для представления совокупности документов в пространстве меньшего размера. Я хочу сгруппировать эти документы в две группы с помощью k-средних.
Несколько лет назад я сделал это с помощью gensim Python и написал свой собственный алгоритм k-средних. Я определил кластерные центроиды, используя евклидово расстояние, но затем сгруппировал каждый документ на основе косинусного сходства с центроидом. Казалось, работает довольно хорошо.
Сейчас я пытаюсь сделать это в гораздо большем объеме документов. К-значит не сходится, и мне интересно, если это ошибка в моем коде. Недавно я прочитал, что вы не должны кластеризоваться, используя косинусное сходство, потому что k-means работает только на евклидовом расстоянии. Хотя, как я уже упоминал, в моем меньшем тестовом случае это работало нормально.
Теперь я сталкиваюсь с этим на странице Википедии LSA :
Документы и представления векторов терминов могут быть сгруппированы с использованием традиционных алгоритмов кластеризации, таких как k-средних, с использованием мер сходства, таких как косинус.
Так что это? Можно ли использовать косинусное сходство или нет?
I then assigned each document to a cluster based on cosine similarity
- Косинус между доктором и центроидом? И после того, как все документы назначены, вы обновляете центроиды обычным (евклидовым) способом, потому что координаты документов в пространстве известны. Это так?Ответы:
Да, вы можете использовать это. Проблема в том, что косинусное сходство не является расстоянием, поэтому оно называется сходством. Тем не менее, он может быть преобразован в расстояние, как описано здесь .
На самом деле, вы можете просто использовать любое расстояние. Очень хорошее исследование свойств функций расстояния в многомерных пространствах (как это обычно бывает при поиске информации) - « Об удивительном поведении метрик расстояния в многомерном пространстве» . Это не сравнивает евклидово с косинусом.
Я столкнулся с этим исследованием, в котором они утверждают, что в пространствах большого размера оба расстояния ведут себя одинаково.
источник
Yes, you can use it
. (Идея конвертировать косинус в евклидово расстояние похожа на мой ответ ?)Евклидово расстояние не подходит для сравнения документов или кластеров документов. При сравнении документов одной из ключевых проблем является нормализация по длине документа. Подобие косинусов достигает такого рода нормализации, а евклидово расстояние - нет. Более того, документы часто моделируются как полиномиальное распределение вероятностей (так называемый пакет слов). Косинусное сходство является приближением к JS-дивергенции, которая является статистически обоснованным методом подобия. Одна ключевая проблема с документами и косинусом заключается в том, что следует применять правильную нормализацию tf-idf к счетчикам. Если вы используете gensim для получения представления LSA, gensim уже делает это.
Другое полезное наблюдение для вашего варианта использования 2 кластеров заключается в том, что вы можете получить хорошую неслучайную инициализацию, потому что LSA - это просто SVD. Вы делаете это следующим образом:
источник
Да, такое же обновление центроида по векторному усреднению работает.
См. Случай m = 1 в разделе 2.2 этой статьи . w - это веса, а все веса равны 1 для базовых алгоритмов k-средних.
В статье используются свойства неравенства Коши-Шварца для установления условия, минимизирующего функцию стоимости для k-среднего.
Также помните, что косинусное сходство не является векторным расстоянием. Косинусная диссимилиарность есть. (Это должен быть хороший поисковый термин.) Следовательно, когда вы обновляете раздел, вы ищете,
arg max
а неarg min
.источник