2013-11-27 2 views
5

Возможно, это слишком затянуто. Простой вопрос о случайном лесу sklearn:Может ли sklearn Random Forest классификатор отрегулировать размер выборки по дереву, чтобы справиться с дисбалансом класса?

Для проблемы истинной/ложной классификации существует ли способ в случайном лесу sklearn указать размер выборки, используемый для обучения каждому дереву, а также отношение истинности к ложным наблюдениям?

подробнее ниже:


В реализации R случайного леса, называемый RandomForest, есть вариант sampsize(). Это позволяет сбалансировать выборку, используемую для обучения каждого дерева на основе результата.

Например, если вы пытаетесь предсказать, является ли результат истинным или ложным, а 90% результатов в наборе обучения являются ложными, вы можете установить sampsize(500, 500). Это означает, что каждое дерево будет обучено случайной выборке (с заменой) из набора тренировок с 500 истинными и 500 ложными наблюдениями. В этих ситуациях я обнаружил, что модели работают намного лучше, предсказывая истинные результаты при использовании 50% отсечки, что дает гораздо более высокие каппы.

Не похоже, что в реализации sklearn есть опция.

  • Есть ли способ имитировать эту функциональность в sklearn?
  • Было бы просто оптимизировать отсечку, основанную на статистике Каппы, добиться аналогичного результата или что-то потерянное в этом подходе?

ответ

1

После прочтения документации, я думаю, что ответ определенно нет. Престижность любому, кто добавляет функциональность, хотя. Как упоминалось выше, R-пакет randomForest содержит эту функциональность.

0

Насколько мне известно, в лесу scikit-learn используется самонастройка, то есть размеры образцов, с которыми обучается каждое дерево, всегда имеют одинаковый размер и взяты из исходного набора тренировок с помощью случайной выборки с заменой.

Предполагая, что у вас достаточно большой набор учебных образцов, почему бы не сбалансировать это сам, чтобы провести 50/50 положительных/отрицательных образцов, и вы достигнете желаемого эффекта. scikit-learn обеспечивает функциональность для этого.

3

В версии 0.16-dev теперь вы можете использовать class_weight="auto", чтобы иметь что-то близкое к тому, что вы хотите сделать. Это все равно будет использовать все образцы, но это приведет к их избыточности, чтобы классы стали сбалансированными.

0

Обходной путь в R только для классификации можно просто использовать все стержни машины с использованием 100% CPU.

Это соответствует времени и скорости классификатора Sklearn RandomForest.

Также для регрессии есть пакет RandomforestParallel на GitHub, что намного быстрее, чем PythonSklearn Regressor.

Классификация: Я тестировал и хорошо работает.