У меня есть набор данных с в основном финансовыми переменными (120 функций, 4k примеров), которые в основном сильно коррелированы и очень шумные (например, технические индикаторы), поэтому я хотел бы выбрать около 20-30 максимум для последующего использования с обучением модели (бинарная классификация) - увеличение уменьшение).
Я думал об использовании случайных лесов для ранжирования объектов. Это хорошая идея использовать их рекурсивно? Например, скажем, в первом раунде я отбрасываю худшие 20%, второй тоже и так далее, пока не получу желаемое количество функций. Должен ли я использовать перекрестную проверку с RF? (Для меня интуитивно не использовать CV, потому что это почти то, что уже делает RF.)
Также, если я использую случайные леса, я должен использовать их в качестве классификаторов для двоичного файла или регрессора для фактического увеличения / уменьшения, чтобы получить значения функций?
Кстати, я хотел бы попробовать следующие модели после выбора признаков: SVM, нейронные сети, локально-взвешенные регрессии и случайный лес. Я в основном работаю в Python.
built-in
атрибут RandomForestClassifier вsklearn
вызываемойfeature_importances_
....? Вы увидите это в ссылке.multicollinearity
может исказить важность функций и их выбор. проверить это здесьОтветы:
Для выбора функции нам нужна функция оценки, а также метод поиска для оптимизации функции оценки.
Вы можете использовать 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, не входящих в пакет, и вы не можете рассматривать перекрестную проверку в более простом режиме.
источник
(0.85+0.70+0.30)/3 = 0.6167
.4k примеров действительно недостаточно, чтобы оценить что-то очень сложное - вам нужно использовать простейшие возможные модели (линейная / логистическая регрессия, линейная SVM) и небольшое количество переменных
Учитывая, что ваши данные являются зашумленными и коррелированными, PCA, вероятно, является лучшим выбором для вас [он эффективно определяет общие сигналы, усредняемые по отдельным показателям]
Регуляризация L2 (для линейной модели) также поможет усреднить шум [например, если у вас есть n шумных копий одного и того же сигнала, регуляризация L2 будет способствовать тому, что веса будут одинаковыми - усреднение этих n переменных]
источник