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
не поддерживает predict
, decision_function
и score_samples
методы по умолчанию , но только fit_predict
способом, поскольку эта оценка была первоначально означало быть применены для обнаружения аномального значения. Оценки отклонений обучающих выборок доступны через negative_outlier_factor_
атрибут.
Если вы действительно хотите использовать neighbors.LocalOutlierFactor
для обнаружения новизны, то есть прогнозировать метки или вычислять оценку отклонения от нормы новых невидимых данных, вы можете создать экземпляр оценщика с novelty
параметром, установленным на, True
прежде чем подбирать оценщик. В этом случае fit_predict
недоступен.
Предупреждение Обнаружение новинок с помощью локального выброса
When novelty
установлен, чтобы True
знать, что вы должны использовать predict
, decision_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, соответствует вероятности нахождения нового, но регулярное, наблюдения за пределами границы.
Рекомендации
- Оценка поддержки многомерного распределения Schölkopf, Bernhard, et al. Нейронные вычисления 13.7 (2001): 1443-1471.
Примеры
- См. Раздел Одноклассная SVM с нелинейным ядром (RBF) для визуализации границ, изученных
svm.OneClassSVM
объектом вокруг некоторых данных . - Моделирование распространения видов
2.7.3. Обнаружение выбросов
Обнаружение выбросов аналогично обнаружению новизны в том смысле, что цель состоит в том, чтобы отделить ядро регулярных наблюдений от некоторых загрязняющих, называемых выбросами . Тем не менее, в случае обнаружения выбросов у нас нет чистого набора данных, представляющего совокупность регулярных наблюдений, которые можно использовать для обучения любого инструмента.
2.7.3.1. Подгонка эллиптического конверта
Один из распространенных способов обнаружения выбросов — это предположить, что обычные данные происходят из известного распределения (например, данные распределены по Гауссу). Исходя из этого предположения, мы обычно пытаемся определить «форму» данных и можем определить внешние наблюдения как наблюдения, которые достаточно далеки от формы соответствия.
Scikit-learn предоставляет объект, covariance.EllipticEnvelope
который соответствует надежной оценке ковариации данным и, таким образом, соответствует эллипсу центральным точкам данных, игнорируя точки за пределами центрального режима.
Например, предполагая, что входящие данные распределены по Гауссу, он будет надежно оценивать местоположение и ковариацию вхождения (т. Е. Не подвергаясь влиянию выбросов). Расстояния Махаланобиса, полученные из этой оценки, используются для определения степени удаленности. Эта стратегия проиллюстрирована ниже.
Примеры
- См. Раздел «Робастная оценка ковариации» и «Соответствие расстояний Махаланобиса» для иллюстрации разницы между использованием стандартной (
covariance.EmpiricalCovariance
) или надежной оценки (covariance.MinCovDet
) местоположения и ковариации для оценки степени исключительности наблюдения.
Рекомендации
- Руссеу, П.Дж., Ван Дриссен, К. «Быстрый алгоритм для минимальной оценки детерминанта ковариации» 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
Примеры
- См. Пример IsolationForest для иллюстрации использования IsolationForest.
- См Сравнение алгоритмов обнаружения аномалий для обнаружения Outlier на игрушечных наборов данных для сравнения
ensemble.IsolationForest
сneighbors.LocalOutlierFactor
,svm.OneClassSVM
(настроенным для выполнения как метод обнаружения выбросов) и ковариационной на основе обнаружения с выбросомcovariance.EllipticEnvelope
.
Рекомендации
- Лю, Фэй Тони, Тин, Кай Мин и Чжоу, Чжи-Хуа. «Изоляционный лес». 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 для обнаружения аномального значения, не существует predict
, decision_function
и score_samples
методы , но только fit_predict
метод. Оценки отклонений обучающих выборок доступны через negative_outlier_factor_
атрибут. Следует отметить , что predict
, decision_function
и score_samples
может быть использовано на новых невидимых данных , когда МВУ применяется для обнаружения новизны, то есть , когда novelty
параметр установлен на True
. См. Обнаружение новинок с помощью локального выброса.
Эта стратегия проиллюстрирована ниже.
Примеры
- См. Раздел Обнаружение выбросов с помощью локального фактора выбросов (LOF) для иллюстрации использования
neighbors.LocalOutlierFactor
. - См. Сравнение алгоритмов обнаружения аномалий для обнаружения выбросов в наборах данных игрушек для сравнения с другими методами обнаружения аномалий.
Рекомендации
- Breunig, Kriegel, Ng, and Sander (2000) LOF: определение локальных выбросов на основе плотности. Proc. ACM SIGMOD
2.7.4. Обнаружение новизны с помощью локального выброса
Чтобы использовать neighbors.LocalOutlierFactor
для обнаружения новизны, т. е. Прогнозировать метки или вычислять оценку отклонения от нормы новых невидимых данных, вам необходимо создать экземпляр оценщика с novelty
параметром, установленным на, True
прежде чем подбирать оценщик:
lof = LocalOutlierFactor(novelty=True) lof.fit(X_train)
Обратите внимание, что fit_predict
в этом случае это недоступно.
Предупреждение Обнаружение новинок с помощью Local Outlier Factor`
When novelty
установлен, чтобы True
знать, что вы должны использовать predict
, decision_function
и только score_samples
для новых невидимых данных, а не для обучающих выборок, так как это приведет к неверным результатам. Оценки отклонений обучающих выборок всегда доступны через negative_outlier_factor_
атрибут.
Обнаружение новинок с помощью локального выброса показано ниже.