2.7. Обнаружение новизны и выбросов

Многие приложения требуют наличия возможности решить, принадлежит ли новое наблюдение тому же распределению, что и существующие наблюдения (это промежуточный результат ), или его следует рассматривать как другое (это выброс ). Часто эта возможность используется для очистки реальных наборов данных. Необходимо сделать два важных различия:

обнаружение выбросов  Данные обучения содержат выбросы, которые определяются как наблюдения, далекие от других. Таким образом, оценщики обнаружения выбросов пытаются соответствовать регионам, в которых обучающие данные наиболее сконцентрированы, игнорируя отклоняющиеся наблюдения.

обнаружение новизны  Данные обучения не загрязнены выбросами, и мы заинтересованы в том, чтобы определить, является ли новое наблюдение выбросом. В этом контексте выброс также называется новинкой.

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

Проект scikit-learn предоставляет набор инструментов машинного обучения, которые можно использовать как для обнаружения новинок, так и для обнаружения выбросов. Эта стратегия реализуется с помощью неконтролируемого обучения объектов на основе данных:

estimator.fit(X_train)

новые наблюдения могут быть отсортированы как выбросы или выбросы с помощью predict метода:

estimator.predict(X_test)

Выбросы помечены как 1, а выбросы помечены как -1. В методе прогнозирования используется порог необработанной функции оценки, вычисляемый оценщиком. Эта функция оценки доступна через score_samplesметод, а порог можно регулировать с помощью contaminationпараметра.

decision_functionМетод также определяются из функции подсчета очков, таким образом , что отрицательные значения являются выбросы и неотрицательных из них являются inliers:

estimator.decision_function(X_test)

Обратите внимание , что neighbors.LocalOutlierFactor не поддерживает predictdecision_function и score_samples методы по умолчанию , но только fit_predict способом, поскольку эта оценка была первоначально означало быть применены для обнаружения аномального значения. Оценки отклонений обучающих выборок доступны через negative_outlier_factor_ атрибут.

Если вы действительно хотите использовать neighbors.LocalOutlierFactor для обнаружения новизны, то есть прогнозировать метки или вычислять оценку отклонения от нормы новых невидимых данных, вы можете создать экземпляр оценщика с novelty параметром, установленным на, True прежде чем подбирать оценщик. В этом случае fit_predict недоступен.

Предупреждение Обнаружение новинок с помощью локального выброса

When novelty установлен, чтобы True знать, что вы должны использовать predictdecision_functionи только score_samples для новых невидимых данных, а не для обучающих выборок, так как это приведет к неверным результатам. Оценки отклонений обучающих выборок всегда доступны через negative_outlier_factor_ атрибут.

Поведение neighbors.LocalOutlierFactor обобщено в следующей таблице.

МетодОбнаружение выбросовОбнаружение новинок
fit_predictОКНедоступен
predictНедоступенИспользовать только для новых данных
decision_functionНедоступенИспользовать только для новых данных
score_samplesИспользовать negative_outlier_factor_Использовать только для новых данных

2.7.1. Обзор методов обнаружения выбросов

Сравнение алгоритмов обнаружения выбросов в scikit-learn. Локальный фактор выброса (LOF) не показывает границу принятия решения черным цветом, поскольку у него нет метода прогнозирования, который можно было бы применить к новым данным, когда он используется для обнаружения выбросов.

ensemble.IsolationForest и neighbors.LocalOutlierFactor достаточно хорошо работать с рассматриваемыми здесь наборами данных. svm.OneClassSVM, Как известно, чувствительны к выбросам и , таким образом , не выполняет очень хорошо для обнаружения аномального значения. При этом обнаружение выбросов в большой размерности или без каких-либо предположений о распределении исходных данных является очень сложной задачей. svm.OneClassSVM может по-прежнему использоваться с обнаружением выбросов, но требует точной настройки его гиперпараметра nuдля обработки выбросов и предотвращения переобучения. Наконец, covariance.EllipticEnvelope предполагается, что данные являются гауссовыми и изучает эллипс. Для получения дополнительных сведений о различных средствах оценки обратитесь к примеру Сравнение алгоритмов обнаружения аномалий для обнаружения выбросов в наборах данных игрушек и в разделах ниже.

2.7.2. Обнаружение новизны

Рассмотрим набор данных n наблюдения из того же распределения, описанного $p$ особенности. Теперь представьте, что мы добавляем к этому набору данных еще одно наблюдение. Неужели новое наблюдение настолько отличается от других, что мы можем сомневаться в его регулярности? (т.е. происходит ли он из того же распределения?) Или, наоборот, он настолько похож на другой, что мы не можем отличить его от исходных наблюдений? На этот вопрос решают средства и методы обнаружения новинок.

В общем, он собирается изучить приблизительную, близкую границу, ограничивающую контур распределения начальных наблюдений, нанесенный на вложение. p-мерное пространство. Затем, если дальнейшие наблюдения лежат в подпространстве, ограниченном границами, они считаются исходящими от той же популяции, что и первоначальные наблюдения. В противном случае, если они лежат за границей, мы можем сказать, что они ненормальные, с определенной уверенностью в нашей оценке.

Одноклассная SVM была представлена ​​Schölkopf et al. для этой цели и реализован в модуле Support Vector Machines в svm.OneClassSVM объекте. Для определения границы требуется выбор ядра и скалярного параметра. Обычно выбирается ядро ​​RBF, хотя точной формулы или алгоритма для установки его параметра полосы пропускания не существует. Это значение по умолчанию в реализации scikit-learn. Параметр nu, также известный как края одноклассной SVM, соответствует вероятности нахождения нового, но регулярное, наблюдения за пределами границы.

Рекомендации

Примеры

2.7.3. Обнаружение выбросов

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

2.7.3.1. Подгонка эллиптического конверта

Один из распространенных способов обнаружения выбросов — это предположить, что обычные данные происходят из известного распределения (например, данные распределены по Гауссу). Исходя из этого предположения, мы обычно пытаемся определить «форму» данных и можем определить внешние наблюдения как наблюдения, которые достаточно далеки от формы соответствия.

Scikit-learn предоставляет объект, covariance.EllipticEnvelope который соответствует надежной оценке ковариации данным и, таким образом, соответствует эллипсу центральным точкам данных, игнорируя точки за пределами центрального режима.

Например, предполагая, что входящие данные распределены по Гауссу, он будет надежно оценивать местоположение и ковариацию вхождения (т. Е. Не подвергаясь влиянию выбросов). Расстояния Махаланобиса, полученные из этой оценки, используются для определения степени удаленности. Эта стратегия проиллюстрирована ниже.

Примеры

Рекомендации

  • Руссеу, П.Дж., Ван Дриссен, К. «Быстрый алгоритм для минимальной оценки детерминанта ковариации» Technometrics 41 (3), 212 (1999)

2.7.3.2. Лес изоляции

Одним из эффективных способов обнаружения выбросов в наборах данных большой размерности является использование случайных лесов. Эти ensemble.IsolationForest наблюдения «изолирует» от случайного выбора функции и затем случайным образом выбирают раздвоение значение между максимальным и минимальным значениями выбранной функции.

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

Эта длина пути, усредненная по лесу таких случайных деревьев, является мерой нормальности и нашей решающей функцией.

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

Реализация ensemble.IsolationForest основана на ансамбле tree.ExtraTreeRegressor. В соответствии с исходным документом Isolation Forest максимальная глубина каждого дерева установлена ​​на $\lceil \log_2(n) \rceil$ где $n$ — количество образцов, использованных для построения дерева (подробнее см. (Liu et al., 2008)).

Этот алгоритм проиллюстрирован ниже.

В ensemble.IsolationForest опоры , warm_start=True которая позволяет добавлять больше деревьев к уже установленной модели:

>>> from sklearn.ensemble import IsolationForest
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [0, 0], [-20, 50], [3, 5]])
>>> clf = IsolationForest(n_estimators=10, warm_start=True)
>>> clf.fit(X)  # fit 10 trees  
>>> clf.set_params(n_estimators=20)  # add 10 more trees  
>>> clf.fit(X)  # fit the added trees 

Примеры

Рекомендации

  • Лю, Фэй Тони, Тин, Кай Мин и Чжоу, Чжи-Хуа. «Изоляционный лес». Data Mining, 2008. ICDM’08. Восьмая международная конференция IEEE по.

2.7.3.3. Фактор локальных выбросов

Еще один эффективный способ обнаружения выбросов в наборах данных средней размерности — использование алгоритма Local Outlier Factor (LOF).

neighbors.LocalOutlierFactor (МВА) алгоритм вычисляет оценка ( так называемой локальным фактором отклоняющихся значений) , что отражает степень ненормальности наблюдений. Он измеряет локальное отклонение плотности данной точки данных по отношению к ее соседям. Идея состоит в том, чтобы обнаружить образцы, которые имеют значительно меньшую плотность, чем их соседи.

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

Число k рассматриваемых соседей (параметр псевдонима n_neighbors) обычно выбирается: 1) больше, чем минимальное количество объектов, которое должен содержать кластер, так что другие объекты могут быть локальными выбросами относительно этого кластера, и 2) меньше максимального количество близлежащих объектов, которые потенциально могут быть локальными выбросами. На практике такая информация обычно недоступна, и использование n_neighbors = 20 в целом работает хорошо. Когда доля выбросов высока (то есть больше 10%, как в примере ниже), n_neighbors должно быть больше (n_neighbors = 35 в примере ниже).

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

При применении не LOF для обнаружения аномального значения, не существует predictdecision_function и score_samples методы , но только fit_predict метод. Оценки отклонений обучающих выборок доступны через negative_outlier_factor_ атрибут. Следует отметить , что predictdecision_function и score_samples может быть использовано на новых невидимых данных , когда МВУ применяется для обнаружения новизны, то есть , когда novelty параметр установлен на True. См. Обнаружение новинок с помощью локального выброса.

Эта стратегия проиллюстрирована ниже.

Рекомендации

2.7.4. Обнаружение новизны с помощью локального выброса

Чтобы использовать neighbors.LocalOutlierFactor для обнаружения новизны, т. е. Прогнозировать метки или вычислять оценку отклонения от нормы новых невидимых данных, вам необходимо создать экземпляр оценщика с novelty параметром, установленным на, True прежде чем подбирать оценщик:

lof = LocalOutlierFactor(novelty=True)
lof.fit(X_train)

Обратите внимание, что fit_predict в этом случае это недоступно.

Предупреждение Обнаружение новинок с помощью Local Outlier Factor`

When noveltyустановлен, чтобы True знать, что вы должны использовать predictdecision_function и только score_samples для новых невидимых данных, а не для обучающих выборок, так как это приведет к неверным результатам. Оценки отклонений обучающих выборок всегда доступны через negative_outlier_factor_ атрибут.

Обнаружение новинок с помощью локального выброса показано ниже.