Безнадзорное обнаружение аномалии

Эта тема вводит безнадзорные функции обнаружения аномалии многомерных выборочных данных, доступных в Statistics and Machine Learning Toolbox™, и описывает рабочие процессы функций определения выбросов (обнаруживающий аномалии в обучающих данных) и обнаружение новинки (обнаруживающий аномалии в новых данных с незагрязненными обучающими данными).

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

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

  • Машина опорных векторов одного класса (OCSVM) — Изучение Одного класса или безнадзорный SVM, пытается разделить данные из источника на преобразованном высоко-размерном пробеле предиктора. Обучите модель OCSVM при помощи fitcsvm функция, и затем обнаруживает выбросы и новинки при помощи resubPredict и predict возразите функциям, соответственно.

  • Расстояние Mahalanobis — Если выборочные данные следуют за многомерным нормальным распределением, то расстояния Mahalanobis в квадрате от выборок до распределения следуют за распределением хи-квадрат. Поэтому можно использовать расстояния, чтобы обнаружить аномалии на основе критических значений распределения хи-квадрат. Для определения выбросов используйте robustcov функция, чтобы вычислить устойчивые расстояния Mahalanobis. Для обнаружения новинки можно вычислить расстояния Mahalanobis при помощи robustcov и pdist2 функции.

Определение выбросов

Этот пример иллюстрирует рабочие процессы трех безнадзорных методов обнаружения аномалии (лес изоляции, OCSVM и расстояние Mahalanobis) для определения выбросов.

Загрузка данных

Загрузите humanactivity набор данных, который содержит переменные feat и actid. Переменная feat содержит матрицу данных предиктора 60 функций 24 075 наблюдений и переменную отклика actid содержит идентификаторы действия для наблюдений как целые числа. Этот пример использует feat переменная для обнаружения аномалии.

load humanactivity

Найдите размер переменной feat.

[N,D] = size(feat)
N = 24075
D = 60

Примите, что часть выбросов в данных 0.05.

contaminationFraction = 0.05;

Лес изоляции

Обнаружьте выбросы при помощи iforest функция.

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

rng("default") % For reproducibility
[forest,tf_forest,s_forest] = iforest(feat, ...
    ContaminationFraction=contaminationFraction);

forest IsolationForest объект. iforest также возвращает индикаторы аномалии (tf_forest) и баллы аномалии (s_forest) для данных (feat). iforest определяет пороговое значение счета (forest.ScoreThreshold) так, чтобы функция обнаружила заданную часть наблюдений как выбросы.

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

figure
histogram(s_forest,Normalization="probability")
xline(forest.ScoreThreshold,"k-", ...
    join(["Threshold =" forest.ScoreThreshold]))
title("Histogram of Anomaly Scores for Isolation Forest")

Figure contains an axes object. The axes object with title Histogram of Anomaly Scores for Isolation Forest contains 2 objects of type histogram, constantline.

Проверяйте часть обнаруженных аномалий в данных.

OF_forest = sum(tf_forest)/N
OF_forest = 0.0496

Часть выброса может быть меньшей, чем заданная часть (0.05), когда баллы могли связать значения в пороге.

Машина опорных векторов одного класса (OCSVM)

Обучите модель OCSVM при помощи fitcsvm функция, и затем обнаруживает выбросы при помощи resubPredict функция.

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

Mdl = fitcsvm(feat,ones(size(feat,1),1), ...
    OutlierFraction=contaminationFraction, ...
    KernelScale="auto",Standardize=true);

Mdl ClassificationSVM объект.

Вычислите музыку выброса к feat при помощи resubPredict функция.

[~,s_OCSVM] = resubPredict(Mdl);

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

tf_OCSVM = s_OCSVM < 0;

Постройте гистограмму значений баллов.

figure
histogram(s_OCSVM,Normalization="probability");
xline(0,"k-","Threshold = 0")
title("Histogram of Anomaly Scores for OCSVM")

Figure contains an axes object. The axes object with title Histogram of Anomaly Scores for OCSVM contains 2 objects of type histogram, constantline.

Проверяйте часть обнаруженных аномалий в данных.

OF_OCSVM = sum(tf_OCSVM)/N
OF_OCSVM = 0.0500

fitcsvm обучает термин смещения модели SVM так, чтобы заданная часть учебных наблюдений имела отрицательные баллы. Поэтому OF_OCSVM близко к заданному дробному значению.

Расстояние Mahalanobis

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

Вычислите расстояние Mahalanobis от feat к распределению feat при помощи robustcov функция. Задайте часть выбросов (OutlierFraction) как 0,05. robustcov минимизирует определитель ковариации более чем 95% наблюдений.

[sigma,mu,s_robustcov,tf_robustcov_default] = robustcov(feat, ...
    OutlierFraction=contaminationFraction);

robustcov находит устойчивую оценку ковариационной матрицы (sigma) и устойчивая средняя оценка (mu), которые менее чувствительны к выбросам, чем оценки от cov и mean функции. robustcov функция также вычисляет расстояния Mahalanobis (s_robustcov) и индикаторы выброса (tf_robustcov_default). По умолчанию функция принимает, что набор данных следует за многомерным нормальным распределением и идентифицирует 2,5% входных наблюдений как выбросы на основе критических значений распределения хи-квадрат.

Если набор данных удовлетворяет предположению нормальности, то расстояние Mahalanobis в квадрате следует за распределением хи-квадрат с D степени свободы, где D размерность данных. В этом случае можно найти новый порог при помощи chi2inv функция, чтобы обнаружить заданную часть наблюдений как выбросы.

s_robustcov_threshold = sqrt(chi2inv(1-contaminationFraction,D));
tf_robustcov = s_robustcov > s_robustcov_threshold;

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

figure
d_classical = pdist2(feat,mean(feat),"mahalanobis");
gscatter(d_classical,s_robustcov,tf_robustcov,"kr",".x")
xline(s_robustcov_threshold,"k-")
yline(s_robustcov_threshold,"k-", ...
    join(["Threshold = " s_robustcov_threshold]));
l = refline([1 0]);
l.Color = "k";
xlabel("Mahalanobis Distance")
ylabel("Robust Distance")
legend("Normal Points","Outliers",Location="northwest")
title("Distance-Distance Plot")

Figure contains an axes object. The axes object with title Distance-Distance Plot contains 5 objects of type line, constantline. These objects represent Normal Points, Outliers.

Увеличение осей, чтобы видеть нормальные точки.

xlim([0 10])
ylim([0 10])

Figure contains an axes object. The axes object with title Distance-Distance Plot contains 5 objects of type line, constantline. These objects represent Normal Points, Outliers.

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

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

s_robustcov_threshold = quantile(s_robustcov,1-contaminationFraction);

Получите индикаторы аномалии для feat использование нового порога s_robustcov_threshold.

tf_robustcov = s_robustcov > s_robustcov_threshold;

Проверяйте часть обнаруженных аномалий в данных.

OF_robustcov = sum(tf_robustcov)/N
OF_robustcov = 0.0500

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

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

rng("default") % For reproducibility
T = tsne(feat,Standardize=true,Perplexity=100,Exaggeration=20);

Постройте нормальные точки и выбросы в уменьшаемой размерности. Сравните результаты этих трех методов: лесной алгоритм изоляции, модель OCSVM и устойчивое расстояние Mahalanobis от robustcov.

figure
tiledlayout(2,2)
nexttile
gscatter(T(:,1),T(:,2),tf_forest,"kr",".x",[],"off")
title("Isolation Forest")
nexttile(3)
gscatter(T(:,1),T(:,2),tf_OCSVM,"kr",".x",[],"off")
title("OCSVM")
nexttile(4)
gscatter(T(:,1),T(:,2),tf_robustcov,"kr",".x",[],"off")
title("Robust Mahalanobis Distance")
l = legend("Normal Points","Novelties");
l.Layout.Tile = 2;

Figure contains 3 axes objects. Axes object 1 with title Isolation Forest contains 2 objects of type line. Axes object 2 with title OCSVM contains 2 objects of type line. Axes object 3 with title Robust Mahalanobis Distance contains 2 objects of type line. These objects represent Normal Points, Novelties.

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

sum(tf_forest.*tf_OCSVM.*tf_robustcov)/N
ans = 0.0298

Эти три метода идентифицируют приблизительно 3% данных (feat) как выбросы.

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

idx = fsulaplacian(feat);
figure
t = tiledlayout(2,2);
nexttile
gscatter(feat(:,idx(1)),feat(:,idx(2)),tf_forest,"kr",".x",[],"off")
title("Isolation Forest")
nexttile(3)
gscatter(feat(:,idx(1)),feat(:,idx(2)),tf_OCSVM,"kr",".x",[],"off")
title("OCSVM")
nexttile(4)
gscatter(feat(:,idx(1)),feat(:,idx(2)),tf_robustcov,"kr",".x",[],"off")
title("Mahalanobis Distance")
l = legend("Normal Points","Novelties");
l.Layout.Tile = 2;
xlabel(t,join(["Column" idx(1)]))
ylabel(t,join(["Column" idx(2)]))

Figure contains 3 axes objects. Axes object 1 with title Isolation Forest contains 2 objects of type line. Axes object 2 with title OCSVM contains 2 objects of type line. Axes object 3 with title Mahalanobis Distance contains 2 objects of type line. These objects represent Normal Points, Novelties.

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

Этот пример иллюстрирует рабочие процессы трех безнадзорных методов обнаружения аномалии (лес изоляции, OCSVM и расстояние Mahalanobis) для обнаружения новинки.

Загрузка данных

Загрузите humanactivity набор данных, который содержит переменные feat и actid. Переменная feat содержит матрицу данных предиктора 60 функций 24 075 наблюдений и переменную отклика actid содержит идентификаторы действия для наблюдений как целые числа. Этот пример использует feat переменная для обнаружения аномалии.

load humanactivity

Разделите данные в наборы обучающих данных и наборы тестов при помощи cvpartition функция. Используйте 50% наблюдений как обучающие данные и 50% наблюдений как тестовые данные для обнаружения новинки.

rng("default") % For reproducibility 
c = cvpartition(actid,Holdout=0.50);
trainingIndices = training(c); % Indices for the training set
testIndices = test(c); % Indices for the test set
XTrain = feat(trainingIndices,:);
XTest = feat(testIndices,:);

Примите, что обучающие данные не загрязнены (никакие выбросы).

Найдите размер наборов обучающих данных и наборов тестов.

[N,D] = size(XTrain)
N = 12038
D = 60
NTest = size(XTest,1)
NTest = 12037

Лес изоляции

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

Обучите лесную модель изоляции.

[forest,tf_forest,s_forest] = iforest(XTrain);

forest IsolationForest объект. iforest также возвращает индикаторы аномалии (tf_forest) и баллы аномалии (s_forest) для обучающих данных (XTrain). По умолчанию, iforest обработки все учебные наблюдения как нормальные наблюдения, и устанавливают порог счета (forest.ScoreThreshold) к максимальному значению баллов.

Используйте обученную лесную модель изоляции и объектный функциональный isanomaly найти новинки в XTest. isanomaly функция идентифицирует наблюдения с баллами выше порога (forest.ScoreThreshold) как новинки.

[tfTest_forest,sTest_forest] = isanomaly(forest,XTest);

isanomaly функция возвращает индикаторы аномалии (tfTest_forest) и баллы аномалии (sTest_forest) для новых данных.

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

figure
histogram(s_forest,Normalization="probability")
hold on
histogram(sTest_forest,Normalization="probability")
xline(forest.ScoreThreshold,"k-", ...
    join(["Threshold =" forest.ScoreThreshold]))
legend("Training data","New data",Location="southeast")
title("Histograms of Anomaly Scores for Isolation Forest")
hold off

Figure contains an axes object. The axes object with title Histograms of Anomaly Scores for Isolation Forest contains 3 objects of type histogram, constantline. These objects represent Training data, New data.

Распределение счета аномалии тестовых данных похоже на те из обучающих данных, таким образом, isanomaly обнаруживает небольшое количество аномалий в тестовых данных.

Проверяйте часть обнаруженных аномалий в тестовых данных.

NF_forest = sum(tfTest_forest)/NTest
NF_forest = 8.3077e-05

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

idx_forest = find(tfTest_forest)
idx_forest = 3422

Машина опорных векторов одного класса (OCSVM)

Обучите модель OCSVM при помощи fitcsvm функция, и затем обнаруживает аномалии в новых данных при помощи predict объектная функция.

Обучите модель машины опорных векторов изучению одного класса при помощи fitcsvm функция. Функция обучает модель изучению одного класса, если переменная метки класса является вектором из единиц. Задайте часть выбросов (OutlierFraction) как 0.

Mdl = fitcsvm(XTrain,ones(size(XTrain,1),1),OutlierFraction=0, ...
    KernelScale="auto",Standardize=true);

Mdl ClassificationSVM объект.

Вычислите музыку выброса к XTrain при помощи resubPredict функция.

[~,s_OCSVM] = resubPredict(Mdl);

Вычислите музыку новинки к XTest при помощи predict функция.

[~,sTest_OCSVM] = predict(Mdl,XTest);

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

tfTest_OCSVM = sTest_OCSVM < 0;

Постройте гистограммы значений баллов.

figure
histogram(s_OCSVM,Normalization="probability");
hold on
histogram(sTest_OCSVM,Normalization="probability");
xline(0,"k-","Threshold = 0")
legend("Training data","New Data",Location="best")
title("Histograms of Anomaly Scores for OCSVM")
hold off

Figure contains an axes object. The axes object with title Histograms of Anomaly Scores for OCSVM contains 3 objects of type histogram, constantline. These objects represent Training data, New Data.

Проверяйте часть обнаруженных аномалий в тестовых данных.

NF_OCSVM = sum(tfTest_OCSVM)/NTest
NF_OCSVM = 0.0707

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

idx_OCSVM = find(tfTest_OCSVM)
idx_OCSVM = 851×1

        1061
        1443
        1444
        1445
        1447
        1448
        1449
        1450
        1451
        1453
      ⋮

Расстояние Mahalanobis

Используйте robustcov функция, чтобы вычислить расстояния Mahalanobis обучающих данных и использовать pdist2 функция, чтобы вычислить расстояния Mahalanobis новых данных.

Вычислите расстояние Mahalanobis от XTrain к распределению XTrain при помощи robustcov функция. Задайте часть выбросов (OutlierFraction) как 0.

[sigma,mu,s_mahal] = robustcov(XTrain,OutlierFraction=0);

robustcov также возвращает оценки ковариационной матрицы (sigma) и среднее значение (mu), который можно использоваться для расчета расстояний новых данных.

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

s_mahal_threshold = max(s_mahal);

Вычислите расстояние Mahalanobis от XTest к распределению XTrain при помощи pdist2 функция.

sTest_mahal = pdist2(XTest,mu,"mahalanobis",sigma);

Получите индикаторы аномалии для XTest.

tfTest_mahal = sTest_mahal > s_mahal_threshold;

Постройте гистограммы значений баллов.

figure
histogram(s_mahal,Normalization="probability");
hold on
histogram(sTest_mahal,Normalization="probability");
xline(s_mahal_threshold,"k-", ...
    join(["Threshold =" s_mahal_threshold]))
legend("Training data","New Data",Location="southeast")
title("Histograms of Mahalanobis Distances")
hold off

Figure contains an axes object. The axes object with title Histograms of Mahalanobis Distances contains 3 objects of type histogram, constantline. These objects represent Training data, New Data.

Проверяйте часть обнаруженных аномалий в тестовых данных.

NF_mahal = sum(tfTest_mahal)/NTest
NF_mahal = 8.3077e-05

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

idx_mahal = find(tfTest_mahal)
idx_mahal = 3654

Сравните обнаруженные аномалии

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

rng("default") % For reproducibility 
T = tsne(feat,Standardize=true,Perplexity=100,Exaggeration=20);
XTest2D = T(testIndices,:);

Постройте нормальные точки и новинки в уменьшаемой размерности. Сравните результаты этих трех методов: лесной алгоритм изоляции, модель OCSVM и расстояние Mahalanobis от mahal.

figure
tiledlayout(2,2)
nexttile
gscatter(XTest2D(:,1),XTest2D(:,2),tfTest_forest,"kr",".x",[],"off")
title("Isolation Forest")
nexttile(3)
gscatter(XTest2D(:,1),XTest2D(:,2),tfTest_OCSVM,"kr",".x",[],"off")
title("OCSVM")
nexttile(4)
gscatter(XTest2D(:,1),XTest2D(:,2),tfTest_mahal,"kr",".x",[],"off")
title("Mahalanobis Distance")
l = legend("Normal Points","Novelties");
l.Layout.Tile = 2;

Figure contains 3 axes objects. Axes object 1 with title Isolation Forest contains 2 objects of type line. Axes object 2 with title OCSVM contains 2 objects of type line. Axes object 3 with title Mahalanobis Distance contains 2 objects of type line. These objects represent Normal Points, Novelties.

Новинка идентифицирована лесным алгоритмом изоляции (idx_forest) и новинка, идентифицированная расстоянием Mahalanobis (idx_mahal) отличаются, но они расположены друг около друга в уменьшаемой размерности.

Проверяйте, содержат ли новинки, идентифицированные OCSVM, новинки, идентифицированные лесным алгоритмом изоляции и расстоянием Mahalanobis.

ismember(idx_forest,idx_OCSVM)
ans = logical
   1

ismember(idx_mahal,idx_OCSVM)
ans = logical
   1

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

idx = fsulaplacian([XTrain; XTest]);
figure
t = tiledlayout(2,2);
nexttile
gscatter(XTest(:,idx(1)),XTest(:,idx(2)),tfTest_forest,"kr",".x",[],"off")
title("Isolation Forest")
nexttile(3)
gscatter(XTest(:,idx(1)),XTest(:,idx(2)),tfTest_OCSVM,"kr",".x",[],"off")
title("OCSVM")
nexttile(4)
gscatter(XTest(:,idx(1)),XTest(:,idx(2)),tfTest_mahal,"kr",".x",[],"off")
title("Mahalanobis Distance")
l = legend("Normal Points","Novelties");
l.Layout.Tile = 2;
xlabel(t,join(["Column" idx(1)]))
ylabel(t,join(["Column" idx(2)]))

Figure contains 3 axes objects. Axes object 1 with title Isolation Forest contains 2 objects of type line. Axes object 2 with title OCSVM contains 2 objects of type line. Axes object 3 with title Mahalanobis Distance contains 2 objects of type line. These objects represent Normal Points, Novelties.

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

| | | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте