Может ли классификатор случайного леса sklearn регулировать размер выборки по дереву, чтобы обрабатывать дисбаланс классов?
возможно, это слишком многословно. Простой вопрос о случайный лес sklearn это:
для задачи истинной / ложной классификации есть ли способ в случайном лесу склеарна указать размер выборки, используемый для обучения каждого дерева, а также соотношение истинных и ложных наблюдений?
больше деталей ниже:
в реализации R случайного леса, называемого randomForest, есть опция sampsize()
. Это позволяет вам сбалансировать образец, используемый для обучения каждого дерева на основе результата.
например, если вы пытаетесь предсказать, является ли результат истинным или ложным, а 90% результатов в наборе тренировок ложными, вы можете установить sampsize(500, 500)
. Это означает, что каждое дерево будет обучаться на случайной выборке (с заменой) из обучающего набора с 500 истинными и 500 ложными наблюдениями. В этих ситуациях я обнаружил, что модели намного лучше предсказывают истинные результаты при использовании 50% - ного отсечения, что дает много высшие каппы.
похоже, что в реализации sklearn нет опции для этого.
- есть ли способ имитировать эту функциональность в sklearn?
- будет ли просто оптимизация отключения на основе статистики Каппа достичь аналогичного результата или что-то потеряно в этом подходе?
4 ответов
в версии 0.16-dev теперь вы можете использовать class_weight="auto"
иметь что-то близкое к тому, что вы хотите сделать. Это по-прежнему будет использовать все образцы, но он будет перевешивать их, чтобы классы стали сбалансированными.
после прочтения документации я думаю, что ответ Определенно нет. Престижность для всех, кто добавляет функциональность, хотя. Как упоминалось выше, пакет R randomForest содержит эту функциональность.
насколько мне известно, лес scikit-learn использует бутстрэппинг, т. е. размеры набора образцов, с которыми каждое дерево обучается, всегда имеют одинаковый размер и извлекаются из исходного набора обучения путем случайной выборки с заменой.
предполагая, что у вас есть достаточно большой набор учебных образцов, почему бы не сбалансировать это само по себе, чтобы провести 50/50 положительных/отрицательных образцов, и вы достигнете желаемого эффекта. scikit-learn предоставляет функциональные возможности для этого.
обход в R
только, для классификации можно просто использовать все ядра машины с 100% CPU
использования.
это соответствует времени и скорости Sklearn RandomForest
классификатор.
также для регрессии есть пакет RandomforestParallel
on GitHub
, что намного быстрее, чем Python
Sklearn Regressor
.
классификация: я протестировал и хорошо работает.