我有一个包含26个要素和31000行的数据集。它是38个主题的数据集。它用于生物识别系统。因此,我希望能够确定主题。
为了进行测试,我知道必须删除一些值。
那么,什么更好呢?为什么呢?
(a)保留30个科目作为训练集,并删除8个科目作为测试集
(b)保留38个主题,但删除每个主题的一些行。因此,最后我将得到一个训练集:24800行38个主题,以及一个测试集:6200行38个主题
我有一个包含26个要素和31000行的数据集。它是38个主题的数据集。它用于生物识别系统。因此,我希望能够确定主题。
为了进行测试,我知道必须删除一些值。
那么,什么更好呢?为什么呢?
(a)保留30个科目作为训练集,并删除8个科目作为测试集
(b)保留38个主题,但删除每个主题的一些行。因此,最后我将得到一个训练集:24800行38个主题,以及一个测试集:6200行38个主题
Answers:
我认为Matthew Gunn的答案是正确的,但在我看来,“记录明智的”简历可以涵盖两个不同的概念:
记录被随机分为几折,而与主题或时间无关。
记录分为基于时间的折叠,没有用于训练的折叠包含测试折叠开始后的数据。
在第一种情况下,数据的任何时间序列性质都会受到损害,因为训练集可以包含测试集之前和之后的数据。训练/测试的原理是:训练数据表示当前已知的数据,而测试数据表示尚未看到的数据(也许从字面上讲是将来的数据)。
时间序列自相关可能会影响选项2。也许模型的时间要素并不是很重要,所以“过去”和“未来”的观察可能是相同的。在这些情况下,#1或#2都不可行。
如果只有季节性而不是趋势,那么在某些学科的培训中加入“未来”似乎是可以的,以便预测新学科(哪些人会受到相同的季节性影响)。如果存在趋势,则对未来的培训应该了解有关在生产中使用该模型时您真的不知道的未来知识。
在OP的示例中,听起来像是明智的。但是,如果趋势和时间序列问题是模型的一部分,我将尝试使用基于主题和时间的划分,以便您在特定时间点之前对一组主题进行了培训,然后在之后对其他主题进行了测试该特定时间点。
一个关键的区别是您是否要:
更为常见的情况是案例编号(1)。例如,您如何预测即将进入急诊室的人的心脏病发作?而且,如果您遇到情况(1),则几乎可以肯定应该进行(a)主题交叉验证,而不是(b)记录交叉验证。在情况(1)中进行记录明智的验证可能会导致对新主题的表现不合理地高估。
我无法完全理解您要做什么(也许是自学,所以问题并不完全现实)。我不知道您处于哪种情况。如果您处于不太常见的情况(2),则可以进行记录明智的验证。
统计学的一般主题是仔细考虑什么是独立的以及什么是相关的。一般而言,独立观察往往是不同的主题。如果要预测新学科的表现,则必须对未进行过培训的学科进行测试!
在典型设置中,即使在对特征进行条件处理后,对同一个人的重复观察也会相互关联。因此,通过记录方式的交叉验证,您的测试集并不独立于您的训练集!在极端相关的情况下,您将在训练集和测试集中得到完全相同的观察结果!您将在测试集上进行训练!交叉验证中测得的表现不能预测新受试者的表现。
例如,最近的这篇论文称按记录交叉验证为``Voodoo Machine Learning''。
为了最大化训练数据,您可以做的是忽略一个主题进行交叉验证。每次迭代都针对不同的坚持主题进行测试,并对所有其他主题进行训练。
这实际上取决于您如何设想希望通过训练/测试拆分模拟的设置。为了使事情具体,说每一行描述一个对象在一个晚上的睡眠质量。
将来,每个科目都有可能首先进入睡眠实验室,并为您提供几个晚上的睡眠质量。之后,您将需要预测这些对象未来的夜晚睡眠质量。在这种情况下,您将使用选项b)。在中sklearn
,您可以使用sklearn.model_selection.StratifiedShuffleSplit
将来可能会首先有一些受试者进入睡眠实验室,并为您提供数晚的睡眠质量。之后,您将可以预测其他对象未来的夜晚睡眠质量。在这种情况下,您将使用选项a)。在中sklearn
,您可以使用sklearn.cross_validation.LeavePLabelOut
为了说明问题,我假设应用程序是用于预测未知的主题。这意味着(无论您是否具有时间序列或本质上无序的重复测量)都需要进行拆分,以便测试未知主题=>拆分a)
考虑到您只有38个主题,因此您应该对重采样验证进行一些思考。根据我使用类似的小样本量(尽管有更多功能)的经验,以下是一些建议:
进行主题外的引导或迭代的交叉验证。它们使您可以评估模型的稳定性,这对于小样本量问题至关重要。在不稳定的情况下,结果甚至可以用于聚合模型。
千万不能做留一主题了。它既不允许测量模型稳定性,也不能降低模型稳定性。此外,在某些情况下,由于样本量小(与预期的最小悲观偏见相反),它会遭受较大的悲观偏见。
如果您使用的是典型的品质因数,例如准确性,敏感性,特异性等,而任务是正确地对主题进行分类:请注意,关键问题是衡量性能,因为测试结果的不确定性取决于绝对数测试用例。举例来说,在17个真实阳性受试者中观察17个正确的预测对应于95%的置信区间,灵敏度范围从大约80%到100%。
换句话说,您将无法基于此进行数据驱动的模型优化。
这也意味着您不需要设置三组拆分(嵌套式交叉验证),因为在这里浪费资源进行无统计意义的比较-您的优化几乎可以保证会失败(尽管您可能不会注意到,请勿检查稳定性)。
对于拟议的5(3)个测试/优化/验证主题,对二项式置信区间进行相同的计算,得出所有正确范围(低至50%(30%))的95%ci,因此根据理想的测试结果,您的置信区间仍应包括50 / 50猜!
我们写了一些关于这些主题的论文: