Избранные особенности в случайной выборке леса - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь выяснить, какие объекты рассматриваются в каждой подвыборке в моей задаче классификации, для этого я предполагаю, что существует случайное подмножество признаков длины max_features, которое учитывается при построении каждого дерева.

Меня интересует это, потому что я использую два разных типа функций для своей задачи, поэтому я хочу убедиться, что в каждом дереве оба типа функций используются для каждого разбиения узла.Таким образом, один из способов, как минимум, заставить каждое дерево учитывать все особенности, установив для параметра max_features значение None.Таким образом, один вопрос здесь будет:

Означает ли это, что оба типа объектов рассматриваются для каждого разбиения узла?

Другой вопрос, полученный из предыдущего вопроса:

Поскольку Random Forest делает подвыборку для каждого дерева, является ли это подвыборкой среди наблюдений (строк) или среди столбцов (объектов)?Кроме того, может ли эта подвыборка выполняться группой строк вместо случайного ?

Кроме того, представляется неправильным допущение использовать все функции параметра max_features ни в Decision Trees, ни в random forest, поскольку это противоречит всему смыслу и определению random forest с точки зрения корреляции между деревьями (я не совсем уверен в этом утверждении).

Кто-нибудь знает, может ли это быть что-то, что можно изменить в исходном коде, или, по крайней мере, к нему можно подходить по-другому?

Любые предложения или комментарии очень приветствуются.

Не стесняйтесь исправлять любые предположения.

В исходном коде я читал об этом, но не смог найти, где это можетбыть определенным.

Исходный код проверен до настоящего времени:

splitter.py код из дерева решений

код forest.py из случайного леса

1 Ответ

2 голосов
/ 05 июля 2019

Означает ли это, что оба типа объектов рассматриваются для каждого разбиения узла?

Учитывая, что вы правильно указали выше, что установка max_features в None действительно заставит алгоритм учитывать все функции в каждом разделении, неясно, что именно вы спрашиваете здесь: все означает все и, с точки зрения алгоритма, не существует разных «типов» признаков.

Так как Random Forest делает подвыборку для каждого дерева, эта подвыборка также выполняется для случаев (строк) или среди столбцов (объектов)?

Оба. Но, что касается строк, это не совсем субсэмплинг, это фактически начальная выборка , то есть выборка с заменой , что означает, что в каждом примере некоторые строки будут отсутствовать, а другие будет присутствовать несколько раз.

Случайный лес - это комбинация двух независимых идей: пакетирование и случайный выбор характеристик. Последний по существу соответствует «подвыборке столбцов», тогда как первый включает выборку начальной загрузки, которую я только что описал.

Кроме того, может ли эта подвыборка выполняться группой строк, а не случайно?

AFAIK нет, по крайней мере, в стандартных реализациях (включая scikit-learn).

Кто-нибудь знает, может ли это быть изменено в исходном коде или, по крайней мере, к нему можно подходить по-другому?

В исходном коде все можно изменить буквально; теперь, если это действительно необходимо (или даже хорошая идея), это уже другая история ...

Кроме того, кажется, что не стоит использовать все функции параметра max_features

.

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

Хотя ваш вопрос (и проблема) звучит довольно расплывчато, я бы посоветовал «сидеть сложа руки и расслабиться», позволяя (достаточно мощному) радиочастотному алгоритму выполнять свою работу с вашими данными ...

...