Является ли Isolation Forest (iForest) методом, который можно напрямую применить к большим данным?
Я пытаюсь понять, возможно ли применить iForest напрямую к очень большому набору данных, который является статическим (фиксированный размер, как по количеству элементов, так и по размерности), без использования распределенных сред обработки, таких как hadoop или spark? Или даже такой набор данных считается большими данными?
Когда я говорю прямо, я имею в виду, что нет необходимости загружать все данные в ОЗУ, потому что, как вы знаете, iForest использует субсэмплинг для создания iTrees, и я точно не знаю, где скорость дискового ввода-вывода влияет на выполнение алгоритма или нет!
На самом деле, я разработал новый метод в качестве тезиса MS для локального обнаружения выбросов в больших данных, который основан на старом алгоритме масштабируемой кластеризации с именем BFR, но с небольшим отличием в структуре гауссовых кластеров, что они могут быть коррелированы. Как и в случае с BFR, нет необходимости загружать все данные в оперативную память и сканировать все данные по частям. Сначала он получает случайную выборку целых данных для получения самой первой информации о кластеризации, а затем применяет масштабируемую кластеризацию для завершения модели кластеризации и, наконец, при повторном сканировании всего набора данных он присваивает каждому объекту показатель выброса с именем SDCOR (Scalable Плотность на основе кластеризационного отношения выбросов). Но дело в том, что тип данных, которые я использовал, является статическим, а не потоковым, и даже максимальный размер синтетических данных составляет около 1 на 40 измерений, а их объем составляет менее 400 мегабайт. Но я теоретически и эмпирически доказал, что он масштабируемый и его временная сложность линейна с низкой константой, поскольку для упомянутого набора данных 1х6 на 40 он завершает обработку со 100% AUC примерно за 4 минуты, и я Я уверен, что это может быть даже меньше, улучшив реализацию. Я реализовал весь метод в MATLAB 9 и даже создал прекрасный графический интерфейс, и в настоящее время я записываю статью моего упомянутого тезиса, но меня беспокоит отзывы судей о сути статьи, которая утверждает, что Big Данные вещи!
Вот таблица окончательных результатов моего метода (SDCOR) и других конкурирующих методов на реальных и синтетических наборах данных: Примечание. Значения, выделенные жирным шрифтом, являются лучшими среди всех методов.
Любые полезные комментарии будут приветствоваться!;-) Спасибо...
2 ответа
iForest - это чрезвычайно простой (и, следовательно, быстрый) метод оценки плотности, основанный на подвыборке. Это не самая умная техника; это в основном показывает один из недостатков оценки в обнаружении выбросов, и что многие наборы данных лучше всего решать с помощью простой оценки плотности (из-за этого вы всегда должны включать выбросы kNN с k=1,2,5,10 - потому что на невероятно большом количестве данных устанавливает, этот тривиальный подход будет работать очень хорошо). И, конечно, на таких данных плотности, iForest будет блестеть, будучи очень быстрым оценщиком приблизительной плотности. Результаты iForest обычно будут коррелировать с kNN, но будут лучше масштабироваться из-за приближения.
На ваших скриншотах такие наборы данных в значительной степени бессмысленны. Всякий раз, когда у вас есть набор данных, где любой метод имеет 100%, это просто означает, что данные слишком идеализированы, и это слишком много.
Да, вы можете легко масштабировать его до абсурдного размера, потому что он все равно использует только выборку.
Для координатных данных никогда не используйте Spark и т. Д. - после предварительной обработки такие данные практически никогда не бывают достаточно большими, чтобы оправдать издержки Spark (просто посчитайте: сколько точек данных помещается в основную память? - у вас не может быть "больших данных") с низкоразмерными точечными данными вам нужен текст, графики, фотографии или, что еще лучше, видео). Почти всегда более эффективно - и возможно с сегодняшней памятью - использовать индексируемое в памяти решение, такое как ELKI, чем Matlab, потому что, насколько я знаю, Matlab не имеет таких индексов. Если вы хотите стать еще быстрее, используйте приближенных ближайших соседей, таких как libANN или FLANN (но вам нужно будет написать код самостоятельно, я обычно использую ELKI, потому что он имеет почти каждый важный метод, готовый попробовать).
Выброс не всегда "злодей". Выбросы обычно имеют характеристики, отличные от обычных, и всегда указывают ценную информацию и знания в наборе данных. Поэтому обнаружение выбросов играет важную роль в различных приложениях. Поэтому важно обосновать, был ли выброс действительно информационным самородком или был ошибкой в сборе данных. Как только это различие будет четко определено, можно провести дальнейший анализ. Дело в том, что если вы не собрали данные и в наборе данных есть выбросы, то вам нужна очень веская причина, чтобы сначала доказать, что это выброс, а затем выполнить обработку выброса.
Пока набор данных может помещаться во вторичной памяти одного автономного компьютера, это НЕ большие данные. Оперативная память (RAM) предназначена для обработки, а не для хранения. Основываясь на этой аналогии, данные датчиков погоды в реальном времени можно считать большими, поскольку они представлены в реальном времени. Обратите внимание, что данные датчика погоды могут записывать только несколько измерений, как
air-quality
, Другим примером являютсяtweets
в Твиттере.