iforest

Подходящий лес изоляции для обнаружения аномалии

    Описание

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

    • Определение выбросов (обнаруживающий аномалии в обучающих данных) — Использование выходной аргумент tf из iforest идентифицировать аномалии в обучающих данных.

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

    пример

    forest = iforest(Tbl) возвращает IsolationForest объект для данных о предикторе в таблице Tbl.

    forest = iforest(X) данные о предикторе использования в матричном X.

    forest = iforest(___,Name=Value) задает опции с помощью одних или нескольких аргументов name-value в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, ContaminationFraction=0.1 дает функции команду обрабатывать 10% обучающих данных как аномалии.

    [forest,tf] = iforest(___) также возвращает логический массив tf, чьими элементами является true когда аномалия обнаруживается в соответствующей строке Tbl или X.

    пример

    [forest,tf,scores] = iforest(___) также возвращает счет аномалии в области значений [0,1] для каждого наблюдения в Tbl или X. Значение баллов близко к 0 указывает на нормальное наблюдение, и значение близко к 1 указывает на аномалию.

    Примеры

    свернуть все

    Обнаружьте выбросы (аномалии в обучающих данных) при помощи iforest функция.

    Загрузите набор выборочных данных NYCHousing2015.

    load NYCHousing2015

    Набор данных включает 10 переменных с информацией о продажах свойств в Нью-Йорке в 2 015. Распечатайте сводные данные набора данных

    summary(NYCHousing2015)
    Variables:
    
        BOROUGH: 91446x1 double
    
            Values:
    
                Min          1    
                Median       3    
                Max          5    
    
        NEIGHBORHOOD: 91446x1 cell array of character vectors
    
        BUILDINGCLASSCATEGORY: 91446x1 cell array of character vectors
    
        RESIDENTIALUNITS: 91446x1 double
    
            Values:
    
                Min            0  
                Median         1  
                Max         8759  
    
        COMMERCIALUNITS: 91446x1 double
    
            Values:
    
                Min           0   
                Median        0   
                Max         612   
    
        LANDSQUAREFEET: 91446x1 double
    
            Values:
    
                Min                0
                Median          1700
                Max       2.9306e+07
    
        GROSSSQUAREFEET: 91446x1 double
    
            Values:
    
                Min                0
                Median          1056
                Max       8.9422e+06
    
        YEARBUILT: 91446x1 double
    
            Values:
    
                Min            0  
                Median      1939  
                Max         2016  
    
        SALEPRICE: 91446x1 double
    
            Values:
    
                Min                0
                Median    3.3333e+05
                Max       4.1111e+09
    
        SALEDATE: 91446x1 datetime
    
            Values:
    
                Min       01-Jan-2015
                Median    09-Jul-2015
                Max       31-Dec-2015
    

    SALEDATE столбцом является datetime массив, который не поддерживается iforest. Создайте столбцы для количеств месяца и дня datetime значения, и удаляют SALEDATE столбец.

    [~,NYCHousing2015.MM,NYCHousing2015.DD] = ymd(NYCHousing2015.SALEDATE);
    NYCHousing2015.SALEDATE = [];

    Столбцы BOROUGH, NEIGHBORHOOD, и BUILDINGCLASSCATEGORY содержите категориальные предикторы. Отобразите количество категорий для категориальных предикторов.

    length(unique(NYCHousing2015.BOROUGH))
    ans = 5
    
    length(unique(NYCHousing2015.NEIGHBORHOOD))
    ans = 254
    
    length(unique(NYCHousing2015.BUILDINGCLASSCATEGORY))
    ans = 48
    

    Для категориальной переменной больше чем с 64 категориями, iforest функционируйте использует аппроксимированный метод разделения, который может уменьшать точность лесной модели изоляции. Удалите NEIGHBORHOOD столбец, который содержит категориальную переменную с 254 категориями.

    NYCHousing2015.NEIGHBORHOOD = [];

    Обучите лесную модель изоляции NYCHousing2015. Задайте часть аномалий в учебных наблюдениях как 0,1 и задайте первую переменную (BOROUGH) как категориальный предиктор. Первая переменная является числовым массивом, таким образом, iforest принимает, что это - непрерывная переменная, если вы не задаете переменную как категориальную переменную.

    rng("default") % For reproducibility 
    [Mdl,tf,scores] = iforest(NYCHousing2015,ContaminationFraction=0.1, ...
        CategoricalPredictors=1);

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

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

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

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

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

    rng("default") % For reproducibility 
    [newMdl,newtf,scores] = iforest(NYCHousing2015, ...
        ContaminationFraction=0.01,CategoricalPredictors=1);
    

    Если вы хотите идентифицировать аномалии с различным пороговым значением счета (например, 0.65), можно передать IsolationForest объект, обучающие данные и новое пороговое значение к isanomaly функция.

    [newtf,scores] = isanomaly(Mdl,NYCHousing2015,ScoreThreshold=0.65);
    

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

    Измените часть аномалий в обучающих данных к 0,01.

    newContaminationFraction = 0.01;

    Найдите новый порог счета при помощи quantile функция.

    newScoreThreshold = quantile(scores,1-newContaminationFraction)
    newScoreThreshold = 0.6597
    

    Получите новый идентификатор аномалии.

    newtf = scores > newScoreThreshold;

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

    Загрузите 1 994 данных о переписи, хранимых в census1994.mat. Набор данных состоит из демографических данных Бюро переписи США, чтобы предсказать, передает ли индивидуум 50 000$ в год.

    load census1994

    census1994 содержит обучающий набор данных adultdata и тестовые данные устанавливают adulttest.

    Обучите лесную модель изоляции adultdata. Примите тот adultdata не содержит выбросы.

    rng("default") % For reproducibility
    [Mdl,tf,s] = iforest(adultdata);

    Mdl IsolationForest объект. iforest также возвращает индикатор tf аномалии и баллы аномалии s для обучающих данных adultdata. Если вы не задаете ContaminationFraction аргумент значения имени как значение, больше, чем 0, затем iforest обработки все учебные наблюдения как нормальные наблюдения, то есть, значения в tf весь логический ноль (false). Функция устанавливает порог счета к максимальному значению баллов. Отобразите пороговое значение.

    Mdl.ScoreThreshold
    ans = 0.8600
    

    Используйте обученную лесную модель изоляции, чтобы найти аномалии в adulttest.

    [tf_test,s_test] = isanomaly(Mdl,adulttest);

    isanomaly функция возвращает индикаторы tf_test аномалии и баллы s_test для adulttest. По умолчанию, isanomaly идентифицирует наблюдения с баллами выше порога (Mdl.ScoreThreshold) как аномалии.

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

    histogram(s,Normalization="probability")
    hold on
    histogram(s_test,Normalization="probability")
    xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold]))
    legend("Training Data","Test Data",Location="northwest")
    hold off

    Figure contains an axes object. The axes object contains 3 objects of type histogram, constantline. These objects represent Training Data, Test Data.

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

    find(tf_test)
    ans = 15655
    

    Распределение счета аномалии тестовых данных похоже на те из обучающих данных, таким образом, isanomaly обнаруживает небольшое количество аномалий в тестовых данных с пороговым значением по умолчанию. Можно задать различное пороговое значение при помощи ScoreThreshold аргумент значения имени. Для примера смотрите, Задают Порог Счета Аномалии.

    Входные параметры

    свернуть все

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

    Использовать подмножество переменных в Tbl, задайте переменные при помощи PredictorNames аргумент значения имени.

    Типы данных: table

    Данные о предикторе в виде числовой матрицы. Каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору.

    Типы данных: single | double

    Аргументы name-value

    Задайте дополнительные пары аргументов как Name1=Value1,...,NameN=ValueN, где Name имя аргумента и Value соответствующее значение. Аргументы name-value должны появиться после других аргументов, но порядок пар не имеет значения.

    Пример: NumLearners=50,NumObservationsPerLearner=100 задает, чтобы обучить лес изоляции с помощью 50 деревьев изоляции и 100 наблюдений для каждого дерева изоляции.

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

    ЗначениеОписание
    Вектор из положительных целых чисел

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

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

    Логический вектор

    true запись означает, что соответствующий предиктор является категориальным. Длиной вектора является p.

    Символьная матрицаКаждая строка матрицы является именем переменного предиктора. Имена должны совпадать с записями в PredictorNames. Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину.
    Массив строк или массив ячеек из символьных векторовКаждым элементом в массиве является имя переменного предиктора. Имена должны совпадать с записями в PredictorNames.
    'all'Все предикторы являются категориальными.

    По умолчанию, если данные о предикторе находятся в таблице (Tbl), iforest принимает, что переменная является категориальной, если это - логический вектор, неупорядоченный категориальный вектор, символьный массив, массив строк или массив ячеек из символьных векторов. Если данные о предикторе являются матрицей (X), iforest принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их при помощи 'CategoricalPredictors' аргумент значения имени.

    Для категориальной переменной больше чем с 64 категориями, iforest функционируйте использует аппроксимированный метод разделения, который может уменьшать точность лесной модели изоляции.

    Пример: CategoricalPredictors='all'

    Типы данных: single | double | logical | char | string | cell

    Часть аномалий в обучающих данных в виде числового скаляра между 0 и 1.

    • Если ContaminationFraction значение 0 (значение по умолчанию), затем iforest обработки все учебные наблюдения как нормальные наблюдения, и устанавливают порог счета (ScoreThreshold значение свойства forest) к максимальному значению scores.

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

    Пример: ContaminationFraction=0.1

    Типы данных: single | double

    Количество деревьев изоляции в виде положительного целочисленного скаляра.

    Средние длины пути, используемые лесным алгоритмом изоляции, чтобы вычислить баллы аномалии обычно, сходятся прежде, чем вырастить 100 деревьев изоляции и для нормальных точек и для аномалий [1].

    Пример: NumLearners=50

    Типы данных: single | double

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

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

    Пример: NumObservationsPerLearner=100

    Типы данных: single | double

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

    • Если вы предоставляете Tbl, затем можно использовать PredictorNames выбрать который переменные предикторы использовать. Таким образом, iforest использование только переменные предикторы в PredictorNames.

      • PredictorNames должно быть подмножество Tbl.Properties.VariableNames.

      • По умолчанию, PredictorNames содержит имена всех переменных предикторов в Tbl.

    • Если вы предоставляете X, затем можно использовать PredictorNames присваивать имена к переменным предикторам в X.

      • Порядок имен в PredictorNames должен соответствовать порядку следования столбцов X. Таким образом, PredictorNames{1} имя X(:,1), PredictorNames{2} имя X(:,2), и так далее. Кроме того, size(X,2) и numel(PredictorNames) должно быть равным.

      • По умолчанию, PredictorNames {'x1','x2',...}.

    Пример: PredictorNames=["SepalLength" "SepalWidth" "PetalLength" "PetalWidth"]

    Типы данных: string | cell

    Отметьте, чтобы запуститься параллельно в виде true или false. Если вы задаете UseParallel=true, iforest функция выполняет обработки в цикле параллельно при помощи parfor. Эта опция требует Parallel Computing Toolbox™.

    Пример: UseParallel=true

    Типы данных: логический

    Выходные аргументы

    свернуть все

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

    Можно использовать объектную функцию isanomaly найти аномалии в новых данных.

    Индикаторы аномалии, возвращенные как логический вектор-столбец. Элемент tf true когда наблюдение в соответствующей строке Tbl или X аномалия и false в противном случае. tf имеет ту же длину как Tbl или X.

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

    Баллы аномалии, возвращенные как числовой вектор-столбец, значения которого между 0 и 1. scores имеет ту же длину как Tbl или X, и каждый элемент scores содержит оценку аномалии для наблюдения в соответствующей строке Tbl или X. Значение баллов близко к 0 указывает на нормальное наблюдение, и значение близко к 1 указывает на аномалию.

    Больше о

    свернуть все

    Лес изоляции

    Лесной алгоритм изоляции [1] обнаруживает аномалии путем изоляции аномалий от нормальных точек с помощью ансамбля деревьев изоляции.

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

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

    Для получения дополнительной информации смотрите Обнаружение Аномалии с Лесом Изоляции.

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

    Лесной алгоритм изоляции вычисляет счет аномалии 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 рассматривает NaN, '' (пустой символьный вектор), "" (пустая строка), <missing>, и <undefined> значения в Tbl и NaN значения в X быть отсутствующими значениями.

    • iforest не использует наблюдения со всеми отсутствующими значениями и присваивает счет аномалии 1 к наблюдениям.

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

    Ссылки

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

    Расширенные возможности

    Введенный в R2021b