在划分数据并使用训练集来训练模型之后,您需要一种方法来检查模型实际学习的泛化能力如何。这就是测试集的作用。可以把测试集看作是模型的期末考试。"测试集是您原始数据中独立的一部分,模型在训练过程中从不接触它。它包含模型完全未见过的数据,模拟模型遇到以前未处理过的数据的场景。"测试集的目的测试集的主要目的是提供对最终模型在未见过数据上表现的无偏评估。通过将训练好的模型应用于测试集,并将其预测与实际结果(这些结果也一直保持隐藏)进行比较,您可以计算之前学过的评估指标(例如分类任务中的准确率、精确率、召回率,或回归任务中的平均绝对误差、均方误差、均方根误差)。在测试集上计算出的这些指标,能为您在模型部署时可能达到的性能提供一个实际的预估。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="helvetica", fontsize=10]; edge [fontname="helvetica", fontsize=9]; RawData [label="原始数据集"]; Split [label="分割数据", shape= Mdiamond, style=filled, fillcolor="#a5d8ff"]; TrainSet [label="训练集\n(用于学习)", style=filled, fillcolor="#b2f2bb"]; TestSet [label="测试集\n(保留,未见)", style=filled, fillcolor="#ffc9c9"]; Model [label="训练模型", shape=ellipse, style=filled, fillcolor="#d0bfff"]; Evaluate [label="评估性能", shape=ellipse, style=filled, fillcolor="#ffd8a8"]; Performance [label="性能指标\n(例如:准确率, 平均绝对误差)", style=filled, fillcolor="#ffe066"]; RawData -> Split; Split -> TrainSet [label=" 通常70-80% "]; Split -> TestSet [label=" 通常20-30% "]; TrainSet -> Model; Model -> Evaluate; TestSet -> Evaluate; Evaluate -> Performance; }数据被分为训练集用于模型学习,测试集则保留用于最终的无偏评估。重要原则:只使用一次将测试集视为一个最终的、一次性的检查点,这一点非常重要。你只在完成所有训练和任何调优(例如选择模型参数)之后才应该使用测试集来评估你的模型。为什么这如此重要?如果你反复使用测试集来检查性能,然后根据结果调整模型,你就会无意中将测试集的信息泄露到模型选择或训练过程中。你的模型可能开始在那个特定的测试集上表现良好,但它不一定能很好地泛化到真正的新数据上。这就像让一个学生多次重考期末考试,直到他们取得好成绩;这不代表他们真的更好地掌握了材料,只是他们学会了如何通过那次特定的考试。"过早地使用测试集会导致过于乐观的性能预估和不佳的结果。将其保留到最后,以便真实衡量模型的性能。测试集评估的结果会告诉你在部署模型时可以有多大的信心。"