2017-01-20 20 views
1

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

+0

Сколько у вас записей? – Ansjovis86

+0

У меня есть 1157 экземпляров и 70518 функций. из которых я использую 786 в качестве учебного набора и 371 для тестирования – Kate

+0

. Вы можете лучше взять половину своих экземпляров и повторить попытку. Я думаю, вы должны держать все функции вместе. Однако Кейт уже предлагает пакет каретки. Должна быть предусмотрена возможность выбора функций с размером данных, которые у вас есть. В противном случае вы могли бы рассмотреть возможность использования одномерного фильтра, например: дисперсионная фильтрация, чтобы выполнить предварительный выбор функции, прежде чем выполнять реальный выбор функции. Просто для уменьшения размерности. – Ansjovis86

ответ

0

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

caret package имеет some useful functions to help with this.

Например, 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 или выше.

+0

спасибо, но опять же, это не работает с большим набором данных. Разделение его на что-нибудь повлияет? – Kate

+0

Интуитивно, разделение данных не будет полностью эффективным. Например, если две сильно коррелированные функции оказываются в разных разделах, они не будут исключены из анализа. Проблема в том, что набор данных слишком велик для хранения в памяти сразу? Или конкретно, что пакет Boruta исчерпал память? –

+0

Слишком большой объем памяти в памяти. Извините за то, что вы не поняли – Kate

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^