Изолированный лес с множеством функций, обнаруживающих все как аномалию
У меня есть реализация изолированного леса, в которой я беру функции (все числовые); масштабируйте их от 0 до 1
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data = scaler.fit_transform(df)
x = pd.DataFrame(data)
Затем вызовите прогноз:
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
clf = IsolationForest(max_samples=100, random_state=42).fit(x)
clf.predict(x)
В этом случае у меня есть 23 числовых признака.
Когда я запускаю сценарий, он возвращает 1 абсолютно для каждого результата.
Когда я ограничиваю набор функций двумя столбцами, он возвращает смесь 1 и -1.
Как я могу это обойти?
Спасибо
1 ответ
Подводя итог, Isolation Forest подсчитывает количество разделений, необходимых для выделения одного образца. Чтобы сгенерировать деревья, он случайным образом выбирает объект, а затем случайным образом выбирает значение разделения между максимальным и минимальным значениями выбранного объекта.
Идея в том, что более короткие пути, вероятно, будут аномалиями.
Проблема, вероятно, в том, что у вас есть несколько функций, которые не помогают различать аномалии. Таким образом, важные функции скрыты из-за огромного количества «неважных» функций. Так что, вероятно, две ваши функции, выбранные во второй модели, вполне объяснимы.
Если вы тренируете
IsolationForest
Модель с наиболее важными характеристиками, разница в количестве разделений, необходимая для выделения одного образца между нормальным образцом и аномалией, будет больше. Так классифицировать будет проще. Каждая проблема будет лучше себя вести с разным количеством функций.
Итак, чтобы решить вашу проблему, попробуйте выбрать лучшие функции, понимая вашу настоящую проблему. Более того, старайтесь подогнать модель только с нормальными образцами или, по крайней мере, с тем, чтобы большинство образцов (90%) были нормальными. Если нет, ваша модель узнает, что некоторые аномалии довольно распространены, и классифицирует их как нормальные. Однако, если вы знаете, какие значения являются аномальными при обучении данных, настройте гиперпараметр.
contamination
.