我不建议您使用该过程。我的建议是:放弃此项目。只是放弃而走开。您对此工作没有希望。
图片来源
撇开逐步选择(参见此处)的标准问题,由于在如此高维空间中的分离,您很有可能获得完美的预测。
我没有您情况的具体信息,但是您声明您“只有几十个样本”。让我们做一个慈善机构,说您有90个。进一步说,您有“数千个功能”。假设您“只有” 2,000。为了简单起见,假设您的所有功能都是二进制的。您“相信仅使用几个功能就可以准确预测类标签”,假设您将查找最多最多9个功能的集合。最后,让我们想象一下这种关系是确定性的,因此真正的关系将始终完美地存在于您的数据中。(我们可以更改这些数字和假设,但这只会使问题变得更糟。)现在,在这些(一般)条件下,您将如何恢复这种关系?也就是说,正确的集合是唯一能产生完美准确性的集合的频率如何?或者,换句话说,仅凭偶然一个机会也可以容纳几套九个功能?
一些(过度)简单的数学和模拟应该为这个问题提供一些线索。首先,使用9个变量(每个变量可以为0或1),观察值可以显示的模式数量为,但是您只有90个观察值。因此,对于给定的9个二元变量集,每个观察值完全有可能具有不同的预测值集-完全没有重复。如果没有具有相同预测值的重复项,其中某些变量的y = 0,而某些y = 1,则您将完全分离,并且可以对每个观察值进行完美的预测。 29=512
下面,我进行了一次模拟(用R编码),以查看没有0和1的x值模式的频率。它的工作方式是,我得到一组从1到512的数字,它们代表可能的模式,并查看前45个模式中的任何模式(可能是0)是否与后45个模式中的任何模式匹配(可能是1s)。这假定您具有完美平衡的响应数据,从而可以最好地防止此问题。请注意,具有一些重复的具有不同y值的x向量并不能真正使您脱颖而出,这仅意味着您将无法完美预测数据集中的每个观察值,这是我非常严格的标准在这里使用。
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
模拟表明,在9个x变量的集合中大约有1.8%会出现此问题。现在,有多少套9套?严格来说,这将是(因为我们已经在您的集合中规定了真正的9个确定性因果变量)。但是,其中许多集合将重叠。在变量的指定分区内将有不重叠的9组(可能有许多这样的分区)。因此,在某些给定分区中,我们可能期望会有组9个x变量,这些变量将完美地预测数据集中的每个观察值。 1991 / 9 ≈ 221 221 × 0.018 ≈ 41991 choose 9=1.3×10241991/9≈221221×0.018≈4
请注意,这些结果仅适用于您具有相对较大的数据集(在“数十”之内),变量数量相对较小(在“千”之内)的情况,仅用于查找可以完美预测每个观察值的情况(会有很多更集,几乎完美的),等你的实际情况是不可能制定出“这口井”。此外,我们规定这种关系是完全确定的。如果关系中存在一些随机噪声,会发生什么?在那种情况下,您仍然会有〜4个(空)集合来完美地预测您的数据,但是正确的集合可能不在其中。
Tl; dr,这里的基本要点是变量集太大/高维,并且数据量太小,以至于不可能。如果确实有“数十个”样本,“数千个”变量,并且绝对不知道哪个变量可能是正确的,那您将不希望通过任何过程得到任何帮助。花费时间去做其他事情。