Pull to refresh

Comments 24

UFO just landed and posted this here
Этот алгоритм далеко не DBSCAN.
Спасибо за комментарий.

Проверьте на устойчивость. На ваших же данных — прибавьте к координатам каждой точки случайные числа.


Ну и для ваших данных, понятное дело, не подходит k-means — тут нужен какой-то из методов, объединяющих кластеры "по ближайшему соседу", с ними и следовало сравнивать.

Спасибо за комментарий.
Думаю очевидно что помехи и шум не повлияют на результат.
«По ближайшему соседу» — можете подсказать название и описание такого метода (ссылку) по принципу «обучения без учителя». Т.к. мне известны только такие методы для «обучения с учителем». Когда представлены хотя бы несколько объектов с известными классами.
Спасибо за ссылку. Действительно метод соседей там представлен для данных «без учителя». Но структура алгоритма там другая.
На рисунках 1 и 2 приведены результаты классификации метода k-средних и нового метода классификации.

Здесь (и везде в других местах) говорить «классификация» некорректно.

В целом, рекомендую автору ознакомиться с другими алгоритмами кластеризации (например, тут), потому что сравнение с k-means выглядит неубедительно.

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

Нет, не очевидно. Дайте метрики какие-нибудь на пачке стандартных датасетов. Дайте результаты на реальных данных.
В конце концов, дайте реализацию с каким-нибудь стандартным интерфейсом (похожим на sklearn-овский, например), чтобы люди могли сравнить.

А то пока звучит как очередное изобретение вечного двигателя.
Дайте, дайте — попробуйте реализовать сами.
Если алгоритм реализован и работает, а не «работает на бумаге», как часто бывает, то в чем проблема поделиться реализацией?
Отсутствие метрик в статье и сравнение на синтетических данных с сомнительной SotA (k-means для данных такого вида и правда сомнительный, уж простите) выглядит неубедительно.
это вроде манхеттенская метрика с трешхолдом
np.abs(arr_x-arr_y) < d

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

нихрена. сам метрика примитивна.
Реализациея на коленке:
import numpy as np
import pprint as pp

arr = np.array([[1,2,3] , [1,3,5] , [1,1,1] , [2,2,2] , [7,7,7]])

def clasterize_woting(arr,d ):

objects_amount = len (arr)
input_dim = len(arr[0])
#woting_mx = np.zeros((objects_amount,objects_amount))
woting_mx = {}

for x in range(objects_amount-1):
arr_x = arr[x]
for y in range(x+1,objects_amount):
arr_y = arr[y]
wotes = np.sum(np.abs(arr_x-arr_y) < d)
woting_mx[(x,y)] = wotes
return woting_mx

w = clasterize_woting(arr,2)

pp.pprint(w)

с результатом:
{(0, 1): 2,
(0, 2): 2,
(0, 3): 3,
(0, 4): 0,
(1, 2): 1,
(1, 3): 2,
(1, 4): 0,
(2, 3): 3,
(2, 4): 0,
(3, 4): 0}

объединил сильно ([1,1,1], [2,2,2],[1,2,3]), слабее ([1,3,5]), вообще в стороне [7,7,7]

почему проблема в метрике, потому что никогда не додумается, что ([1,1,1], [2,2,2], [7,7,7]) могут быть в одном кластере а ([1,2,3], [1,3,5]) в другом

Действительно, этот алгоритм использует гипотезу компактности и не относится к алгоритмам определяющих закономерности.

Посмотрите пожалуйста тут -раздел 2 и тут. Или соотв. оригинальную документацию sklearn описание, но по логике описания похоже на замену схемой голосования параметра d в DBSCAN — должно быть более гибко, но надо проверять т.к. п. 7. алгоритма выглядит вычислительно сложным.

Посмотрел, DBSCAN — это другой алгоритм.
попробую реализовать подозреваю результаты будут похожие на KNN или коннохена так как основной момент в метрике.
и кстати количество кластеров может быть (и это имхо лучше) неизвестным
Нет, это другой алгоритм.

Джентльмены верят другу другу на слово? У вас какой-то его частный случай походу, так что да… Другой....


И вообще, заявлений много, а анализа толкового нет. Мне особенно понравилось про сложные топологии :)


Кстати у задачи кластеризации существуют конкретные метрики, silhoutte score например, а не только "интуитивная отличимость" (на игрушечных датасетах).


Так что у вас один выход. Сделать python-библиотеку и собрать на гитхабе звёзд больше чем hdbscan (1300+ на данный момент).

«Сделать python-библиотеку» возможно в будущем кто нибудь сделает реализацию на python в качестве библиотеки
Не бывает универсально лучших методов кластеризации (по крайней мере сейчас картина такова), иначе их не было бы столько разных вариантов в том же sklearn-е, лучший бы всех заборол, а про остальные бы забыли. ML очень динамичная область, тут всё быстро. Сегодня в регрессии/классификации рулит Ranfom Forest, а завтра уже XGBoost. Но для кластеризации такой «монополизации рынка» мы пока не видим. Для каких-то наборов данных лучше одни методы работают, для каких-то другие. Поэтому, как уже указывали выше, надо сравнивать с другими алгоритмами кластеризации на пачке разных данных, как это опять же сделано в sklearn. Кстати, если визуализировать результаты на одних и тех же данных, сразу будет заодно чисто визуально видно — не является ли предлагаемый метод копией какого-то другого метода, уже реализованного в sklearn. Если он будет давать в точности те же результаты, что и какой-то другой метод, то выводы можно сделать довольно легко.
Не соглашусь с этим утверждением. Т.к. вычислительная сложность алгоритма может быть другой и он может оказаться более эффективным для больших данных, даже когда результаты совпадают.
Теоретически такое может быть. Но обычно когда пишут библиотеки для обработки именно очень больших данных, то их пишут именно с прицелом на большие данные, там используется несколько другая математика и вычисления делаются приблизительные. Поэтому результат работы такой библиотеки скорее всего будет всё-равно отличаться, ну и цель разработки библиотеки будет тогда заявлена совсем другая.
Сейчас появилось довольно много специальных библиотек для вычисления метрик похожести для больших данных (например NMSLIB), это отдельная интересная тема.
Спасибо за комментарий.
Sign up to leave a comment.

Articles