创建保留集的更合适方法是:删除某些主题或从每个主题中删除一些观测值?


11

我有一个包含26个要素和31000行的数据集。它是38个主题的数据集。它用于生物识别系统。因此,我希望能够确定主题。

为了进行测试,我知道必须删除一些值。

那么,什么更好呢?为什么呢?

  1. (a)保留30个科目作为训练集,并删除8个科目作为测试集

  2. (b)保留38个主题,但删除每个主题的一些行。因此,最后我将得到一个训练集:24800行38个主题,以及一个测试集:6200行38个主题


1
如果要识别主题,如何删除测试集的“整个”主题?在30个主题上训练的模型将只能识别这30个主题,而不是从未见过的8个主题。您对“生物系统”的澄清可能会使大多数现有答案不适用。
变形虫说恢复莫妮卡

1
弄清以下内容将很有帮助:(1)确切的目标,您要预测的结果变量是什么(2)您拥有的数据以及可能的(3)您使用的方法。
马修·冈恩

培训完系统后,将如何部署它?目标是将其用于不在培训范围内的人员吗?新数据会来自相同的38个主题吗?我试图了解应该如何使用该系统以及@AmiTavory答案的情况(1)还是情况(2)。
马修·冈恩

@amoeba我不是非常有经验:(我问这个问题,因为建议拆分数据(培训,验证和测试)。因此,它是删除一些主题或每个主题的某些观察结果,或者使用在线提供的数据集。因此1)我希望能够识别主题。功能属于谁。2)我正在使用脑电图(所以时间序列)。3)我正在使用分层折叠。但这是因为与kfold相比,我获得了更高的准确性。我只知道k折,分层和遗漏。正如我一直认为的那样,这是为了补偿数据不平衡。但我愿意提出建议。
Aizzaac

@MatthewGunn我认为不可能与不在数据集中的人一起使用它。如果实现的话,那将是非常困难但非常有趣的。所以我要说案例
1。– Aizzaac

Answers:


9

我认为Matthew Gunn的答案是正确的,但在我看来,“记录明智的”简历可以涵盖两个不同的概念:

  1. 记录被随机分为几折,而与主题或时间无关。

  2. 记录分为基于时间的折叠,没有用于训练的折叠包含测试折叠开始后的数据。

在第一种情况下,数据的任何时间序列性质都会受到损害,因为训练集可以包含测试集之前和之后的数据。训练/测试的原理是:训练数据表示当前已知的数据,而测试数据表示尚未看到的数据(也许从字面上讲是将来的数据)。

时间序列自相关可能会影响选项2。也许模型的时间要素并不是很重要,所以“过去”和“未来”的观察可能是相同的。在这些情况下,#1或#2都不可行。

如果只有季节性而不是趋势,那么在某些学科的培训中加入“未来”似乎是可以的,以便预测新学科(哪些人会受到相同的季节性影响)。如果存在趋势,则对未来的培训应该了解有关在生产中使用该模型时您真的不知道的未来知识。

在OP的示例中,听起来像是明智的。但是,如果趋势和时间序列问题是模型的一部分,我将尝试使用基于主题和时间的划分,以便您在特定时间点之前对一组主题进行了培训,然后在之后对其他主题进行了测试该特定时间点。


1
+1这是非常重要的一点,如果有时间序列结构,则不应使用未来来预测过去!这是财务上常见的危险错误,它使用在时刻不可用的信息(因为直到将来才知道)来预测时刻的回报,违约等。在复杂的项目和大量数据的情况下,很容易犯错误,并使您的训练算法有效地推向未来,从而实现实际上无法实现的结果。ŤŤŤ
马修·冈恩

1
我要说的是,应用程序决定什么是适当的拆分。例如,即使具有时间序列,也可能需要预测因变量以用于以后未知对象的测量,这意味着必须在按主题以及按时间进行拆分。
cbeleites不满意SX

3
@cbeleites:同意。这就是我在最近的项目中所做的工作:将数据分为训练和测试主题,并且仅使用某日期前的数据进行训练,而使用该日期后的数据进行测试,因此我们正在测试从未使用过的主题看到,在一段时间内我们还没有看到。如果您想真正知道您的模型在实践中的表现如何,则希望对您自己的牌堆进行堆放,而又不落水。
韦恩

16

一个关键的区别是您是否要:

  1. [最常见的情况]:估算新科目的表现(与数据相同的总体)。
  2. 根据样本中相同的主题,对新观察结果进行性能估算。

更为常见的情况是案例编号(1)。例如,您如何预测即将进入急诊室的人的心脏病发作?而且,如果您遇到情况(1),则几乎可以肯定应该进行(a)主题交叉验证,而不是(b)记录交叉验证。在情况(1)中进行记录明智的验证可能会导致对新主题的表现不合理地高估。

我无法完全理解您要做什么(也许是自学,所以问题并不完全现实)。我不知道您处于哪种情况。如果您处于不太常见的情况(2),则可以进行记录明智的验证。

统计学的一般主题是仔细考虑什么是独立的以及什么是相关的。一般而言,独立观察往往是不同的主题。如果要预测学科的表现,则必须对未进行过培训的学科进行测试!

为什么按主题交叉验证而不是按记录交叉验证?

在典型设置中,即使在对特征进行条件处理后,对同一个人的重复观察也会相互关联。因此,通过记录方式的交叉验证,您的测试集并不独立于您的训练集!在极端相关的情况下,您将在训练集和测试集中得到完全相同的观察结果!您将在测试集上进行训练!交叉验证中测得的表现不能预测新受试者的表现。

例如,最近的这篇论文称按记录交叉验证为``Voodoo Machine Learning''。

这么少的科目怎么办...

ķ=ñ

为了最大化训练数据,您可以做的是忽略一个主题进行交叉验证。每次迭代都针对不同的坚持主题进行测试,并对所有其他主题进行训练。

ñ=38


我知道数据集必须分为三类:训练,验证和测试。在交叉验证中,使用“训练和验证”。坚持的设置是“测试”。那么,您是否建议:要进行培训和验证,请使用37个科目,并在1个科目中进行测试?而且我可以进行任何类型的交叉验证:k折,分层等?
Aizzaac

1
OP进行了编辑,说“这是用于生物特征识别系统的,所以我希望能够识别主题”。如果我正确理解其含义,则意味着仅凭记录进行简历才有意义,因为目标是根据样本预测受试者ID。
变形虫说恢复莫妮卡

@amoeba仅当新数据来自相同的38个主题时。例如。如果系统应该说出指纹是否匹配,并且将其部署在我家的前门(即必须将陌生人识别为陌生人),则对相同主题的培训和测试将是有问题的(您会想要知道它多久授予一次从未见过,从未接受过培训的人员入境)。我同意,尽管“它是用于生物识别系统”引起了疑问……
马修·冈恩

3

这实际上取决于您如何设想希望通过训练/测试拆分模拟的设置。为了使事情具体,说每一行描述一个对象在一个晚上的睡眠质量。

  1. 将来,每个科目都有可能首先进入睡眠实验室,并为您提供几个晚上的睡眠质量。之后,您将需要预测这些对象未来的夜晚睡眠质量。在这种情况下,您将使用选项b)。在中sklearn,您可以使用sklearn.model_selection.StratifiedShuffleSplit

  2. 将来可能会首先有一些受试者进入睡眠实验室,并为您提供数晚的睡眠质量。之后,您将可以预测其他对象未来的夜晚睡眠质量。在这种情况下,您将使用选项a)。在中sklearn,您可以使用sklearn.cross_validation.LeavePLabelOut


1
但实际上,问题几乎可以肯定是您的情况(2)和选项(a),即按主题交叉验证,才是合适的。
马修·冈恩

1
@MatthewGunn你是对的。情况2更为常见。我必须说,我已经运行到现实生活中的情况下,1是正确的选择。
阿米·塔沃里

1
有趣。我可以看到(1)正确地预测了一些庞大的既有客户群的新观察结果。点了。也许我之所以反应如此强烈,是因为我最近阅读了这篇关于医学领域广泛使用记录式交叉验证的文章。
马修·冈恩

您对此有何看法:我将38个主题用于任何类型的交叉验证。为了测试我的模型是否可以用于其他主题;我使用在线数据集?我认为保留集的想法是要有一个“新”数据集来测试模型。
Aizzaac '16

3

为了说明问题,我假设应用程序是用于预测未知的主题。这意味着(无论您是否具有时间序列或本质上无序的重复测量)都需要进行拆分,以便测试未知主题=>拆分a)

考虑到您只有38个主题,因此您应该对重采样验证进行一些思考。根据我使用类似的小样本量(尽管有更多功能)的经验,以下是一些建议:

  • 进行主题外的引导或迭代的交叉验证。它们使您可以评估模型的稳定性,这对于小样本量问题至关重要。在不稳定的情况下,结果甚至可以用于聚合模型。

  • 千万不能做留一主题了。它既不允许测量模型稳定性,也不能降低模型稳定性。此外,在某些情况下,由于样本量小(与预期的最小悲观偏见相反),它会遭受较大的悲观偏见。

  • 如果您使用的是典型的品质因数,例如准确性,敏感性,特异性等,而任务是正确地对主题进行分类:请注意,关键问题是衡量性能,因为测试结果的不确定性取决于绝对数测试用例。举例来说,在17个真实阳性受试者中观察17个正确的预测对应于95%的置信区间,灵敏度范围从大约80%到100%。
    换句话说,您将无法基于此进行数据驱动的模型优化。

  • 这也意味着您不需要设置三组拆分(嵌套式交叉验证),因为在这里浪费资源进行无统计意义的比较-您的优化几乎可以保证会失败(尽管您可能不会注意到,请勿检查稳定性)。

  • 对于拟议的5(3)个测试/优化/验证主题,对二项式置信区间进行相同的计算,得出所有正确范围(低至50%(30%))的95%ci,因此根据理想的测试结果,您的置信区间仍应包括50 / 50猜!

我们写了一些关于这些主题的论文:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.