Я бы не рекомендовал вам использовать эту процедуру. Моя рекомендация: отказаться от этого проекта. Просто сдавайся и уходи. У вас нет надежды на эту работу.
источник для изображения
Если отбросить стандартные проблемы с пошаговым отбором (см. Здесь ), в вашем случае вы, скорее всего, будете иметь совершенные прогнозы из-за разделения в таком многомерном пространстве.
У меня нет конкретной информации о вашей ситуации, но вы заявляете, что у вас есть «всего несколько десятков образцов». Давайте будем благотворительными и скажем, у вас есть 90. Вы также говорите, что у вас есть «несколько тысяч функций». Давайте представим, что у вас «только» 2000. Для простоты предположим, что все ваши функции являются двоичными. Вы «верите, что метку класса можно точно предсказать, используя только несколько функций», скажем, вы будете искать наборы максимум из 9 функций. Наконец, давайте представим, что отношения детерминированы, поэтому истинные отношения всегда будут идеально присутствовать в ваших данных. (Мы можем изменить эти цифры и предположения, но это только усугубит проблему.) Теперь насколько хорошо вы сможете восстановить эти отношения в этих (щедрых) условиях? То есть как часто правильный набор будет единственным набором, который дает идеальную точность? Или, другими словами, сколько наборов из девяти функций также подойдет случайно?
Некоторые (чрезмерно) простые математические и симуляторы должны дать некоторые подсказки к этому вопросу. Во-первых, с 9 переменными, каждая из которых может быть 0 или 1, количество шаблонов, которые может показать наблюдение, составляет , но у вас будет только 90 наблюдений. Таким образом, вполне возможно, что для данного набора из 9 двоичных переменных каждое наблюдение имеет различный набор значений предикторов - нет повторов. Без повторов с одинаковыми значениями предикторов, где некоторые имеют y = 0, а некоторые y = 1, у вас будет полное разделение, и будет возможно точное предсказание каждого наблюдения. 29=512
Ниже у меня есть симуляция (закодированная в R), чтобы увидеть, как часто вы можете не иметь шаблонов значений х с 0 и 1. Это работает так, что я получаю набор чисел от 1 до 512, которые представляют возможные шаблоны, и вижу, соответствует ли какой-либо из шаблонов в первых 45 (это могут быть 0) какой-либо из шаблонов во вторых 45 (это может быть 1 с). Это предполагает, что у вас есть идеально сбалансированные данные ответов, что обеспечивает вам наилучшую защиту от этой проблемы. Обратите внимание, что наличие реплицированных x-векторов с различными значениями y на самом деле не выводит вас из леса, это просто означает, что вы не сможете точно предсказать каждое отдельное наблюдение в вашем наборе данных, что является очень строгим стандартом I пользуюсь здесь.
set.seed(7938) # this makes the simulation exactly reproducible
my.fun = function(){
x = sample.int(512, size=90, replace=TRUE)
return(sum(x[1:45]%in%x[46:90])==0)
}
n.unique = replicate(10000, my.fun())
mean(n.unique) # [1] 0.0181
Моделирование предполагает, что у вас возникнет эта проблема примерно с 1,8% наборов из 9 x-переменных. Сколько сейчас наборов из 9? Строго говоря, это будет (поскольку мы оговорили, что истинные 9 детерминированных причинных переменных находятся в вашем наборе). Однако многие из этих наборов будут перекрываться; будет 1991 / 9 ≈ 221 неперекрывающиеся наборы 9 в пределах указанного раздела ваших переменных (со многими такими разделами возможно). Таким образом, в некотором данном разделе мы могли бы ожидать, что будет 221 × 0,018 ≈ 41991 choose 9=1.3×10241991/9≈221221×0.018≈4 наборы из 9 x-переменных, которые отлично предсказывают каждое наблюдение в вашем наборе данных.
Обратите внимание, что эти результаты только для случаев, когда у вас есть относительно большой набор данных (в пределах «десятков»), относительно меньшее количество переменных (в пределах «тысяч»), только ищет случаи, когда каждое отдельное наблюдение может быть предсказано идеально ( будет еще много подходов, которые почти идеальны) и т. д. Ваш реальный случай вряд ли сработает «так хорошо». Более того, мы оговорили, что эти отношения совершенно детерминированы. Что произойдет, если в отношениях будет какой-то случайный шум? В этом случае у вас все еще будет ~ 4 (нулевых) набора, которые идеально предсказывают ваши данные, но правильный набор может не входить в их число .
Tl; dr , суть в том, что ваш набор переменных слишком большой / большой размер, а ваш объем данных слишком мал, чтобы что-либо было возможно. Если действительно верно, что у вас есть «десятки» выборок, «тысячи» переменных и абсолютно нет земного представления о том, какие переменные могут быть правильными, у вас нет надежды получить какую-либо процедуру. Иди делай что-нибудь еще со своим временем.