齐齐哈尔市网站建设_网站建设公司_原型设计_seo优化
2026/1/22 6:24:34 网站建设 项目流程

推荐直接网站在线阅读:https://aicoting.cn

在机器学习中,为了评估模型的泛化能力,需要将数据集合理划分为训练集、验证集和测试集。训练集用于模型的学习,验证集用于模型选择和超参数调优,而测试集则用于最终性能评估。

常用的验证方法包括留出法、k 折交叉验证和自助法(Bootstrap),通过多次划分与评估可以有效减少结果的偏差与方差,提高模型性能评估的可靠性。

训练集/验证集/测试集

在机器学习的建模过程中,数据是模型学习和评估的基础。为了确保模型在未见数据上的泛化能力,通常需要将数据集划分为训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)。这三类数据集在功能与作用上各有侧重,是整个机器学习流程中不可或缺的环节。

训练集(Training Set)

训练集是模型学习的主要数据来源。模型通过在训练集上调整参数,使预测结果尽可能贴近真实标签。训练集的质量和数量直接影响模型的学习能力和最终性能。

训练集用于优化模型参数,例如线性回归中的权重、神经网络中的权重和偏置。训练集应尽可能覆盖数据的多样性和典型模式,以避免模型只学到局部规律。若训练集过小或噪声过多,模型可能记住训练样本而无法泛化,导致过拟合。

验证集(Validation Set)

验证集是模型调优和选择的重要依据,通常与训练集相互独立。它主要用于评估模型在未见数据上的表现,并指导超参数调节和模型选择。

通过在验证集上测试不同参数组合(如正则化系数、学习率、树深度等),选择性能最优的配置。当有多个候选模型时,验证集可以帮助判断哪一个模型更适合任务需求。同时验证集提供了训练之外的独立反馈,使得模型不会仅针对训练数据进行优化。

验证集的常用划分策略包括:

  • 固定划分:从训练数据中单独划出一部分作为验证集。
  • 交叉验证:将训练数据分成 k 份,轮流使用一份作为验证集,取平均性能,以获得更稳健的评估。
  • 自助法(Bootstrap):通过有放回抽样构建多个子集进行验证,适合小样本场景。

测试集(Test Set)

测试集是模型最终评估的标准,用于衡量模型在真实场景中的泛化能力。测试集必须在模型训练和验证阶段完全不参与,以保证评估的客观性。

测试集与训练集、验证集严格分开,不能用于模型调参或选择。通过测试集计算各类指标(如分类准确率、回归误差等),反映模型的实际应用效果。在研究和竞赛中,测试集常用于不同模型的最终比较和排名。

数据划分原则

为了保证训练、验证、测试各环节的可靠性,数据划分需要遵循一定原则:

  1. 互不重叠:三类数据集应无交集,避免信息泄露。
  2. 比例合理:常见划分比例为训练集:验证集:测试集 ≈ 6:2:2 或 7:2:1,具体可根据数据量调整。
  3. 保持分布一致:确保三类数据集的特征分布和类别分布与整体数据相似,避免评估偏差。
  4. 随机划分与分层抽样:随机划分可以增加数据代表性,分层抽样适合类别不平衡的数据集。

训练集、验证集和测试集各自承担不同的角色:训练集负责学习模型参数,验证集用于调优和选择模型,而测试集用于最终性能评估。

合理划分和使用这三类数据集,是保证机器学习模型泛化能力、避免过拟合以及获得可靠评估结果的基础。通过科学的数据划分和验证方法,模型才能在真实应用场景中表现稳定、可靠。

k 折交叉验证

在机器学习中,模型的泛化能力是评估其性能的重要标准。单次划分训练集和验证集可能导致评估结果受数据分布偶然性影响,特别是在数据量有限的情况下。为了获得更加稳健和可靠的性能评估,k 折交叉验证(k-Fold Cross-Validation, k-CV) 被广泛应用于模型训练与验证中。

基本原理

k 折交叉验证是一种将数据集划分为 k 个大小相近的子集(folds),并进行 k 次训练和验证的方法。其流程如下:

  1. 将数据集均匀分为 k 个子集,每个子集包含的数据尽量保持整体分布一致(可采用分层抽样,尤其是分类任务中)。
  2. 依次选取其中的一个子集作为验证集,剩余 k-1 个子集合并作为训练集。
  3. 在训练集上训练模型,并在验证集上计算评估指标。
  4. 重复上述过程 k 次,每次选择不同的子集作为验证集。
  5. 将 k 次评估结果取平均,得到模型的整体性能估计。

下面我们依旧使用经典的 Iris 数据集 通过k折交叉验证进行分类任务。

# 导入必要库# 导入必要库importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimportKFold,cross_val_scorefromsklearn.treeimportDecisionTreeClassifier# 1. 加载数据iris=load_iris()X,y=iris.data,iris.target# 2. 定义模型model=DecisionTreeClassifier(random_state=42)# 3. 定义 k 折交叉验证k=5kf=KFold(n_splits=k,shuffle=True,random_state=42)# 4. 执行交叉验证scores=cross_val_score(model,X,y,cv=kf)# 5. 输出每折的准确率print(f"{k}-折交叉验证每折准确率:",scores)print(f"平均准确率:{scores.mean():.4f}, 标准差:{scores.std():.4f}")# 6. 可视化结果plt.figure(figsize=(8,4))plt.bar(range(1,k+1),scores,color='skyblue')plt.ylim(0,1.1)plt.xlabel("Fold")plt.ylabel("Accuracy")plt.title(f"{k}-Fold Cross-Validation Accuracy")plt.xticks(range(1,k+1))plt.show()

结果如下图, 每折交叉验证结果显示模型在不同子集上的表现略有差异,但都较高,说明模型对数据的学习稳定性较好。通过柱状图可以直观看到每折的准确率分布,帮助快速发现是否存在某一折表现异常。

k 折交叉验证的优势可以充分利用数据,相比单次划分训练集/验证集的方法,k 折交叉验证能够使所有样本都参与训练和验证,提高了数据利用效率。通过 k 次平均性能,减少了单次划分可能产生的偏差,提高模型性能估计的可靠性。在数据量有限的情况下,k 折交叉验证可以避免训练集过小导致模型欠拟合的问题。

在使用k 折交叉验证时,要注意:

  • 选择 k 的大小:常用的 k 值为 5 或 10。k 值过小可能导致评估方差较大,k 值过大(如留一法,k=N)则计算成本高。
  • 分层抽样:对于类别不平衡的分类问题,应采用分层 k 折交叉验证(Stratified k-Fold),保证每个折中类别比例与原始数据一致。
  • 重复交叉验证:为进一步降低评估方差,可以多次随机划分 k 折,取多次平均值。

k 折交叉验证的扩展

  • 留一交叉验证(Leave-One-Out Cross-Validation, LOOCV):k=N,每次仅留一个样本作为验证集,适合数据量非常小的情况。
  • 重复 k 折交叉验证(Repeated k-Fold CV):多次重复 k 折交叉验证,进一步降低评估方差。
  • 嵌套交叉验证(Nested Cross-Validation):在外层进行模型选择,内层进行超参数调优,适合高维或复杂模型的评估。

总结一下,k 折交叉验证是一种经典且有效的模型验证方法,通过多次训练和验证充分利用数据,提高了模型性能评估的稳定性与可靠性。合理选择 k 值、采用分层策略以及必要时使用重复或嵌套交叉验证,可以在模型选择与调参中取得更好的效果,使模型在实际应用中表现更加稳健。

最新的文章都在公众号aicoting更新,别忘记关注哦!!!

📚 推荐阅读

机器学习之数据预处理篇!

机器学习特征工程中的特征选择

机器学习中的特征构造

机器学习之特征降维

一文搞懂层次聚类和密度聚类方法!

一文搞懂机器学习中的PCA主成分分析!

机器学习中独立成分分析ICA和主成分分析PCA有什么区别?

一文搞懂t-SNE和UMAP降维方法!

万字长文!搞懂机器学习中的概率图模型

万字长文!搞懂机器学习中半监督学习的经典方法!

一文搞懂强化学习中的马尔可夫决策过程!

一文搞懂强化学习中的动态规划与值迭代!

一文搞懂强化学习中的Q-learning

作者:aicoting

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询