ELKI ClusteringVectorDumper — какие из них являются выбросами?

#cluster-analysis #elki

#кластерный анализ #elki

Вопрос:

Я использую ELKI для кластеризации DBSCAN и его ClusteringVectorDumper для вывода идентификаторов кластера в текстовый файл.

Какой идентификатор получают выбросы? Я предположил, что это «0», но, похоже, это не так.

Комментарии:

1. Шум — это не то же самое, что выбросы. Номера кластеров бессмысленны, как случайные числа. И вы смотрели на исходный код для вашей реальной проблемы?

2. Это не отвечает на мой question…do вы хотите сказать мне, что выбросы получают один случайный идентификатор? или у каждого выброса есть свой собственный идентификатор?

3. Это комментарий, а не ответ. Я говорю, что кластеры «естественно» не имеют целого числа, поэтому трудно предсказать, какое целое число присваивается. Я использовал ELKI (но не этот дампер); поэтому я знаю, что он не использует один кластер на шум, но что всем шумам будет присвоен один и тот же кластер. Но при иерархической кластеризации точка может находиться в нескольких кластерах. В Java кластеры будут иметь isNoise() метод в кластере. Понятия не имею, что делает дампер — вы проверили источник?

Ответ №1:

Вы можете найти исходный код ClusteringVectorDumper в Интернете.

Специальной обработки шумовых кластеров не существует, но они будут обработаны как возвращенные Clustering.getAllClusters() . Для обеспечения некоторой стабильности этот метод в настоящее время сортирует по имени. DBSCAN не предоставляет дополнительных имен кластеров (некоторые алгоритмы присваивают, например, имена интервалов или имена подпространств), поэтому, если я правильно помню, все кластеры будут называться либо "Cluster" или "Noise" . Поскольку "Noise" сортируется после "Cluster" , наибольшим индексом должен быть кластер шума.

Не стесняйтесь отправлять запрос на извлечение, чтобы улучшить либо именование, либо вывод. Я рассматривал возможность использования отрицательных чисел для шумовых кластеров, но это увеличило бы сложность кода; и люди, вероятно, тоже не ожидали бы увидеть кластер -1 .

Не рекомендуется злоупотреблять DBSCAN для обнаружения выбросов. Он пропустит выбросы, потому что они достижимы, и назначит кластеры низкой плотности в качестве выбросов, которые другие методы легко распознают правильно. Он также не обеспечивает ранжирование, поэтому у вас мало контроля над тем, сколько выбросов вы получаете. Если бы вы модифицировали DBSCAN для обеспечения такого ранжирования, вы, вероятно, заново изобрели бы один из старейших методов обнаружения выбросов — kNN outlier detection . (DB-Outlier также очень тесно связан с DBSCAN).

Комментарии:

1. Не могу подтвердить это. Неоднократно проверял набор данных mouse.csv с помощью DBSCAN, устанавливал параметры так, чтобы большинство точек были шумовыми, затем проверял вывод вектора кластеризации, и индекс самого большого кластера (= шум) часто не был 0 или последним индексом. Я должен добавить, что я работаю над старым коммитом от 13 апреля (03fbea9028ceda5839b61b65cae647e029eb8f70), поэтому вполне возможно, что это поведение изменилось.

2. Затем вам нужно будет придумать логику, которая вам нравится, и изменить код по желанию.

3. В качестве уродливого взлома вы можете добавить точку данных, которая находится на бесконечности, к вашему набору данных. Это будет шум; и тогда первая запись в файле данных будет указывать класс шума. (Непроверенный, я бы просто создал обработчик результатов именно так, как мне нужно.)

4. Спасибо за помощь. Я не собираюсь писать это сам, но просто в качестве предложения, если вы хотите что-то реализовать в будущем, я бы ожидал, что кластер шума будет либо 0, либо -1, и я полагаю, что это покажется интуитивно понятным для большинства людей.

5. У нас есть методы с более чем одним кластером шума. Так что это правило обычно не будет работать. И -1 удивит других пользователей, поскольку это означает, что вы не можете использовать значение для индексации массива. Не существует решения, которое сделает всех счастливыми, вам придется настраивать.