Обнаружение аномалии с лесом изоляции

Введение в лес изоляции

Лесной алгоритм изоляции [1] обнаруживает аномалии путем изоляции аномалий от нормальных точек с помощью ансамбля деревьев изоляции. Каждое дерево изоляции обучено подмножеству учебных наблюдений, произведенных без замен. Алгоритм выращивает дерево изоляции путем выбора переменной разделения и положения разделения наугад, пока каждое наблюдение в подмножестве не приземляется в отдельной вершине. Аномалии - немногие и отличающийся; поэтому, аномалия приземляется в отдельной вершине ближе к корневому узлу и имеет более короткую длину пути (расстояние от корневого узла до вершины), чем нормальные точки. Алгоритм идентифицирует аномалии с помощью баллов аномалии, заданных на основе средних длин пути по всем деревьям изоляции.

Используйте iforest функция, IsolationForest объект, и isanomaly возразите функции для обнаружения новинки и определения выбросов.

  • Определение выбросов (обнаруживающий аномалии в обучающих данных) — Обнаруживает аномалии в обучающих данных при помощи iforest функция. iforest создает IsolationForest возразите и возвращает индикаторы аномалии и музыку к обучающим данным. Для примера смотрите, Обнаруживают Выбросы.

  • Обнаружение новинки (обнаруживающий аномалии в новых данных с незагрязненными обучающими данными) — Создает IsolationForest объект путем передачи незагрязненных обучающих данных (данные без выбросов) к iforest, и обнаружьте аномалии в новых данных путем передачи объекта и новых данных к объектной функции isanomaly. Для каждого наблюдения за новыми данными функция находит, что средняя длина пути достигает вершины от корневого узла в обученном лесу изоляции и возвращает идентификатор аномалии и счет. Для примера смотрите, Обнаруживают Новинки.

Параметры для лесов изоляции

Можно задать параметры для лесного алгоритма изоляции при помощи аргументов name-value iforest:

  • NumObservationsPerLearner (количество наблюдений для каждого дерева изоляции) — Каждое дерево изоляции соответствует подмножеству учебных наблюдений. Для каждого дерева, iforest выборки min(N,256) количество наблюдений от обучающих данных без замены, где N количество учебных наблюдений. Лесной алгоритм изоляции выполняет хорошо с размером небольшой выборки, потому что он помогает обнаружить плотные аномалии и аномалии близко к нормальным точкам. Однако необходимо экспериментировать с объемом выборки если N мал. Для примера смотрите, Исследуют NumObservationsPerLearner на Маленькие Данные.

  • NumLearners (количество деревьев изоляции) — По умолчанию, iforest функция выращивает 100 деревьев изоляции для леса изоляции, потому что средние длины пути обычно сходятся прежде, чем вырастить 100 деревьев изоляции [1].

Баллы аномалии

Лесной алгоритм изоляции вычисляет счет аномалии s (x) наблюдения x путем нормализации длины пути h (x):

s(x)=2E[h(x)]c(n),

где E [h (x)] является средней длиной пути по всем деревьям изоляции в лесу изоляции, и c (n) является средней длиной пути неудачных поисковых запросов в дереве двоичного поиска наблюдений n.

  • Счет приближается 1 как E [h (x)] приближается 0. Поэтому значение баллов близко к 1 указывает на аномалию.

  • Счет приближается 0 как E [h (x)] приближается к n – 1. Кроме того, счет приближается 0.5, когда E [h (x)] приближается к c (n). Поэтому значение баллов, меньшее, чем 0,5 и близко к 0, указывает на нормальную точку.

Индикаторы аномалии

iforest и isanomaly идентифицируйте наблюдения с баллами аномалии выше порога счета как аномалии. Функции возвращают логический вектор, который имеет ту же длину как входные данные. Значение логической единицы (true) указывает, что соответствующая строка входных данных является аномалией.

  • iforest определяет пороговое значение (ScoreThreshold значение свойства), чтобы обнаружить заданную часть (ContaminationFraction аргумент значения имени) учебных наблюдений как аномалии. По умолчанию функция обрабатывает все учебные наблюдения как нормальные наблюдения.

  • isanomaly обеспечивает ScoreThreshold аргумент значения имени, который можно использовать, чтобы задать порог. Порог по умолчанию является значением, определенным, когда лес изоляции обучен.

Обнаружьте выбросы и постройте контуры баллов аномалии

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

Сгенерируйте выборочные данные

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

rng("default")
rho = [1,0.05;0.05,1];
n = 1000;
u = copularnd("Gaussian",rho,n);

Добавьте шум в 5% случайным образом выбранных наблюдений, чтобы сделать выбросы наблюдений.

noise = randperm(n,0.05*n);
u(noise,1) = u(noise,1)*5;

Обучите лес изоляции и обнаружьте выбросы

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

[f,tf,scores] = iforest(u,ContaminationFraction=0.05);

f IsolationForest объект. iforest также возвращает индикаторы аномалии (tf) и баллы аномалии (scores) для обучающих данных.

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

histogram(scores)
xline(f.ScoreThreshold,"r-",join(["Threshold" f.ScoreThreshold]))

Figure contains an axes object. The axes object contains 2 objects of type histogram, constantline.

Проверяйте эффективность iforest путем графического вывода рабочей характеристики приемника (ROC) изгибаются и вычисления области под кривой (AUC) значение.

true_tf = false(n,1);
true_tf(noise) = true;
[X,Y,T,AUC] = perfcurve(true_tf,scores,true);
AUC
AUC = 0.8384
plot(X,Y)
xlabel("False positive rate") 
ylabel("True positive rate")
title("ROC for Anomaly Detection")

Figure contains an axes object. The axes object with title ROC for Anomaly Detection contains an object of type line.

Постройте контуры баллов аномалии

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

l1 = linspace(min(u(:,1),[],1),max(u(:,1),[],1));
l2 = linspace(min(u(:,2),[],1),max(u(:,2),[],1));
[X1,X2] = meshgrid(l1,l2);
[~,scores_grid] = isanomaly(f,[X1(:),X2(:)]);
scores_grid = reshape(scores_grid,size(X1,1),size(X2,2));

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

idx = setdiff(1:1000,noise);
scatter(u(idx,1),u(idx,2),[],[0.5 0.5 0.5],".")
hold on
scatter(u(noise,1),u(noise,2),"ro","filled")
scatter(u(tf,1),u(tf,2),60,"ko")
contour(X1,X2,scores_grid,"ShowText","on")
legend(["Normal Points" "Outliers" "Detected Outliers"],Location="best")
colorbar
hold off

Figure contains an axes object. The axes object contains 4 objects of type scatter, contour. These objects represent Normal Points, Outliers, Detected Outliers.

Исследуйте NumObservationsPerLearner для маленьких данных

Для каждого дерева изоляции, iforest выборки min(N,256) количество наблюдений от обучающих данных без замены, где N количество учебных наблюдений. Хранение маленького объема выборки помогает обнаружить плотные аномалии и аномалии близко к нормальным точкам. Однако необходимо экспериментировать с объемом выборки если N мал.

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

Загрузка демонстрационных данных

Загрузите ирисовый набор данных Фишера.

load fisheriris

Данные содержат четыре измерения (длина чашелистика, ширина чашелистика, лепестковая длина и лепестковая ширина) от трех разновидностей ирисовых цветов. Матричный meas содержит все четыре измерения для 150 цветов.

Обучите лес изоляции с различными объемами выборки

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

s = NaN(150,150);
rng("default")
for i = 3: 150
    [~,~,s(:,i)] = iforest(meas,NumObservationsPerLearner=i);
end

Разделите наблюдения на три группы на основе средних оценок и создайте графики баллов аномалии по сравнению с объемами выборки.

score_threshold1 = 0.5;
score_threshold2 = 0.55;

m = mean(s,2,"omitnan");
ind1 = find(m < score_threshold1);
ind2 = find(m <= score_threshold2 & m >= score_threshold1);
ind3 = find(m > score_threshold2);

figure
t = tiledlayout(3,1);
nexttile
plot(s(ind1,:)')
title(join(["Observations with average score <  " score_threshold1]))
nexttile
plot(s(ind2,:)')
title(join(["Observations with average score in [" ...
    score_threshold1 " " score_threshold2 "]"]))
nexttile
plot(s(ind3,:)')
title(join(["Observations with average score >  " score_threshold2]))
xlabel(t,"Number of Observations for Each Tree")
ylabel(t,"Anomaly Score")

Figure contains 3 axes objects. Axes object 1 with title Observations with average score < 0.5 contains 101 objects of type line. Axes object 2 with title Observations with average score in [ 0.5 0.55 ] contains 33 objects of type line. Axes object 3 with title Observations with average score > 0.55 contains 16 objects of type line.

Уменьшения счета аномалии как объем выборки увеличиваются для наблюдений, значения средней оценки которых меньше 0.5. Для наблюдений, значения средней оценки которых больше 0.55, увеличения счета аномалии, когда увеличивается объем выборки, и затем счет сходится примерно, когда объем выборки достигает 50.

Обнаружьте аномалии в учебных наблюдениях при помощи лесных моделей изоляции с объемами выборки 50 и 100. Задайте часть аномалий в учебных наблюдениях как 0,05.

[f1,tf1,scores1] = iforest(meas,NumObservationsPerLearner=50, ...
    ContaminationFraction=0.05);
[f2,tf2,scores2] = iforest(meas,NumObservationsPerLearner=100, ...
    ContaminationFraction=0.05);

Отобразите индексы наблюдения аномалий.

find(tf1)
ans = 7×1

    14
    42
   110
   118
   119
   123
   132

find(tf2)
ans = 7×1

    14
    15
    16
   110
   118
   119
   132

У двух лесных моделей изоляции есть пять общих аномалий.

Визуализируйте аномалии

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

tf1 = categorical(tf1,[0 1],["Normal Points" "Anomalies"]);
predictorNames = ["Sepal Length" "Sepal Width" ...
    "Petal Length" "Petal Width"];
gplotmatrix(meas,[],tf1,"kr",".x",[],[],[],predictorNames)

Figure contains 16 axes objects. Axes object 1 contains 2 objects of type line. Axes object 2 contains 2 objects of type line. Axes object 3 contains 2 objects of type line. Axes object 4 contains 2 objects of type line. Axes object 5 contains 2 objects of type line. Axes object 6 contains 2 objects of type line. Axes object 7 contains 2 objects of type line. Axes object 8 contains 2 objects of type line. Axes object 9 contains 2 objects of type line. Axes object 10 contains 2 objects of type line. Axes object 11 contains 2 objects of type line. Axes object 12 contains 2 objects of type line. Axes object 13 contains 2 objects of type line. Axes object 14 contains 2 objects of type line. Axes object 15 contains 2 objects of type line. Axes object 16 contains 2 objects of type line. These objects represent Normal Points, Anomalies.

Для высоко-размерных данных можно визуализировать данные только при помощи важных функций. Можно также визуализировать данные после сокращения размерности при помощи t-SNE (t-Distributed стохастическое вложение соседей).

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

idx = fsulaplacian(meas)
idx = 1×4

     3     4     1     2

gscatter(meas(:,idx(1)),meas(:,idx(2)),tf1,"kr",".x",[],"on", ...
    predictorNames(idx(1)),predictorNames(idx(2)))

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Normal Points, Anomalies.

Визуализируйте значения наблюдения после сокращения размерности при помощи tsne функция.

Y = tsne(meas);
gscatter(Y(:,1),Y(:,2),tf1,"kr",".x")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Normal Points, Anomalies.

Ссылки

[1] Лю, F. T. К. М. Тинг и Цз. Чжоу. "Лес изоляции", 2 008 Восьмых Международных конференций IEEE по вопросам Анализа данных. Пиза, Италия, 2008, стр 413-422.

Смотрите также

| |

Похожие темы