Различные результаты реализации LOF в ELKI и RapidMiner

Я написал свою собственную реализацию LOF и пытаюсь сравнить результаты с реализациями в ELKI и RapidMiner, но все 3 дают разные результаты! Я пытаюсь понять, почему.

Мой эталонный набор данных одномерный, 102 реальных значения с множеством дубликатов. Постараюсь выложить ниже.

Во-первых, реализация RapidMiner. Оценки LOF сильно отличаются от ELKI и от моих результатов; многие возвращаются с LOF бесконечности. Была ли эта реализация подтверждена как правильная?

Мои результаты аналогичны ELKI, но я не получаю точно такие же значения LOF. Из быстрого просмотра комментариев в исходном коде ELKI я думаю, что это может быть из-за различий в способах вычисления k-окрестности.

В документе LOF параметр MinPts (в другом месте называемый k) указывает минимальный номер. точек, входящих в k-окрестность. Я думаю, что в реализации ELKI они определяют k-окрестность как ровно k точек, а не как все точки в пределах k-расстояния или k-различного расстояния. Кто-нибудь может точно подтвердить, как ELKI строит k-окрестность? Также есть частная переменная, которая позволяет включить саму точку в свою окрестность, но похоже, что по умолчанию она не включена.

Кто-нибудь знает об общедоступном справочном наборе данных, к которому прикреплены оценки LOF для целей проверки?

--- подробности следуют ---

Ссылка: Исходный код ELKI находится здесь:

http://elki.dbs.ifi.lmu.de/browser/elki/trunk/src/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOF.java

Исходный код RapidMiner находится здесь:

http://code.google.com/p/rapidminer-anomalydetection/source/browse/trunk/src/de/dfki/madm/anomalydetection/evaluator/nearest_neighbor_based/LOFEvaluator.java

Вот мой тестовый набор данных:

4.32323 5.12595 5.12595 5.12595 5.12595 5.7457 5.7457 5.7457 5.7457 5.7457 5.7457 5.97766 5.97766 6.07352 6.07352 6.12015 6.12015 6.12015 6.44797 6.44797 6.48131 6.48131 6.48131 6.48131 6.48131 6.48131 6.6333 6.6333 6.6333 6.70872 6.70872 6.70872 6.70872 6.70872 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 6.77579 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.03654 7.10361 7.10361 7.10361 7.10361 7.10361 7.10361 7.10361 7.10361 7.15651 7.15651 7.15651 7.15651 7.15651 7.15651 7.15651 7.15651 8.22598 8.22598 8.22598 8.22598 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538 8.5538

Например, я получаю следующую оценку LOF для первого числа (4,32323):

  • RapidMiner: бесконечность (с установленными нижними/верхними границами MinPts на 10 100)
  • ELKI: 2,6774 (с k = 10 и параметрами distfunction/reachdistfunction по умолчанию)
  • Моя реализация: 1.9531

Еще немного подробностей о том, что делает моя реализация:

  1. MinPts равно 10, поэтому я нахожу 10 различных соседей точки. Таким образом, окрестность 4,32323 на самом деле составляет 48 точек, от 5,12595 до 6,77579.
  2. Это дает мне k-различное расстояние 2,45256.
  3. Я рассчитываю расстояние достижимости первого соседа как 1,58277.
  4. Я рассчитываю LRD образца как 1/(99,9103/48)
  5. Сумма lrd(o)/lrd(p) для всех 48 соседей равна 93,748939.
  6. Разделите на 48, чтобы получить LOF 1,9531.

person Michael D.    schedule 20.02.2013    source источник
comment
Не могли бы вы добавить результат RapidMiner для minpts=10 (без более высокого максимума)? Было бы интересно посмотреть, согласуется ли он здесь или всегда стремится к бесконечности.   -  person Erich Schubert    schedule 22.02.2013


Ответы (2)


Я на самом деле не удивлен, что они отличаются. Вы также можете добавить реализацию LOF от Weka, и вы, вероятно, получите еще один ответ.

Вот еще одно отличие, которое вы можете добавить к своим уравнениям: насколько мне известно, реализация Rapidminer объединяет точки с одинаковыми координатами. Но, может быть, они забыли учесть эти веса при вычислении ближайших соседей!

В контексте классической базы данных вы не должны объединять повторяющиеся координаты в одно наблюдение. Они по-прежнему являются действительными записями базы данных и должны учитываться как полные записи.

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

Реализация ELKI была проверена на примере ряда учебников, которые мы используем для обучения.

Однако в алгоритме есть крайние случаи, которые не зафиксированы на 100%, поэтому есть место для различий даже в «буквальных» реализациях алгоритма. Вы уже столкнулись с тремя из них:

  1. Как обрабатывать повторяющиеся точки: А) агрегировать, Б) отбрасывать, В) рассматривать разные

    С точки зрения интеллектуального анализа данных, C является правильным, а A (при правильной реализации) является оптимизацией, которая может избавить вас от ненужных вычислений расстояния. B является общепринятым математическим представлением, но не имеет большого смысла для контекста базы данных. Если у меня есть два «Джона Доу», это один и тот же человек?

  2. Определение k ближайших соседей и k-расстояния.

    Обычное определение k-расстояния: наименьшее расстояние, при котором содержится не менее k наблюдений. При исключении точки запроса это дает отклонение до 5,7457 от начальной точки: есть 10 других наблюдений в радиусе 5,7457 - 4,32323.

    K ближайших соседей обычно определяются как любые точки в пределах этого расстояния, которое может быть больше k. Но тогда все дополнительные объекты должны иметь то же расстояние, что и k-й! Кажется, что Rapidminer использует точно k, что не соответствует публикации LOF (см. определение 4 в публикации LOF!)

    На самом деле это k ближайших соседей (включая связи, но в остальном не более k объектов), а не k-е наименьшее различимое расстояние. Откуда вы взяли "отличное"?

    Определения 3 и 4 в публикации LOF довольно ясно показывают набор kNN, который использует LOF.

    Таким образом, ваше соседство с 48 объектами неверно.

  3. Что делать, если повторяющихся точек больше, чем minPts (буквальная реализация даст деление на ноль, но по понятным причинам точка должна иметь LOF 1,0)

    Возможно, это то, что происходит с Rapidminer.

И еще есть расстояние досягаемости: это действительно сложно, потому что это не математическое расстояние. Он асимметричен.

Достижимость первого наблюдения от второго оказывается k-расстоянием второго, которое при беглом просмотре (не проверял дважды) reach-dist(x[0], x[1]) = max(5.97766 - 5.12595, 5.12595 - 4.32323) = 0.80272

См. мои обширные обучающие слайды по обнаружению выбросов для пошаговой пошаговая демонстрация того, как вычислить LOF. Насколько я могу судить, это буквальный LOF. Он не затрагивает всех крайних случаев, но мотивирует разработку алгоритма LOF и является довольно исчерпывающим.

person Erich Schubert    schedule 20.02.2013
comment
Фантастический, исчерпывающий ответ, Эрих, спасибо! Что касается k-различных расстояний, я получил это из статьи LOF, после определения 6 там говорится: «Чтобы иметь дело с дубликатами, мы можем основывать наше понятие соседства на k-различном расстоянии, определенном аналогично k-расстоянию в определении 3». , с дополнительным требованием наличия не менее k объектов с разными пространственными координатами. На самом деле это не реализовано в статье (для простоты мы не будем рассматривать этот случай явно, а просто предположим, что дубликатов нет); 48 пунктов - это моя интерпретация того, что имели в виду авторы. - person Michael D.; 21.02.2013
comment
P.S. Я также рассчитал расстояние достижимости как расстояние k до второй точки, но я использовал расстояние k-различных, поэтому я получил 1,58277. - person Michael D.; 21.02.2013
comment
Хорошо, я сделал другую версию своей реализации, которая использует k-расстояние вместо k-различимого расстояния. Для первой точки я получаю ровно 10 соседей, а расстояние достижимости первого соседа (5,12595), как вы сказали, составляет 0,802725. 1/LRD составляют 1,174572 для точки и 0,754913, 0,41152 для соседей. Итак, я вычисляю LOF равным 2,3349; ближе к результату ELKI, но все же отличается! - person Michael D.; 21.02.2013
comment
1.174572 мне нравится. Но для точек 2-5 я получаю 1/1rd из 0,72518 (обратите внимание на эти LRD и используйте правильную достижимость: lrd(o from neighbor):=max(kdist(neighbor), dist(o,neighbor))!) - person Erich Schubert; 21.02.2013
comment
Нашел проблему: я правильно рассчитывал расстояния достижимости, но я делил сумму расстояний достижимости на количество точек в окрестности p вместо количества точек в окрестности o. Исправлено, и теперь я получаю те же результаты, что и ELKI. Спасибо, я не уверен, что смог бы понять это без вашей помощи! - person Michael D.; 21.02.2013
comment
Если кто-то с репутацией 2000 и выше читает эту ветку, не могли бы вы создать тег elki и отметить этот вопрос? - person Michael D.; 21.02.2013

Если вы используете расширение обнаружения аномалий для RapidMiner[1] (а не встроенный LOF), вы получите правильные результаты. Встроенный LOF сломан. Это те же результаты, что и ELKI. Эта реализация намного быстрее, чем ELKI, потому что она многопоточна и использует гораздо меньше памяти. Он также может обрабатывать дубликаты (даже больше, чем k+1), когда ELKI генерирует исключения. (на основе k-различных)

Лучший, Ханс

[1] http://marketplace.rapid-i.com/UpdateServer/faces/product_details.xhtml?productId=rmx_anomalydetection

person hans    schedule 26.04.2013
comment
У вас есть тестовый случай, когда ELKI выдает исключение? Когда я передаю ему набор данных с большим количеством дубликатов, они получают разумную оценку выброса 1,0 для каждого. Реализация ELKI LOF позволяет избежать деления на 0 и обрабатывает knn, как определено в статье. - person Erich Schubert; 21.05.2013