Изолированный лес с множеством функций, обнаруживающих все как аномалию

У меня есть реализация изолированного леса, в которой я беру функции (все числовые); масштабируйте их от 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.

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