Как правильно определить аномалии, используя лес изоляции и полученные результаты? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь обнаружить выбросы в кадре данных, используя алгоритм Isolation Forest из sklearn.

Вот код, который я использую для настройки алгоритма:

iForest = IsolationForest(n_estimators=100, max_samples=256, contamination='auto', random_state=1, behaviour='new')
iForest.fit(dataset)
scores = iForest.decision_function(dataset)

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

plt.figure(figsize=(12, 8))
plt.hist(scores, bins=50);

enter image description here

Правильно ли предположить, что отрицательные оценки указывают на выбросы в моем фрейме данных? Я не могу найти хорошего объяснения диапазона оценок IF и как эти оценки работают (почему я получаю отрицательные оценки?).

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

Спасибо!

1 Ответ

1 голос
/ 07 октября 2019

Одним из способов решения этой проблемы является использование метода score_samples , который доступен в модуле isolationforest sklearn. После того, как вы подогнали модель к своим данным, используйте метод score_samples, чтобы узнать оценки отклонений для каждой выборки (чем ниже значение, тем больше отклонение от нормы). Поскольку у вас нет информации об истинных аномалиях в ваших данных, вы можете отсортировать свои образцы по полученным оценкам и вручную просмотреть записи, чтобы выяснить, является ли образец с наименьшим количеством оценок аномалией или нет, и в этом случаеВ процессе вы можете придумать пороговое значение для классификации точки данных как аномалии, которую вы можете использовать позже для любых новых данных, чтобы проверить, являются ли они аномалиями или нет.

Надеюсь, это поможет!

...