Как использовать Isolation Forest в Python
Я работаю над обнаружением выбросов в моем немаркированном наборе данных (данные не помечены как выбросы / выбросы), и я использую Isolation Forest в Python (библиотека scikit-learn).
Я хочу получить оценку аномальности данных в моем наборе данных, поэтому я использую следующий код:
if_model = IsolationForest(max_samples=100)
if_model.fit(dataset)
anomaly_score = if_model.score_samples(dataset)
Однако у меня есть несколько вопросов:
- Правильна ли предыдущая процедура или я должен разделить свой набор данных на две части, чтобы выполнить подгонку на наборе и получить оценку аномалии на другом наборе?
- в чем польза метода
predict
? Как мне его использовать?
1 ответ
Чтобы ответить на ваш первый вопрос, вам не нужно разделять набор данных. Наборы тестов необходимы для контролируемых алгоритмов. Если у вас есть ожидаемый результат для каждой строки данных, вы можете сравнить вывод модели с ожидаемым результатом, чтобы оценить, насколько хорошо модель работает. Эти данные нельзя использовать для соответствия модели, или модель может хорошо соответствовать этим конкретным строкам данных без соответствия другим данным, и вы об этом не узнаете. Однако изолирующий лес - это неконтролируемый алгоритм. У вас нет списка аномальных строк, с которыми можно было бы сравнить результаты изолированного леса, поэтому нет смысла удерживать данные, чтобы убедиться, что модель работает.
Чтобы ответить на второй вопрос,
predict
дает ответ «да» или «нет» (1 или 0) относительно того, является ли каждая строка аномальной в виде массива.score_samples
возвращает число, показывающее, насколько аномальна каждая строка, но не сообщает вам, является ли она аномальной или нет. См. Документацию по sklearn .