Как использовать изолирующий лес

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

Может кто-нибудь объяснить мне, как это работает и привести пример?

Как я могу знать, что выбросы являются "реальными" выбросами?

Параметры настройки?

Вот мой код:

clf = IsolationForest(max_samples=10000, random_state=10)
clf.fit(x_train)
y_pred_train = clf.predict(x_train)
y_pred_test = clf.predict(x_test)

[1 1 1 ..., -1 1 1]

Ответ 1

Кажется, у вас много вопросов, позвольте мне постараться ответить один на один, насколько мне известно. - Как это устроено? → Он работает на том факте, что характер выбросов в любом наборе данных, который является выбросами, "мало и отличается", что довольно сильно отличается от типичного алгоритма на основе кластеризации или расстояния. На верхнем уровне это работает на логике, что выбросы делают меньше шагов, чтобы "изолировать" сравнение с "нормальной" точкой в любом наборе данных. Для этого это то, что делает IF. Предположим, у вас есть набор обучающих данных X с n точками данных, каждая из которых имеет m характеристик. В процессе обучения IF создает деревья изоляции (деревья двоичного поиска) для различных функций. Для обучения у вас есть 3 параметра для настройки, один - количество деревьев изоляции ('n_estimators' в sklearn_IsolationForest), второй - количество выборок ('max_samples' в sklearn_IsolationForest), а третий - количество объектов, которые нужно нарисовать из X для обучения каждого. базовая оценка (max_features в sklearn_IF). 'max_sample' - это число случайных выборок, которые он выберет из исходного набора данных для создания деревьев изоляции.

Во время фазы тестирования он находит длину пути тестируемой точки из всех обученных деревьев изоляции и находит среднюю длину пути. Чем больше длина пути, тем больше нормальная точка и наоборот. На основе средней длины пути. он вычисляет оценку аномалии, decision_function из sklearn_IF может быть использован, чтобы получить это. Для sklearn_IF, ниже балл, более аномальный образец. На основании оценки аномалии вы можете решить, является ли данный образец аномальным или нет, установив правильное значение загрязнения в объекте sklearn_IF. по умолчанию значение загрязнения составляет 0,1, которое можно настроить для определения порога. Количество загрязнения набора данных, т.е. доля выбросов в наборе данных.

Параметры настройки Обучение → 1. n_estimators, 2. max_samples, 3.max_features. Тестирование → 1. загрязнение

Ответ 2

-1 представляет выбросы (в соответствии с установленной моделью). См. Пример IsolationForest для хорошего описания процесса. Если у вас есть некоторые предварительные знания, вы можете предоставить больше параметров, чтобы получить более точную подгонку. Например, если вам известно загрязнение (доля выбросов в наборе данных), вы можете указать его в качестве входных данных. По умолчанию предполагается 0,1. Смотрите описание параметров здесь.