除了Stephan Kolassa和Christian Henning的回答之外,还有一些想法:
正如Christian所说,在小样本量的情况下,嵌套交叉验证是唯一明智的拆分方案。这有助于充分利用你的样本,但它不能创造奇迹:你仍然只有93个和7个病例。
具体来说,我建议:使用两个嵌套分割的分层重复k倍CV(或离职)并明确建议不休假-一-out:在LOO中,模型不稳定性和个案方差(小的有限样本)是共线的。
CV的重复允许您测量(分离)模型不稳定性方差和方差,因为测试样本大小有限,参见我们的论文Beleites,C.&Salzer,R.《在小样本情况下评估和提高化学计量学模型的稳定性》,《Anal Bioanal Chem》,2008,390,1261-1271
考虑是否一类分类器(又名阶级模型)对于多数阶级来说是一个明智的选择。这将允许您对更知名的类进行建模,而不会因为其他类的案例很少而使其边界受到极端不确定性的影响。
然后,您仍然可以使用不属于该类的案例来评估生成的类模型。
一般来说:如果分类问题是真正的二元问题,则二元模型将更有效,即与单类分类器相比,建立类边界所需的情况更少。
OTOH,如果一个类定义错误或可用的情况太少,二进制分类器的边界可能变得非常不确定。
它对你的情况是否有帮助需要确定,但我想值得一试。
更新:由于一些评论说这是一个医学问题,二进制分类(或多个互斥类)对应于鉴别诊断也就是说,在这种情况下,您知道只有所考虑的类才能发生,并且它们是互斥的。一类分类对应的诊断可能不是所有其他可能性都已知或建模,和/或类不是相互排斥的。(肝炎患者也可能有其他感染。或者肿瘤等)
虽然我完全同意Stephan的观点,即你确实需要使用适当的评分规则,但这里有1-2点硬评估指标是有用的:你可以做到事后计算事先和他们在一起。因此,让我们考虑这两类的敏感性,并查看95%置信区间宽度。对于观察到的100%(或0%)灵敏度而言,这是最窄的,而对于50%的灵敏度而言,则是最宽的。
- 对于大多数人来说,
观察到100%->c.i.≈96-100%
观察到的50%->c.i.为40-60%
- 对于少数民族来说,
观察到的100%->c.i.为60-100%
观察到的50%->c.i.为20-80%(是的,这不会发生,但关键是:基于7个测试案例,你无法区分50:50的猜测和明显的“完美”预测.)
结论如下:
如果置信区间宽度约为少数类可能值范围的一半是不可接受的=>您可以立即停止工作。
你将无法进行任何有意义的优化,包括少数类评估。一类分类器的优化可能也会提前停止,因为也存在很大的方差不确定性。
虽然适当的评分规则通常比硬比例具有更好的方差特性(除其他优点外),但过拟合可能是n:p<1/4的一个严重问题。过拟合通常伴随着模型预测变得“过拟合”的症状,即比它们应该的更难:过拟合模型通常预测0或100%的类成员,而不是介于两者之间的任何东西。在这种情况下,适当的评分规则与(“人为”)强化的比例一样有不好的差异。
所以,使用(严格地)适当的评分规则,但不要期望它们受到较少的方差不确定性的影响。
从统计数据的角度来看,数据驱动的模型优化通常是大规模多重比较情况。这里,用不可忽略的噪声对目标函数进行评价。
即使是在大多数类上,您也很难负担太多数据驱动的模型优化。因此,在建模中包含尽可能多的外部知识,并减少(或避免)模型优化。
在我的领域中,光谱数据的化学计量学建模就是一个例子,我们可以通过检查相邻变量之间的噪声线性模型的系数模式来发现一些过拟合的情况,并且我们知道,由于物理和化学的原因,(双)线性模型通常应该是合适的。因此,如果我在第一(少数)个主成分中发现了这样的噪声模式,就没有必要考虑具有给定数据的任何更复杂的模型,我可以相应地限制超参数的搜索空间。(该模型可能仍然过盈,我可以通过重复CV进行测量。)
更新:简历术语
分层(这里)指以尽可能保持类的相对频率的方式进行拆分。
嵌套意味着为了评估/验证/“验证”最终模型,将一个子集案例进行分割,然后将剩余数据(广义训练集,即包括超参数优化)第二次分割为狭义训练集(在该训练集上,使用不同的超参数集拟合暂定模型)以及用于预测性能“中间”估计的数据集。这些性能估计值用作超参数优化/选择的目标。
这两种分割都需要产生统计上独立的数据子集,而不是可以在许多合适的“分割程序”(k倍CV、单次分割、自举)中进行选择。
因此,为了进行数据驱动的超参数优化,需要嵌套。如果事先修复所有超参数,则不需要优化,因此只需要一级拆分(对应于嵌套设置的外部拆分)。
交叉验证是一个拆分过程,可生成指定数量的子集拆分,千美元$。原始数据中的每个案例在所有千美元$测试子集(在所有其他这些分割中都是训练用例),并且测试子集的大小应尽可能相似。
代理模型由千美元$假设训练子集是等价的,并且是在整个数据集上训练的模型的适当近似。因此结果可以是集合的并作为近似值来估计在整个数据集上训练的模型的预测性能。这种池在小样本情况下至关重要,因为它可以产生尽可能多的测试案例。
千美元$-折叠CV是CV的变体,直接指定所需的子集数量。
(与离开相反-n美元$-out,其中测试子集的大小为直接指定,以及千美元$是总数量的结果可用案例除以所需子集大小)
重复CV重复CV程序以评估更多替代模型。对于各种CV来说,这是可能的,其中用例->测试子集的精确分配具有随机成分,即每个测试子集具有超过1个用例的k折或leave-nout。
由于同一案例是用多个不同的替代模型进行测试的,因此我们可以更容易地将结果分为方差,这是由于模型(训练)不稳定性与个案差异造成的。
所以我做了一个k折(例如,5折),然后在包含80个样本的火车组中,我再做一个k折叠,将其分成64个和16个样本?
对
然后在构成我的训练集的64个样本中,我尝试了超参数集(即GridSearchCV),
对
然后对16个样本进行评估,以找到最佳的超参数,
否:根据5x16=64个样本进行评估,选择最佳超参数
然后使用该超参数集对80个案例进行模型训练。让我们把结果称为自动调整模型。
然后根据我的20个样本测试集进行评估?
再次否定:您评估了5个自动调优的模型(在80个培训案例中),每个模型对应20个案例,从而得到100个测试案例的结果。
您可以使用自动调整过程在100个训练案例中训练一个自动调整的模型,并使用100个案例测试结果作为该模型性能的近似值。
同样,一类分类器主要应该只识别离群值吗?就我而言,我的班级有93个样本,是“健康的”,所以这对我没有多大帮助。
更准确地说,它应该识别属于该类的案例。
对于其他情况,health(normal!?)类模型应该告诉您它们不属于health类。
重要的一点是,从93个健康案例中,可以比从7个“非健康”案例中更好地估计(不太确定)类边界,即使它们来自定义良好的类(非健康甚至不需要)。
您可以尝试为其他7个案例设置一个额外的whatever-disease-it-is类(如果它们可以合理地计算为属于同一类),但这将在类边界上产生巨大的不确定性。
由于只有少数类的7种情况,一个类中最多只有7种情况的判别/二元分类器在类边界中也将具有巨大的不确定性。