Scikit Learn - Обнаружение аномалий

Здесь мы узнаем о том, что такое обнаружение аномалий в Sklearn и как оно используется для идентификации точек данных.

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

  • Point anomalies - Это происходит, когда отдельный экземпляр данных считается аномальным по отношению к остальным данным.

  • Contextual anomalies- Такая аномалия зависит от контекста. Это происходит, если экземпляр данных является аномальным в определенном контексте.

  • Collective anomalies - Это происходит, когда набор связанных экземпляров данных является аномальным в отношении всего набора данных, а не отдельных значений.

Методы

Два метода, а именно outlier detection и novelty detectionможет использоваться для обнаружения аномалий. Необходимо видеть разницу между ними.

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

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

Обнаружение новинок

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

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

estimator.fit(X_train)

Теперь новые наблюдения будут отсортированы как inliers (labeled 1) или же outliers (labeled -1) используя метод predic () следующим образом:

estimator.fit(X_test)

Оценщик сначала вычислит функцию необработанной оценки, а затем метод прогнозирования будет использовать порог для этой функции оценки. Мы можем получить доступ к этой функции необработанной оценки с помощьюscore_sample метод и может контролировать порог с помощью contamination параметр.

Мы также можем определить decision_function метод, определяющий выбросы как отрицательное значение, а выбросы как неотрицательное значение.

estimator.decision_function(X_test)

Алгоритмы Sklearn для обнаружения выбросов

Давайте начнем с понимания, что такое эллиптическая оболочка.

Установка эллиптического конверта

Этот алгоритм предполагает, что обычные данные поступают из известного распределения, такого как распределение Гаусса. Для обнаружения выбросов Scikit-learn предоставляет объект с именемcovariance.EllipticEnvelop.

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

Параметры

В следующей таблице представлены параметры, используемые sklearn. covariance.EllipticEnvelop метод -

Старший Нет Параметр и описание
1

store_precision - Логическое значение, необязательно, по умолчанию = True

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

2

assume_centered - Логическое значение, необязательно, по умолчанию = False

Если мы установим его в False, он будет вычислять устойчивое местоположение и ковариацию напрямую с помощью алгоритма FastMCD. С другой стороны, если установлено True, будет вычислена поддержка надежного местоположения и ковариантности.

3

support_fraction - float in (0., 1.), необязательно, по умолчанию = None

Этот параметр сообщает методу, какая доля точек должна быть включена в поддержку необработанных оценок MCD.

4

contamination - float in (0., 1.), необязательно, по умолчанию = 0.1

Он показывает долю выбросов в наборе данных.

5

random_state - int, экземпляр RandomState или None, необязательно, по умолчанию = none

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

  • int - В этом случае random_state - начальное число, используемое генератором случайных чисел.

  • RandomState instance- В этом случае random_state - это генератор случайных чисел.

  • None - В этом случае генератором случайных чисел является экземпляр RandonState, используемый np.random.

Атрибуты

В следующей таблице представлены атрибуты, используемые sklearn. covariance.EllipticEnvelop метод -

Старший Нет Атрибуты и описание
1

support_ - в виде массива, форма (n_samples,)

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

2

location_ - в виде массива, форма (n_features)

Он возвращает предполагаемое надежное местоположение.

3

covariance_ - в виде массива, форма (n_features, n_features)

Он возвращает оцененную устойчивую матрицу ковариации.

4

precision_ - в виде массива, форма (n_features, n_features)

Он возвращает предполагаемую псевдообратную матрицу.

5

offset_ - плавать

Он используется для определения функции принятия решения на основе исходных оценок. decision_function = score_samples -offset_

Implementation Example

import numpy as np^M
from sklearn.covariance import EllipticEnvelope^M
true_cov = np.array([[.5, .6],[.6, .4]])
X = np.random.RandomState(0).multivariate_normal(mean = [0, 0], cov=true_cov,size=500)
cov = EllipticEnvelope(random_state = 0).fit(X)^M
# Now we can use predict method. It will return 1 for an inlier and -1 for an outlier.
cov.predict([[0, 0],[2, 2]])

Output

array([ 1, -1])

Лес изоляции

В случае набора данных большой размерности одним из эффективных способов обнаружения выбросов является использование случайных лесов. Scikit-learn предоставляетensemble.IsolationForestметод, который изолирует наблюдения путем случайного выбора объекта. После этого он случайным образом выбирает значение между максимальным и минимальным значениями выбранных функций.

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

Параметры

В следующей таблице представлены параметры, используемые sklearn. ensemble.IsolationForest метод -

Старший Нет Параметр и описание
1

n_estimators - int, необязательно, по умолчанию = 100

Он представляет количество базовых оценщиков в ансамбле.

2

max_samples - int или float, необязательно, по умолчанию = «auto»

Он представляет количество выборок, которые должны быть взяты из X для обучения каждой базовой оценки. Если мы выберем int в качестве значения, он будет рисовать образцы max_samples. Если мы выберем float в качестве его значения, он будет рисовать образцы max_samples ∗ .shape [0]. И, если мы выберем auto в качестве значения, он будет рисовать max_samples = min (256, n_samples).

3

support_fraction - float in (0., 1.), необязательно, по умолчанию = None

Этот параметр сообщает методу, какая доля точек должна быть включена в поддержку необработанных оценок MCD.

4

contamination - auto или float, необязательно, по умолчанию = auto

Он показывает долю выбросов в наборе данных. Если мы установим его по умолчанию, то есть автоматически, он будет определять порог, как в исходной статье. Если установлено значение float, диапазон загрязнения будет в диапазоне [0,0.5].

5

random_state - int, экземпляр RandomState или None, необязательно, по умолчанию = none

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

  • int - В этом случае random_state - начальное число, используемое генератором случайных чисел.

  • RandomState instance- В этом случае random_state - это генератор случайных чисел.

  • None - В этом случае генератором случайных чисел является экземпляр RandonState, используемый np.random.

6

max_features - int или float, необязательно (по умолчанию = 1.0)

Он представляет количество функций, которые нужно нарисовать из X для обучения каждой базовой оценки. Если мы выберем int в качестве его значения, он будет рисовать функции max_features. Если мы выберем float в качестве его значения, он будет рисовать образцы max_features * X.shape [].

7

bootstrap - Логическое значение, необязательно (по умолчанию = False)

Его параметр по умолчанию - False, что означает, что выборка будет выполняться без замены. А с другой стороны, если установлено значение True, это означает, что отдельные деревья подходят для случайного подмножества обучающих данных, выбранных с заменой.

8

n_jobs - int или None, необязательно (по умолчанию = None)

Он представляет количество заданий, которые будут выполняться параллельно для fit() и predict() методы оба.

9

verbose - int, необязательно (по умолчанию = 0)

Этот параметр контролирует степень детализации процесса построения дерева.

10

warm_start - Bool, необязательно (по умолчанию = False)

Если warm_start = true, мы можем повторно использовать решение предыдущих вызовов для соответствия и можем добавить больше оценок в ансамбль. Но если установлено значение false, нам нужно подогнать под целый новый лес.

Атрибуты

В следующей таблице представлены атрибуты, используемые sklearn. ensemble.IsolationForest метод -

Старший Нет Атрибуты и описание
1

estimators_ - список DecisionTreeClassifier

Предоставление коллекции всех установленных суб-оценок.

2

max_samples_ - целое число

Он показывает фактическое количество использованных образцов.

3

offset_ - плавать

Он используется для определения функции принятия решения на основе исходных оценок. decision_function = score_samples -offset_

Implementation Example

Скрипт Python ниже будет использовать sklearn. ensemble.IsolationForest метод подгонки 10 деревьев на заданные данные

from sklearn.ensemble import IsolationForest
import numpy as np
X = np.array([[-1, -2], [-3, -3], [-3, -4], [0, 0], [-50, 60]])
OUTDClf = IsolationForest(n_estimators = 10)
OUTDclf.fit(X)

Output

IsolationForest(
   behaviour = 'old', bootstrap = False, contamination='legacy',
   max_features = 1.0, max_samples = 'auto', n_estimators = 10, n_jobs=None,
   random_state = None, verbose = 0
)

Фактор местного выброса

Алгоритм Local Outlier Factor (LOF) - еще один эффективный алгоритм для обнаружения выбросов в данных большой размерности. Scikit-learn предоставляетneighbors.LocalOutlierFactorметод, который вычисляет оценку, называемую фактором локального выброса, отражающим степень аномальности наблюдений. Основная логика этого алгоритма заключается в обнаружении образцов, которые имеют существенно меньшую плотность, чем его соседи. Вот почему он измеряет локальное отклонение плотности заданных точек данных относительно их соседей.

Параметры

В следующей таблице представлены параметры, используемые sklearn. neighbors.LocalOutlierFactor метод

Старший Нет Параметр и описание
1

n_neighbors - int, необязательно, по умолчанию = 20

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

2

algorithm - необязательно

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

  • Если вы выберете ball_tree, он будет использовать алгоритм BallTree.

  • Если вы выберете kd_tree, он будет использовать алгоритм KDTree.

  • Если вы выберете brute, он будет использовать алгоритм поиска грубой силы.

  • Если вы выберете auto, он выберет наиболее подходящий алгоритм на основе значения, которое мы передали в метод fit ().

3

leaf_size - int, необязательно, по умолчанию = 30

Значение этого параметра может влиять на скорость построения и запроса. Это также влияет на объем памяти, необходимый для хранения дерева. Этот параметр передается в алгоритмы BallTree или KdTree.

4

contamination - auto или float, необязательно, по умолчанию = auto

Он показывает долю выбросов в наборе данных. Если мы установим его по умолчанию, то есть автоматически, он будет определять порог, как в исходной статье. Если установлено значение float, диапазон загрязнения будет в диапазоне [0,0.5].

5

metric - строка или вызываемый, по умолчанию

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

6

P - int, необязательно (по умолчанию = 2)

Это параметр для метрики Минковского. P = 1 эквивалентно использованию manhattan_distance, то есть L1, тогда как P = 2 эквивалентно использованию euclidean_distance, то есть L2.

7

novelty - Boolean, (по умолчанию = False)

По умолчанию алгоритм LOF используется для обнаружения выбросов, но его можно использовать для обнаружения новизны, если мы устанавливаем новизну = true.

8

n_jobs - int или None, необязательно (по умолчанию = None)

Он представляет собой количество заданий, которые должны выполняться параллельно для методов fit () и Forex ().

Атрибуты

В следующей таблице представлены атрибуты, используемые sklearn.neighbors.LocalOutlierFactor метод -

Старший Нет Атрибуты и описание
1

negative_outlier_factor_ - массив numpy, форма (n_samples,)

Предоставление противоположных LOF обучающих выборок.

2

n_neighbors_ - целое число

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

3

offset_ - плавать

Он используется для определения двоичных меток из исходных оценок.

Implementation Example

Приведенный ниже сценарий Python будет использовать sklearn.neighbors.LocalOutlierFactor метод для создания класса NeighborsClassifier из любого массива, соответствующего нашему набору данных

from sklearn.neighbors import NearestNeighbors
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
LOFneigh = NearestNeighbors(n_neighbors = 1, algorithm = "ball_tree",p=1)
LOFneigh.fit(samples)

Output

NearestNeighbors(
   algorithm = 'ball_tree', leaf_size = 30, metric='minkowski',
   metric_params = None, n_jobs = None, n_neighbors = 1, p = 1, radius = 1.0
)

Example

Теперь мы можем спросить у этого сконструированного классификатора, является ли закрытая точка для [0.5, 1., 1.5], используя следующий скрипт Python -

print(neigh.kneighbors([[.5, 1., 1.5]])

Output

(array([[1.7]]), array([[1]], dtype = int64))

Одноклассовая SVM

Одноклассная SVM, представленная Шёлкопфом и др., Представляет собой неконтролируемое обнаружение выбросов. Он также очень эффективен в данных высокой размерности и оценивает поддержку распределения высокой размерности. Он реализован вSupport Vector Machines модуль в Sklearn.svm.OneClassSVMобъект. Для определения границы требуется ядро ​​(чаще всего используется RBF) и скалярный параметр.

Для лучшего понимания давайте сопоставим наши данные с svm.OneClassSVM объект -

пример

from sklearn.svm import OneClassSVM
X = [[0], [0.89], [0.90], [0.91], [1]]
OSVMclf = OneClassSVM(gamma = 'scale').fit(X)

Теперь мы можем получить score_samples для входных данных следующим образом:

OSVMclf.score_samples(X)

Вывод

array([1.12218594, 1.58645126, 1.58673086, 1.58645127, 1.55713767])