交叉验证-验证列法使用验证列法进行交叉验证时,我们将数据集分为训练集、验证集和测试集。 该分流比由用户指定。 是否有任何指导/参考来决定分流比(例如 60:20:20 / 70:15:15 / 50:25:25 / 80 :10:10)。 是否还根据观察总数 -N 来选择?
数据混合和清理预测建模和机器学习回复:交叉验证 - 验证列方法对于您最初的问题,不,对于要遗漏多少数据没有具体规则。 在 JMP Education 分析课程中,我们建议您保留您愿意接受的尽可能多的数据,至少保留 20%。 如果您觉得训练集太小而无法容纳那么多行,请考虑 k 折交叉验证。 您愿意牺牲多少行来进行验证? 使用 k = n / 那么多行。 如果使用该公式 k < 5,请考虑留一法交叉验证。
回复:交叉验证 - 验证列方法不客气@sreekumarp 。
如果您将其中一个或多个答案视为解决方案,请立即将它们标记为解决方案,以帮助 JMP 社区的访问者更轻松地找到他们正在寻找的答案。
如果您有更多问题或需要一些建议的具体案例,请随时回答该主题或创建一个新主题。
回复:交叉验证 - 验证列方法感谢您在交叉验证栏中提供的意见。
斯里库玛·蓬纳皮利
回复:交叉验证 - 验证列方法感谢您提供有关机器学习中数据集分割的详细信息。 我相信这会对我的研究有所帮助。
斯里库玛·蓬纳皮利
回复:交叉验证 - 验证列方法你好@Victor_G ,
是的,我认为可能存在某种误解。 也许我应该说有一个保留数据集而不是测试数据集。 保留数据集是从未在训练、验证或从给定算法(测试集)中选择模型时使用的数据。 我使用这个保留集来比较不同的算法,看看哪种算法表现最好。 JMP 的模型比较平台对于使用保留集来比较不同算法非常有帮助。 这允许对不同算法进行公正且无泄漏的比较。 因此,它成为一种“测试”数据集,因为保留数据集用于查看哪种不同算法在此“纯”数据集上表现最好。
这是我所知道的在 JMP 中相互比较不同算法的唯一方法。 我的意思是,这是 JMP 将神经网络算法与 XGBoost 算法进行比较的唯一方法。 我永远不会使用,也不建议使用保留数据集来比较平台内的不同模型。 我不会使用保留集来比较引导森林平台中的 20 个不同的调整模型,这将是测试数据集的目的。
所以,如果有任何误解/困惑,我们深表歉意。 从现在开始,我将尝试将其称为保留集,以避免与测试集混淆。
感谢您的讨论!,
DS
回复:交叉验证 - 验证列方法分层抽样的优点@SDF1 !
抱歉,我们没有使用相同的命名,否则会产生误解。
如果您在测试集中引入多个模型来比较它们(并选择一个),那么无论使用什么平台或模型,这都是一个问题,而不是该组的目的。 比较模型应该在验证集上进行(以保持清晰和“纯粹”的测试集,没有任何信息泄漏或偏见),因此我之前的回答与有关该主题的一些资源。
请参阅 JMP 帮助,其中还强调了集合之间的差异:“测试集检查模型的预测能力后已选择模型。” : https://www.jmp.com/support/help/en/17.1/index.shtml#page/jmp/overview-of-the-make-validation-column-platform.shtml#ww269465
这也是良好定义不同集并固定它们或方法的重要性的原因,以便在同一验证集(或相同方法)上正确评估不同模型。
回复:交叉验证 - 验证列方法你好@Victor_G ,
抱歉,如果不清楚,但我们实际上指的是同一件事。 当我之前提到模型时,我指的是使用相同的测试/验证设置生成模型,而且还可以在 JMP 中跨不同平台生成模型。 我从不考虑任何一种平台来构建模型,而是使用不同的平台(例如 NN、BT、Bootstrap Forest、SVM、KNN 和 XGBoost)生成和调整模型,并使用训练集和验证集进行交叉验证。 然后,在生成不同的模型后,我比较了它们在保留(测试)数据集上进行预测的能力,该数据集是所有模型在训练和验证步骤中都没有见过的数据集。 有时 NN 效果最好,有时是 XGBoost 或其他平台。
最后@sreekumarp我在上一篇文章中忘记提到的一件事是,它确实有助于使用输出列(您尝试预测的列)对交叉验证列进行分层。 这为您的训练、验证和测试数据集保留了类似的分布结构。 有时这是无法做到的,特别是对于高度不平衡的数据集,但如果可能的话,我强烈推荐它。 如果不是,数据会随机放置在每种类型的数据集中,这可能会导致验证列划分不合理,这通常会导致模型很差。
DS
回复:交叉验证 - 验证列方法你好@SDF1 ,
对您提供的重要补充的一个小修正:验证集是用于模型比较和选择的集合,而不是测试集(但有时测试和验证名称交替使用或混淆)。
这两组有非常不同的目的:
- 测试集是数据的保留部分,未使用前选择模型,以便提供模型泛化和预测性能的无偏估计。
- 验证集是用于模型微调和模型比较的数据的一部分,以选择最佳候选模型。
这里给出一个解释:机器学习 - 我可以使用测试数据集来选择模型吗? - 数据科学堆栈交换
对于这种使用差异的两种解释:
- 实用一:在数据科学竞赛中,您无法访问测试数据集,因此为了创建和选择性能最佳的算法,您必须将数据拆分为训练集和验证集,并“希望”获得良好的性能(和泛化)在看不见的测试集上。
- 理论一:如果您使用测试集来比较模型,那么您实际上是在进行数据/信息泄漏,因为您可以通过在测试集上选择性能最佳的算法来随着时间的推移改进测试集上的结果(然后,也许继续根据测试数据的性能对其进行微调或尝试其他模型......)。 因此,您的测试集不再是公正的,因为算法的选择(以及选择后可能执行的其他操作)将在此基础上进行。
测试集通常是模型创建/开发及其在生产或发布中的部署之间的最后一步,因此最终评估需要尽可能公平和公正。
集合上的一些资源:训练、测试和验证集 (mlu-explain.github.io)
MFML 071 - 测试和验证之间有什么区别? - YouTube
我希望这可以避免集合的命名和使用方面的任何混乱,
回复:交叉验证 - 验证列方法你好@sreekumarp ,
除了什么@Victor_G写道,我还强烈建议您拆分测试数据集并用它创建一个新的数据表。 这样,当您训练和验证模型时,您可以在测试保留数据表上对它们进行比较,以了解哪个模型表现最好。 这减少了测试数据集意外用于训练或验证集的可能性。
您还可以通过其他方式使用模拟数据来训练模型,然后在真实数据上测试模型。 当原始数据集很小并且需要保留输入的相关结构时,我有时会使用这种方法。
祝你好运!,
DS
回复:交叉验证 - 验证列方法你好@sreekumarp ,
有趣的问题,恐怕我不会对你的问题给出明确的答复,因为它取决于数据集、要考虑的模型类型以及分析师(或进行分析的人)的实践/习惯。
首先,了解每组之间的用途和需求很重要:
- 训练集:用于模型的实际训练,
- 验证集:用于模型优化(例如超参数微调、特征/阈值选择……)和模型选择,
- 测试集:用于对新/未见数据的所选模型进行泛化和预测性能评估。
根据您的目标和数据集的大小,有多种选择/方法来分割数据:
- 训练/验证/测试集:用于训练、优化和评估模型性能的固定集。 推荐用于较大的数据集。
- K 折交叉验证:将数据集分割为 K 份。 模型训练 K 次,每次折叠使用 K-1 次进行训练,1 次进行验证。 它可以评估模型的稳健性,因为所有折叠的性能应该是相同的。
- 留一法交叉验证:K 倍交叉验证的极端情况,其中 K = N(观测值数量)。 当您的数据集较小并且想要评估您的模型是否稳健时,可以使用它。
- 自动验证/自验证集成模型:您无需将某些观察结果分离在不同的集合中,而是将每个观察结果与训练和验证的权重相关联(训练中较大的权重会导致验证中较低的权重,这意味着该观察结果将主要用于训练并减少验证),然后通过改变重量来重复此过程。 它用于非常小的数据集和/或您无法在不同集合之间独立分割某些观察结果的数据集:例如在实验设计中,要执行的实验集可以基于模型,如果是这样,您无法在训练和验证之间独立分割一些运行,因为这会给模型带来负面影响;估计参数所需的运行将不可用,因此大大降低了模型的性能。
JMP 支持所有这些方法:启动 Make Validation Column 平台 (jmp.com)
根据经验,通常使用 70/20/10 的比率。你可以阅读论文“数据分割的最佳比例” 此处了解更多详细信息。一般来说,模型中的参数数量越多,您的训练数据集就越大,因为您需要更多的数据来精确估计模型中的每个参数,因此模型的复杂性/类型也是需要考虑的创建训练/验证/测试集时。
如果您有更精确的用例,也许这可能会更有帮助且不那么笼统,可以为您提供一些指导?
我还强烈推荐 Cassie Kozyrkov 的播放列表“与机器学习交朋友”,以了解有关模型训练、验证和测试的更多信息:与机器学习交朋友 - YouTube
希望第一个答案对你有帮助
回复:交叉验证 - 验证列方法谢谢。
对于 JMP Pro 中的常规回归进行 K 折交叉验证 (CV) 和留一法 (LOO) 验证,实际上有两点需要澄清。
这两种方法在偏最小二乘回归(PLSR)部分均可直接使用,但如果将交叉验证(CV)和/或留一法交叉验证(LOO)应用于简单的回归,则对于如何操作以及如何可视化指标存在一些不明确之处。例如,我正在分析光谱数据,而PCR和PLSR是化学计量学过程中常用的方法。

我遇到了一个有点奇怪的问题。当我创建了一个 4 折交叉验证列(如上所示,对 72 个观测值进行 4 折交叉验证)并运行 PCR(以数值响应变量和主成分作为预测变量)后,我收到了以下错误响应:
因此,实际上并没有进行简历筛选,对吗?
第二点:如何为 PCR 构建 LOO 验证(一列?)?
总的来说,请问如何才能对典型的回归模型进行充分的交叉验证和留一法验证,并获得合适的拟合指标?这对我来说非常重要,但目前还不清楚。
非常感谢各位同事!
回复:交叉验证 - 验证列方法嗨@Nazarkovsky ,
与其回复这篇旧帖子,不如另开一个新帖,这样可以提高帖子的曝光率,让其他 JMP 用户也能参与到关于你问题的讨论中来。
是的,在使用固定 K 折交叉验证列时,JMP 建模平台有时会出现一些错误,因为 JMP 通常从验证列中识别出 2 个层级(训练集和验证集或测试集)或 3 个层级(训练集、验证集和测试集)。在您收到的错误信息中,没有执行交叉验证,而是对所有数据拟合了一个线性模型。
由于您使用的是非常简单的线性模型,您可以尝试使用模型筛选平台(如果您想比较不同模型的结果,该平台也包含 PLS),指定您的 X、响应 Y、4 折验证列(或直接从平台进行交叉验证),以及您要拟合的模型类型(线性回归模型选项 + 建模选项):

或者直接使用平台提供的 K 折交叉验证选项,即可获得这些结果:

如果要运行留一交叉验证,只需指定 K=n(n 为表格中的运行次数)。如果要访问单个折叠的结果,可以将我在此处提供的解决方案调整到您的建模平台: 访问 K 折交叉验证的折叠外指标
最后,我发现您的建模工作流程中至少存在一个可能导致数据泄露的主要问题:您需要在主成分分析中也应用交叉验证或您的拆分/验证策略。否则,PCA 将看到整个数据集,并学习所有数据集中各因子之间的相关性,而您之后拟合的线性模型(并通过交叉验证进行评估)将受益于数据集的全部信息,而不是来自 4 个折叠中的 3 个折叠的信息。由于 JMP 尚未为 PCA 实现验证角色(目前!),因此我添加了此愿望清单,以防止数据泄露和类似您这样的建模工作流程中可能出现的错误: 在主成分分析平台中添加验证角色选项。总而言之,您应该:
- 定义并应用验证策略(交叉验证、留一法交叉验证或标准训练集/验证集或训练集/验证集/测试集划分)。
- 仅对训练集进行数据预处理(或者根据所使用的折叠数多次进行数据预处理)。
- 使用相同的验证策略,对来自训练集(或来自相应的训练折叠)的预处理数据拟合模型。
希望这个回答对您有所帮助。
回复:交叉验证 - 验证列方法总之,JMP 中关于 k 折交叉验证的部分仍然很薄弱。我很好奇为什么开发者们对此并不在意,因为这种验证方法是对任何模型进行初步评估的主要工具,尤其是在数据量较少的情况下。此外,在构建 k 折交叉验证列的正确选项中,无法构建 3 折交叉验证——最小值是 4 折。
我也不喜欢 JMP 的交叉验证指标报告,因为没有最终选项/按钮可以在所有运行后生成一个“预测”列作为平均结果,并与广义回归或 PLSR 提供的预测值进行比较。
至于PCA的验证,Unscrambler这款传统的化学计量学软件(用于对光谱等化学数据进行多元分析)就提供了这个选项。是的,验证过程会扫描预设的主成分数量与解释方差之间的关系。我用Unscrambler来测试泄漏情况,啊哈。
社区里有一系列关于 JMP 的帖子专门讨论光谱分析,但对于 CV 和 PCR 的全面讨论仍然不足。
然而,在化学计量学中,SVR(支持向量回归)、PLSR 和 PCR 总是被应用,并且它们的指标会被比较。
非常感谢 LOO,它确实运行良好。
回复:交叉验证 - 验证列方法总之,JMP 中的 k 折交叉验证功能仍然存在缺陷。我很好奇为什么开发者们对此并不在意,因为这种验证方法是对任何模型进行初步评估的主要工具,尤其是在数据量较少的情况下。此外,在构建 k 折交叉验证列的正确选项中,无法构建 3 折交叉验证——最小值是 4 折。
我也不喜欢 JMP 的交叉验证指标报告,因为没有最终选项/按钮可以在所有运行后生成一个“预测”列作为平均结果,并与广义回归或 PLSR 提供的预测值进行比较。
至于PCA的验证,Unscrambler这款传统的化学计量学软件(用于化学数据,例如光谱的多元分析)就提供了这个选项。是的,验证过程会扫描设定的成分数量与解释方差之间的关系。我用Unscrambler来测试泄漏,啊哈。
社区里有一系列关于 JMP 的帖子专门讨论光谱分析,但对于 CV 和 PCR 的全面讨论仍然不足。
然而,在化学计量学中,SVR(支持向量回归)、PLSR 和 PCR 总是被应用,并且它们的指标会被比较。
非常感谢 LOO,它确实运行良好。