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


9

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

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

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

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

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

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


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 также могут быть добавлены с такими же коэффициентами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.