У меня вопрос: нужно ли мне пройти тестовый тренинг и проверить работоспособность изолированного леса?
Вы хотите обнаружить выбросы только в этом пакетном файле, верно? В этом случае ваше решение может быть в порядке, , но в большинстве случаев вы должны разделиться.
Но, пожалуйста, попытайтесь понять, когда вам нужно сделать раскол. Чтобы объяснить это, давайте перейдем к реальному сценарию.
Предположим, вы пытаетесь предсказать аномальное поведение различных двигателей. Вы создаете модель, используя данные, доступные в вашей базе данных до сегодняшнего дня, и начинаете прогнозировать поступающие данные. Возможно, что предсказанные данные не равны данным, использованным для обучения, верно? Тогда, как вы можете смоделировать эту ситуацию при настройке вашей модели? Использование train-test-validate и оценка с правильными метриками.
Редактировать: Позвольте мне добавить пример. Я постараюсь сделать это очень просто.
Если ваш двигатель база данных данные:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 1 | 0 | 0.25 |
| 2 | 0 | 0.40 |
| 3 | 1 | 0.16 |
| 4 | 1 | 0.30 |
| 5 | 0 | 5.3 | <- anomaly
| 6 | 1 | 14.4 | <- anomaly
| 7 | 0 | 16.30 | <- anomaly
+----+-------------+--------------+
И использовать все это для обучения модели, модели будет использовать три аномальных значения для тренировки, верно? Алгоритм создаст лес, используя эти 3 аномальные значения, поэтому модели будет проще их прогнозировать.
Теперь, что произойдет с этими производственными данными:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 8 | 1 | 3.25 | <- anomaly
| 9 | 1 | 4.40 | <- anomaly
| 10 | 0 | 2.16 |
+----+-------------+--------------+
Вы передаете его своей модели, и он говорит, что точки не аномальные, а обычные данные, потому что он думает, что ваш «порог» для значений больше 5.
Этот «порог» Продукт гиперпараметров алгоритма, возможно, с другой конфигурацией, модель могла бы предсказать значения как аномальные, но вы не тестируете модель обобщение .
Итак, как вы можете улучшить эту конфигурацию? Разделение данных, которые у вас есть на данный момент. Вместо того чтобы тренироваться со всеми данными базы данных, вы могли бы тренироваться только с одной его частью и использовать другую часть для тестирования, например, использовать эту часть как данные поезда:
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 1 | 0 | 0.25 |
| 2 | 0 | 0.40 |
| 3 | 1 | 0.16 |
| 4 | 1 | 0.30 |
| 7 | 0 | 16.30 | <- anomaly
+----+-------------+--------------+
И это как данные теста :
+----+-------------+--------------+
| id | engine_type | engine_value |
+----+-------------+--------------+
| 5 | 0 | 5.3 | <- anomaly
| 6 | 1 | 14.4 | <- anomaly
+----+-------------+--------------+
И установите комбинацию гиперпараметров, которая заставит этот алгоритм правильно прогнозировать данные теста. Гарантирует ли это, что в будущем прогнозы будут идеальными? Нет, это не так, но это не то же самое, что просто подгонка данных без оценки того, насколько хорошо модель обобщает.
Также кто-то может подтвердить, если мой код действителен?
Да, но позвольте мне добавить рекомендацию, изменив это:
iForest.fit(df.values.reshape(-1,1))
pred = iForest.predict(df.values.reshape(-1,1))
pred=df['anomaly']
На это:
df['anomaly'] = iForest.fit_predict(df.values.reshape(-1,1))
Кроме того, если вы используете новую версию pandas , используйте:
df['anomaly'] = iForest.fit_predict(df.to_numpy().reshape(-1,1))