在线性回归设置(PCA、PLS)上为交叉验证选择数据的最佳方法是什么

机器算法验证 回归 交叉验证 偏最小二乘法
2022-04-01 19:45:48

我们正在从 EEG 中提取特征,这是一个时间相关的信号。

我们有超过 64 个通道的 10,000 个数据点的信号,每个通道的每个时间戳提取 10 个特征,所以最后我们有一个每个时间步长的 64x10 特征的特征数据集。

我们正在应用 PLS 来回归手部运动 (X,Y,Z)。

我们正在使用交叉验证来验证结果,但我们的一些同事指出,使用数据集中的交错采样感觉像是在作弊。

他们的建议是使用 2/3 的连续数据进行训练,使用 1/3 的数据进行测试。

我想听听关于这个设置的总体意见,我的直觉告诉我,因为它是时间相关的数据,所以像这样划分数据集会产生不好的结果(确实如此)

1个回答

您希望您的评估能够告诉您一些关于系统性能的有用信息。使用特定的保留测试集很好,因为它可以告诉您系统将如何处理全新的数据。另一方面,只有一个数据点并且几乎没有足够的数据来创建多个测试,所以很难执行有意义的推理(即“总的来说,我的系统比另一个更好吗?”)分区。交叉验证(和类似技术)试图通过将数据划分为多个训练和测试集并对它们进行评估来估计泛化误差。这很好,因为您可以对其泛化能力进行多次估计,这使您可以进行一些适当的统计比较。然而,

对于每个主题一组观察的“经典”机器学习问题(例如,Fischer Iris 或 Pima Indian 数据集),很难搞乱交叉验证。将您的数据分成份,使用份进行训练并测试最后一份。起泡、冲洗并重复,直到每个折叠都用作测试组。kk1

对于像您这样的数据集,这可能不太可取,因为每个主题都有多个(64x10x?)观察结果。如果观察结果在时间、空间/传感器和受试者内部(几乎可以肯定是你的)相关,那么模型可能会“学习”其中一些关联,当来自相同/附近时间点的数据时,这将提高其性能,传感器和对象出现在测试集中,因此对系统的泛化能力提供了过度乐观的估计。

最保守的方法是按主题对交叉验证进行分层:来自给定主题的所有数据都进入同一折叠(例如,主题 1-​​5 在折叠 1,6-10 在折叠 2 等)然后交叉验证正常进行。如果您愿意断言信号的时间上遥远的部分是独立的,我想您也可以尝试以这种方式进行分层,但我会发现这不太令人满意。不会做的是将所有数据转储到一个大列表中,无论时间点、传感器或主题如何,然后将该列表随机分成折叠。我几乎可以保证这会夸大你的泛化错误!