训练集、验证集、测试集的区别,这次你一定能看懂

疑惑点

我们其实主要搞不清验证集测试集的关系和区别,训练集大家都很清楚是干什么的。网上说了一大堆我也是没看懂,今天突然又看到这个东西,终于在stack overflow看到了一个很容易理解的解答,下面给大家分享一下。

训练集和验证集都是在训练阶段使用的!!!

相信你看了下面这段立马就明白了
----------------------------
for each epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

一旦你完成了训练,那么你就对照你的测试集进行测试,并验证准确性是否足够。

在这里插入图片描述

详细解释

训练集:该数据集用于调整神经网络上的权重。
测试集:该数据集用于最小化过度拟合。 您没有使用此数据集调整网络的权重,您只是验证训练数据集的准确度的任何提高实际上都会提高准确性,而不是之前未向网络显示的数据集, 或者至少网络没有接受过培训(即验证数据集)。 如果训练数据集的准确度增加,但验证数据集的准确度保持不变或降低,则您的神经网络过度拟合,应该停止训练。
验证集:该数据集仅用于测试最终解决方案,以确认网络的实际预测能力。
(以上内容均来自Google翻译,有些地方翻译的可能不太通顺和精确,由于水平有限,大家将就看)


下面附上原文

链接:https://stackoverflow.com/questions/2976452/whats-is-the-difference-between-train-validation-and-test-set-in-neural-netwo

The training and validation sets are used during training.

for each epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

Once you’re finished training, then you run against your testing set and verify that the accuracy is sufficient.

Training Set: this data set is used to adjust the weights on the neural network.

Validation Set: this data set is used to minimize overfitting. You’re not adjusting the weights of the network with this data set, you’re just verifying that any increase in accuracy over the training data set actually yields an increase in accuracy over a data set that has not been shown to the network before, or at least the network hasn’t trained on it (i.e. validation data set). If the accuracy over the training data set increases, but the accuracy over the validation data set stays the same or decreases, then you’re overfitting your neural network and you should stop training.

Testing Set: this data set is used only for testing the final solution in order to confirm the actual predictive power of the network.

<think>我们正在讨论的是在MICE多重插补后如何正确比较ROC曲线。根据核心原则,我们必须使用所有插补数据集的聚合结果,而不是单个数据集的结果。这是因为单个结果会引入随机偏差,而聚合结果符合Rubin规则,能更准确地估计真实性能。用户的问题聚焦于:在评估模型时,是使用所有测试集训练集的平均ROC曲线,还是仅使用单个测试集训练集得到的ROC曲线。引用[1]指出,当ROC曲线发生交叉时,比较AUC是更合理的判据。引用[2]强调了模型评估应关注泛化误差,即在新样本上的表现。引用[3]说明了测试选项的设置方法,包括交叉验证百分比划分等。引用[4]则提到在不平衡数据集中PR曲线可能更适用,但这里我们讨论的是ROC。结合这些引用之前的回答,我们可以总结:1.**测试集ROC必须聚合**:由于MICE生成了多个插补数据集,每个数据集都训练一个模型并在独立的测试集上评估。为了获得可靠的泛化性能估计,我们需要计算所有测试集AUC的平均值,并绘制平均ROC曲线(通过点-wise平均TPR值)。这是因为单独使用一个测试集的结果会忽略插补的不确定性,导致估计不稳定[^1][^2]。2.**训练集ROC仅用于辅助诊断**:训练集上的ROC(或AUC)可以用来检查过拟合(如果训练AUC远高于测试AUC),但不应该作为模型比较的主要依据。因为训练集性能通常过于乐观,不能反映模型在新数据上的表现[^2]。3.**可视化建议**:在报告中,我们应叠加所有测试集的ROC曲线,并突出平均ROC曲线,同时标注平均测试AUC值。这提供了模型性能的全面视图。因此,回答用户的问题:**比较机器学习模型时,应该使用所有测试集的平均ROC曲线(平均AUC)作为主要评估标准,而不是单个测试集的结果。**训练集的ROC曲线仅作为参考,用于诊断过拟合,但不参与最终模型性能的比较。接下来,我们按照推荐流程总结步骤,并强调聚合的必要性(如插补不确定性、稳定性需求等)。最后,生成相关问题。</think>### 机器学习模型评估:ROC曲线比较的正确方法 #### 核心结论 **必须使用所有测试集的平均ROC曲线(特别是平均AUC)作为主要评估标准**,而不是单个测试集的结果。训练集ROC仅作为过拟合诊断的辅助参考,不参与最终性能比较[^1][^2]。 #### 详细解释 1. **测试集ROC的处理(关键步骤)** - **聚合所有测试集结果**:对每个插补数据集生成的测试集ROC曲线,计算: $$ \overline{\text{AUC}}_{\text{test}} = \frac{1}{m} \sum_{i=1}^{m} \text{AUC}_i $$ 其中 $m$ 是插补数据集数量[^1] - **点-wise平均曲线**:在相同FPR阈值下平均TPR值 ```python # Python示例(使用sklearn) from sklearn.metrics import roc_curve import numpy as np tpr_list = [] for i in range(m): # 遍历m个测试集 fpr, tpr, _ = roc_curve(y_test_i, pred_i) tpr_list.append(np.interp(base_fpr, fpr, tpr)) # 对齐阈值 mean_tpr = np.mean(tpr_list, axis=0) ``` 2. **训练集ROC的定位(辅助角色)** - **仅用于过拟合检测**:若 $\overline{\text{AUC}}_{\text{train}} \gg \overline{\text{AUC}}_{\text{test}}$(例如差值>0.15),表明模型过拟合[^2] - **不参与性能比较**:训练集性能不能反映泛化能力(引用[2]明确强调需关注泛化误差) 3. **为何不能使用单个数据集结果?** - **随机性偏差**:单个插补数据集不能代表缺失值的不确定性(违反Rubin规则)[^1] - **稳定性问题**:医学/金融等领域要求结果可重复,单个结果方差过大 - **引用[1]支持**:当ROC曲线交叉时,AUC是更可靠的判据,但单个AUC估计不准 #### 操作流程(MICE后模型评估) | 步骤 | 测试集处理 | 训练集处理 | |------|------------|------------| | **ROC计算** | 所有测试集的AUC取平均 | 所有训练集的AUC取平均 | | **核心指标** | 报告 $\overline{\text{AUC}}_{\text{test}} \pm \text{SD}$ | 仅计算 $\overline{\text{AUC}}_{\text{train}}$ | | **可视化** | 叠加所有测试ROC+平均曲线 | 不展示或单独展示 | | **决策依据** | **模型选择的核心标准** | 检查是否 $\overline{\text{AUC}}_{\text{train}} - \overline{\text{AUC}}_{\text{test}} > \delta$ | #### 示例场景 假设通过MICE生成5个插补数据集: ```python 测试集AUC = [0.82, 0.85, 0.83, 0.80, 0.84] 训练集AUC = [0.95, 0.94, 0.96, 0.93, 0.95] 正确报告: 平均测试AUC = 0.828 ± 0.018 平均训练AUC = 0.946 → 显著高于测试集,提示过拟合风险 ``` > **关键提醒**:当数据不平衡时(引用[4]),可补充PR曲线分析,但ROC的聚合原则不变。交叉验证(引用[3])可替代单一测试集划分,但仍需聚合所有fold的结果[^2]。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值