Оценка ошибки из пакета для повышения?

9

В Случайном Лесу каждое дерево растет параллельно на уникальной выборке данных Boostrap. Поскольку ожидается, что каждая выборка бустрапа будет содержать около 63% уникальных наблюдений, это оставляет примерно 37% наблюдений, которые можно использовать для тестирования дерева.

Теперь, кажется , что в стохастической Градиент Активизации, существует также оценки похож на тот , в РФ:OOBerror

Если для bag.fraction задано значение больше 0 (рекомендуется 0,5), gbm вычисляет ожидаемую оценку улучшения качества прогноза. Он оценивает уменьшение отклонения от тех наблюдений, которые не использовались при выборе следующего дерева регрессии.

Источник: Ridgeway (2007) , раздел 3.3 (стр. 8).

У меня проблемы с пониманием, как это работает / действительно. Скажем, я добавляю дерево в последовательности. Я выращиваю это дерево на случайной подвыборке исходного набора данных. Я мог бы проверить это единственное дерево на наблюдениях, которые не были использованы для его выращивания. Согласовано. НО , поскольку Boosting является последовательным, я скорее использую всю последовательность деревьев, построенных до сих пор, чтобы обеспечить прогноз для этих опущенных наблюдений. И есть большая вероятность, что многие из предшествующих деревьев уже видели эти наблюдения. Таким образом, модель на самом деле не тестируется в каждом раунде на невидимых наблюдениях, как с RF, верно?

Итак, как же это называется оценкой ошибки "из пакета"? Мне кажется, что это не "из" сумки, так как наблюдения уже были замечены?

Antoine
источник
1
Смотрите обсуждение здесь github.com/scikit-learn/scikit-learn/pull/1806 . Вы не одиноки в выражении озабоченности тем, как рассчитываются оценки OOB.
mpiktas
спасибо за ссылку, но, к сожалению, все участники потока, кажется, так же потеряны, как и я!
Антуан
1
Вообще-то, нет. См. Github.com/scikit-learn/scikit-learn/pull/2188 . В этом коммите оценка OOB изменяется на улучшение OOB, как это делает gbm. Я не знаю, как эта идея работает точно, но из того, что я собрал, образец oob для текущего дерева используется для вычисления улучшения OOB. Мне не удалось найти математические формулы, поэтому нужно покопаться в коде gbm, чтобы увидеть, насколько точно рассчитывается это улучшение.
mpiktas
@ Antoine Действительно захватывающий вопрос! был найден окончательный ответ?
Сорен Хавелунд Веллинг
1
Нет, к сожалению. Некоторые подсказки даются по указанным выше ссылкам (в комментариях), этой теме и этой другой теме . Это сводит меня с ума. Когда-нибудь кто-нибудь должен послать электронное письмо доктору Фридману / Хасти ... Хотя, спасибо за ваше внимание.
Антуан

Ответы:

2

Отвечая только частично (и добавляя новый вопрос к вашему вопросу).

Реализация gbm в R http://www.rdocumentation.org/packages/gbm/functions/gbm имеет два параметра для настройки некоторых параметров.

а) train.fractionопределит часть данных, которые используются для обучения всех деревьев, и, таким образом, 1 - train.fractionбудет истинной OOB (вне пакета) данных.

б) bag.fractionопределит пропорцию обучающих данных, которые будут использоваться при создании следующего дерева в бусте. Таким образом, могут существовать некоторые данные, которые никогда не используются для создания какого-либо дерева, и они могут действительно использоваться как данные OOB (но это маловероятно, см. Вопрос ниже)

0.37ntreesntreeerr.rateconfusion

Я не знаю, как на это ответить (и я благодарю вас (+1) за то, что задали вопрос и заставили меня осознать, что я не понимаю этот аспект randomForests). Возможное решение состоит в том, что есть только один загрузчик - и все деревья построены из него - но, насколько я знаю, это не так.

Жак Вайнер
источник
Для RF / Bagging нет проблем: на любом данном этапе в процессе построения ансамбля любое наблюдение в исходном наборе данных может быть подано ко всем деревьям, которые были обучены на образцах бустрапа, лишенных этого наблюдения. Приблизительно одна треть (~ 37%) от общего количества деревьев будет соответствовать этому условию. Кроме того, позволяя этим деревьям голосовать и выбирая самый популярный класс, можно получить прогноз для наблюдения. Количество раз, когда прогноз отличается от истинной метки наблюдения, усредненной по всем классам, дает оценку погрешности вне пакета
Antoine
1
Кроме того, кажется, что то, что дает возможность оценки ошибок OOB в Boosting, происходит не от train.fractionпараметра (который является просто функцией функции gbm, но отсутствует в исходном алгоритме), а на самом деле от того факта, что только подобразец Данные используются для обучения каждого дерева в последовательности, оставляя наблюдения (которые могут быть использованы для тестирования). Что восходит к моему первоначальному вопросу. Как эти наблюдения можно использовать для тестирования, поскольку они, вероятно, были много раз замечены многими предыдущими деревьями в последовательности?
Антуан
забыл упомянуть, что каждое дерево в РФ действительно построено из своего собственного, уникального примера начальной загрузки исходных данных
Антуан
@ user2835597 спасибо за ваши объяснения относительно РФ. Таким образом, ошибка OOB в RF действительно оценивает только 1/3 деревьев в лесу (что не выглядит для меня очень полезным). Ну, учить что-то каждый день
Жак Вайнер
В любом случае, параметр train.fraction, кажется, является ответом на ваш вопрос. Реализация sklearn также имеет аналогичный параметр
Жак Вайнер,
-2

Я полагаю, что они делают из сумки оценку на каждом этапе. Поскольку результаты всех шагов суммируются (с коэффициентами), ошибки OOB также могут быть добавлены с такими же коэффициентами.

user2225548
источник