Выбор объектов со случайными лесами

16

У меня есть набор данных с в основном финансовыми переменными (120 функций, 4k примеров), которые в основном сильно коррелированы и очень шумные (например, технические индикаторы), поэтому я хотел бы выбрать около 20-30 максимум для последующего использования с обучением модели (бинарная классификация) - увеличение уменьшение).

Я думал об использовании случайных лесов для ранжирования объектов. Это хорошая идея использовать их рекурсивно? Например, скажем, в первом раунде я отбрасываю худшие 20%, второй тоже и так далее, пока не получу желаемое количество функций. Должен ли я использовать перекрестную проверку с RF? (Для меня интуитивно не использовать CV, потому что это почти то, что уже делает RF.)

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

Кстати, я хотел бы попробовать следующие модели после выбора признаков: SVM, нейронные сети, локально-взвешенные регрессии и случайный лес. Я в основном работаю в Python.

НМАО
источник
2
хотел бы подключиться для обмена мнениями. Я работаю над чем-то похожим
user670186
есть ли причина, по которой никто не предложил просто использовать built-inатрибут RandomForestClassifier в sklearnвызываемой feature_importances_....? Вы увидите это в ссылке.
Candic3
Остерегайтесь, потому что multicollinearityможет исказить важность функций и их выбор. проверить это здесь
Candic3
Остерегайтесь алгоритмов по умолчанию: parrt.cs.usfca.edu/doc/rf-importance/index.html
Тим

Ответы:

12

Для выбора функции нам нужна функция оценки, а также метод поиска для оптимизации функции оценки.

Вы можете использовать RF в качестве метода ранжирования функций, если вы определяете какой-либо соответствующий показатель важности. RF выберет функции на основе случайного с методом замены и сгруппирует каждое подмножество в отдельное подпространство (называемое случайным подпространством). Одна важная функция оценки может быть основана на назначении точности каждого дерева для каждого признака в этом случайном подпространстве. Затем вы делаете это для каждого отдельного дерева. Поскольку источник генерации подпространств является случайным, вы можете установить порог для вычисления показателя важности.

Резюме:

Шаг 1 : Если функция X2 появляется в 25% деревьев, оцените ее. В противном случае не учитывайте ранжирование функции, поскольку у нас нет достаточной информации о ее эффективности.

Шаг 2 : Теперь присвойте оценку производительности для каждого дерева, в котором отображается X2, X2 и усредните оценку. Например: perf (Tree1) = 0,85 perf (Tree2) = 0,70 perf (Tree3) = 0,30

Тогда важность признака X2 = (0,85 + 0,70 + 0,30) / 3 = 0,6167

Вы можете рассмотреть более сложные настройки, включив глубину разделения функции или значение получения информации в дереве решений. Может быть много способов разработать функцию оценки на основе деревьев решений и RF.

Что касается метода поиска , ваш рекурсивный метод кажется разумным в качестве способа выбора лучших.

Наконец, вы можете использовать RF либо в качестве классификатора, либо в качестве регрессионной модели при выборе ваших функций, так как оба они дадут вам оценку производительности. Оценка является ориентировочной, поскольку она основана на выборках OOB, не входящих в пакет, и вы не можете рассматривать перекрестную проверку в более простом режиме.

soufanom
источник
Спасибо за вклад. Хотел отметить это (0.85+0.70+0.30)/3 = 0.6167.
Хенди
5
Если вы работаете с python, вы можете напрямую использовать значение переменной, вычисленное в sklearn, при вызове случайного леса.
Царапина
5

У меня есть набор данных с в основном финансовыми переменными (120 функций, 4k примеров), которые в основном сильно коррелированы и очень шумные (например, технические индикаторы), поэтому я хотел бы выбрать около 20-30 максимум для последующего использования с обучением модели (бинарная классификация) - увеличение уменьшение).

4k примеров действительно недостаточно, чтобы оценить что-то очень сложное - вам нужно использовать простейшие возможные модели (линейная / логистическая регрессия, линейная SVM) и небольшое количество переменных

Учитывая, что ваши данные являются зашумленными и коррелированными, PCA, вероятно, является лучшим выбором для вас [он эффективно определяет общие сигналы, усредняемые по отдельным показателям]

Регуляризация L2 (для линейной модели) также поможет усреднить шум [например, если у вас есть n шумных копий одного и того же сигнала, регуляризация L2 будет способствовать тому, что веса будут одинаковыми - усреднение этих n переменных]

seanv507
источник