Один SVM класса и Isolation Forest для обнаружения новинок

Мой вопрос касается алгоритмов обнаружения новинок - Isolation Forest и One Class SVM. У меня есть обучающий набор данных (с 4-5 функциями), в котором все точки выборки являются выпадающими, и мне нужно классифицировать любые новые данные как выпадающие или выпадающие и соответственно принимать в другом фрейме данных.

При попытке использовать Isolation Forest или One Class SVM мне нужно ввести процент загрязнения (nu) на этапе обучения. Однако, поскольку набор обучающих данных не содержит никаких загрязнений, мне нужно добавить выбросы в обучающий фрейм данных и указать эту долю выбросов как nu.

Также при использовании леса изоляции я заметил, что процент выбросов меняется каждый раз, когда я прогнозирую, даже если я не меняю модель. Есть ли способ решить эту проблему, кроме использования алгоритма Extended Isolation Forest.

Заранее спасибо.

2 ответа

Что касается загрязнения изолированного леса,

Если вы тренируетесь для обычных экземпляров (все вложения), вы должны поставить ноль для загрязнения. Если вы не укажете это, загрязнение будет 0,1 (для версии 0,2).

Ниже приведен простой код, чтобы показать это.

1- Импорт библиотек

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
rng = np.random.RandomState(42)

2- Создайте 2D-набор данных

X = 0.3 * rng.randn(1000, 2)

3- Обучите модель iForest и спрогнозируйте выбросы

clf = IsolationForest(random_state=rng, contamination=0)
clf.fit(X)
y_pred_train = clf.predict(X)  

4- Распечатайте количество аномалий

print(sum(y_pred_train==-1))

Это даст вам 0 аномалий. Теперь, если вы измените загрязнение на 0,15, программа укажет 150 аномалий из того же набора данных, который у вас уже был (то же самое из-за RandomState(42)).

[Ссылки]:

1. Лю, Фэй Тони, Тин, Кай Мин и Чжоу, Чжи-Хуа. "Изоляция леса". Data Mining, 2008. ICDM'08. Восьмая международная конференция IEEE

2 Лю, Фэй Тони, Тин, Кай Мин и Чжоу, Чжи-Хуа. "Обнаружение аномалий на основе изоляции". Транзакции ACM при обнаружении знаний из данных (TKDD), (2012)

«Обучение только с обычными данными (inliers)».

Это противоречит природе Изоляционного леса. Обучение здесь совершенно иное , чем обучение в нейронных сетях. Поскольку все используют их, не понимая, что происходит, и ведут блоги со знанием 20% машинного обучения , у нас возникают подобные вопросы.

      clf = IsolationForest(random_state=rng, contamination=0)
clf.fit(X)

Что значит fitделать здесь? Это тренировка ? Если да, то что обучается ?

В изолированном лесу:

  1. Сначала строим деревья,
  2. Затем мы передаем каждую точку данных через каждое дерево,
  3. Затем мы вычисляем средний путь, необходимый для выделения точки.
  4. Чем короче путь, тем выше оценка аномалии.

contaminationопределит ваш порог. если это 0, тогда какой у тебя threshold?

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

Другие вопросы по тегам