Выбор функции на подмножествах набора функций

Я пытаюсь сделать выбор функции с помощью пакета Boruta в R. Проблема в том, что мой набор функций слишком велик (70518 функций), и, следовательно, кадр данных слишком велик (2 ГБ) и не может быть обработан пакетом Boruta сразу. Мне интересно, могу ли я разделить фрейм данных на несколько наборов, каждый из которых содержит меньшее количество функций? Это звучит немного странно для меня, так как я не уверен, что алгоритм может правильно определить вес, если не все функции присутствуют. Если нет, я был бы очень признателен, если кто-то может предложить альтернативный способ сделать это.

2 ответа

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

Пакет Caret имеет несколько полезных функций, чтобы помочь с этим.

Например, findCorrelation() может использоваться для простого удаления избыточных функций:

dat <- cor(dat, method='spearman')
dat[is.na(dat)] <- 0

features_to_ignore <- findCorrelation(dat, cutoff=0.75, verbose=FALSE)
dat <- dat[,-features_to_ignore]

Это удалит все функции с корреляцией Спирмена 0,75 или выше.

Я собираюсь начать с вопроса, почему вы считаете, что это может даже сработать? В этом случае не только p >> n, но p >>>>>> n, Вы всегда будете находить ложные ассоциации. Более того, даже если бы вы могли сделать это (скажем, арендовав достаточно большую машину в службе облачных вычислений, что я бы предложил), вы смотрите на абсурдное количество вычислений, поскольку вычислительная сложность построение единого дерева решений O(n * v log(v)), где n это количество записей и v номер поля в каждой записи. Построение RF занимает столько для каждого дерева.

Вместо решения проблемы, как указано, вы можете переосмыслить ее с нуля. Что вы на самом деле пытаетесь сделать здесь? Можете ли вы вернуться к первым принципам и переосмыслить это?

Другие вопросы по тегам