Comments 11
Было бы неплохо увидить реальный пример функции на С или Python. Или если есть ссылка на какой нибудь репозиторий с рабочими примерами, тоже было бы хорошо. Спасибо за статью.
Вот, например, питонья sklearn-имплементация с примером использования, которую я препарировал. Здесь можно найти matlab версию, а здесь — Java (распараллеленная, кстати!), но я их не смотрел.
а здесь R реализация: https://cran.r-project.org/web/packages/apcluster/vignettes/apcluster.pdf
КДПВ шикарна вдвойне за счет, пожалуй, самого популярного в мире дивана, браво!
Отличная статья! Спасибо!
Спасибо за статью, надеюсь на продолжение!
По поводу первой картинки из «стены картинок» (там где четыре полоски) вопрос: изначальная точка в к-средних выбиралась случайным образом или это одна из точек данных? По результату видно, что центроиды расположены между полосками, возможно, результат улучшится, если инициализировать в одной из точек данных. Кстати, интересно, есть ли модификация к-средних, где центроид на каждой итерации не просто считается как среднее точек кластера, а сначала считается среднее, а потом выбирается реальная точка, ближайшая к этой расчетной. Кажется логичным такой подход, чтобы избежать ситуации, изображенной на картинке.
И по поводу третьей картинки, там где две полоски перпендикулярны и накладываются. Мне кажется, не совсем честно сравнивать кластеризацию на 2 класса с помощью к-средних с разбиением на кучу кластеров. Возможно, если задать для к-средних, скажем, 5 кластеров, мы получим другой результат (условно «серединка» и четыре «лопасти»).
По поводу первой картинки из «стены картинок» (там где четыре полоски) вопрос: изначальная точка в к-средних выбиралась случайным образом или это одна из точек данных? По результату видно, что центроиды расположены между полосками, возможно, результат улучшится, если инициализировать в одной из точек данных. Кстати, интересно, есть ли модификация к-средних, где центроид на каждой итерации не просто считается как среднее точек кластера, а сначала считается среднее, а потом выбирается реальная точка, ближайшая к этой расчетной. Кажется логичным такой подход, чтобы избежать ситуации, изображенной на картинке.
И по поводу третьей картинки, там где две полоски перпендикулярны и накладываются. Мне кажется, не совсем честно сравнивать кластеризацию на 2 класса с помощью к-средних с разбиением на кучу кластеров. Возможно, если задать для к-средних, скажем, 5 кластеров, мы получим другой результат (условно «серединка» и четыре «лопасти»).
вопрос: изначальная точка в к-средних выбиралась случайным образом или это одна из точек данных?
Для инициализации использовался алгоритм k-means++. Т.е. даже лучше, чем просто случайный выбор точки.
Кстати, интересно, есть ли модификация к-средних, где центроид на каждой итерации не просто считается как среднее точек кластера, а сначала считается среднее, а потом выбирается реальная точка, ближайшая к этой расчетной. Кажется логичным такой подход, чтобы избежать ситуации, изображенной на картинке.
Интересная идея, но тут есть несколько недостатков. Что если примерное направление не совпадает ни с одной точкой? Как быть с кластерами с дырками посередине? Совсем не уверен, что это бы решило проблему с вот такими «колбасками».
Вот же как выступает kmeans с большим количеством кластеров на картинке с узким кластером, пересекающим круглый:


Лучше, чем было, но всё равно так себе: кластеры вытягиваются в направлении, перпендикулярном, направлению меньшего кластера.
Я слышал мнение, что кластеризация скорее метод визуализации, поскольку надо наперед задать или количество групп, или степень сходства. Не холивара для, а истины ради: насколько правильным Вы считаете такое мнение?
Спасибо за статью!
Похоже, что в формуле (2) алгоритма опечатка.
Судя по оригинальной статье и дальнейшему объяснению, должно быть:

Похоже, что в формуле (2) алгоритма опечатка.
Судя по оригинальной статье и дальнейшему объяснению, должно быть:

Sign up to leave a comment.
Интересные алгоритмы кластеризации, часть первая: Affinity propagation