数据集划分;参数超参数;交叉验证

在机器学习和深度学习中,将数据分为训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)是常见的做法,每部分数据承担不同的任务:

一.基本概念

1.训练集(Training Set):

  • 训练集用于训练模型,即通过算法调整模型的参数以最小化损失函数(Loss Function)。

  • 模型在训练集上学习数据的特征和模式,以期能够对未知数据做出准确的预测。

  • 训练集通常占整个数据集的60%-80%。

2.验证集(Validation Set):

  • 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时,用以验证当前模型泛化能力(准确率,召回率等),以决定是否停止继续训练。

  • 验证集并不参与学习参数的确定

  • 验证集用于避免模型过拟合(Overfitting),即模型在训练集上表现很好,但在新数据上表现不佳。

  • 验证集还可以用于模型选择,即在多个候选模型中选择最佳模型。

  • 验证集通常占整个数据集的10%-20%。

  • 学习过程中多次使用

  • 验证集不是必须的

3.测试集(Test Set):

  • 测试集用于在模型训练和验证过程完成后,对模型的最终性能进行评估。

  • 测试集应该完全独立于训练过程,即在训练和验证过程中从未使用过。

  • 不参与学习参数过程,也不参与超参数选择过程

  • 测试集的目的是提供一个公正的评估,以确定模型在未知数据上的泛化能力。

  • 测试集通常占整个数据集的10%-20%。

  • 仅在训练完成后使用一次,评价最终模型的效果

三者关系

三个数据集所用数据是不重叠的,是不同的!

一个形象的比喻:

训练集———–学生的课本;学生 根据课本里的内容来掌握知识。

验证集————作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。

测试集———–考试,考的题是平常都没有见过,考察学生举一反三的能力。

a)训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力(防止课本死记硬背的学生拥有最好的成绩,即防止过拟合)。

b)验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不能算是学习好的学生)。

c) 所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力(期末考试)。

二.参数和超参数

1.参数(Parameters):

  • 参数是模型内部的变量,它们通过训练数据学习得到。

  • 参数是模型的权重(Weights)和偏置(Biases),它们定义了模型的行为。

  • 参数的优化是模型训练过程中的主要目标,通常通过梯度下降或其他优化算法来调整,以最小化损失函数。

  • 参数的值在训练开始前是随机初始化的,然后在训练过程中不断更新。

2.超参数(Hyperparameters):

  • 超参数是模型外部的设置,它们在训练开始之前设定,并且在整个训练过程中保持不变。

  • 超参数用于控制学习过程,包括学习率、批次大小(Batch Size)、迭代次数(Epochs)、网络层数、每层的神经元数量等。

  • 超参数的选择对模型的性能有重要影响,但它们不会直接从数据中学习。

  • 超参数的调整通常需要基于经验和实验,或者使用如网格搜索(Grid Search)、随机搜索(Random Search)或贝叶斯优化等自动化方法。

【插入2】搜索算法

搜索算法通过不断尝试不同的参数和值组合来优化模型性能,先定义一个目标变量(如准确度)作为主要指标,使用交叉验证技术来确保模型不会过度依赖于数据中的某一部分。在每次迭代后,都需要评估模型的性能,根据统计分析选择最佳超参数组合。这个过程可能会重复多次,直到找到满意的结果或达到预定的迭代次数

搜索算法可以用来调整超参数,常见的方法包括:

  • 网格搜索(Grid Search):尝试所有可能的超参数组合来找到最佳匹配。【插入】网格搜索(Grid Search)可以被视为一种完全搜索(Exhaustive Search)的方法,但它专门用于超参数优化领域。在网格搜索中,你定义了一个参数网格,这个网格包含了你想要测试的所有超参数的值。然后,网格搜索会遍历这个网格中的所有可能的超参数组合,并使用交叉验证来评估每种组合的性能。

  • 随机搜索(Random Search):在超参数的可能值范围内随机选择组合进行评估。

  • 贝叶斯优化(Bayesian Optimization):一种基于概率模型的优化方法,它利用先前的评估结果来指导后续的超参数选择,以减少需要评估的超参数组合数量。

  • 遗传算法(Genetic Algorithms):通过模拟自然选择的过程来搜索最优超参数,这种方法具有较强的全局优化能力和适应性。

  • 基于梯度的优化(Gradient-based Optimization):当超参数可微时,可以使用梯度信息来优化超参数,这种方法适用于连续参数空间。

  • 强化学习(Reinforcement Learning):通过与环境的交互来学习最佳行为,这种方法可以用于超参数优化,通过奖励机制来引导搜索过程。

除了超参数调整,搜索算法在机器学习和数据挖掘中还有其他应用,例如:

  • 特征选择:用于选择对模型性能影响最大的特征。

  • 模型选择:在多个候选模型中选择最佳模型。

  • 算法配置:自动调整算法参数以提高性能。

  • 网络爬虫:在互联网上搜索并获取信息,涉及到在网页链接图中的搜索问题。

  • 路径规划:在导航应用中从一个位置到另一个位置的路径搜索。

  • 游戏AI:在棋类游戏中预测对手的移动,并决定自己的下一步棋。

【插入1】训练参数的方法(优化算法)

训练参数,即训练机器学习模型中的权重和偏置,通常涉及到以下方法:

  • 梯度下降(Gradient Descent):最常用的优化算法,通过计算损失函数关于参数的梯度来迭代更新参数。

  • 随机梯度下降(Stochastic Gradient Descent, SGD):与梯度下降类似,但在每次迭代中只使用一个训练样本或一个小批量样本来计算梯度。

  • 小批量梯度下降(Mini-batch Gradient Descent):结合了梯度下降和SGD的特点,每次迭代使用数据的小批量来计算梯度。

  • 动量(Momentum):在梯度下降中加入动量项,以加速梯度下降的收敛并减少震荡。

  • 自适应学习率方法:如AdaGrad、RMSprop、Adam(Adaptive Moment Estimation)等,这些方法通过调整学习率来提高训练效率。

  • 学习率衰减(Learning Rate Decay):随着训练的进行逐渐减小学习率,以提高模型的收敛精度。

  • 牛顿法(Newton's Method):使用损失函数的二阶导数(Hessian矩阵)来寻找参数更新的方向和步长。

  • 拟牛顿法(Quasi-Newton Methods):如BFGS(Broyden-Fletcher-Goldfarb-Shanno)和L-BFGS(Limited-memory BFGS),这些方法近似牛顿法的Hessian矩阵,以降低计算成本。

  • 共轭梯度法(Conjugate Gradient Method):适用于解决大型线性方程组,也可以用于优化问题。

  • 进化策略(Evolution Strategies, ES):一种基于自然选择和遗传变异的优化方法,适用于高维和非凸优化问题。

  • 模拟退火(Simulated Annealing):一种概率性优化算法,通过模拟物理退火过程来逃离局部最优解。

  • 优化器的组合:在实际应用中,可能会结合多种优化方法,如使用动量和自适应学习率的组合(如Adam)。

常见的机器学习算法通常使用以下方法来训练模型参数:

  • 逻辑回归(Logistic Regression):通常使用梯度下降或其变体(如随机梯度下降)来优化损失函数,这里是对数损失或交叉熵损失。

  • 决策树(Decision Trees):决策树的训练是一个递归的分割过程,不需要优化算法来调整参数。但是,对于树的复杂性可以通过剪枝(Pruning)来控制。

  • 随机森林(Random Forest):随机森林是由多个决策树组成的集成学习算法。每棵树的训练过程与单个决策树相同,不需要特定的优化算法。

  • 支持向量机(SVM):SVM的训练涉及到求解一个凸二次规划问题,通常使用序列最小优化(SMO)算法或内点法(Interior-Point Method)来找到最优的权重和偏置。

  • K最近邻(KNN):KNN是一种基于实例的学习算法,它不涉及训练参数的过程。分类或回归是基于测试点最近的K个邻居的标签或值。

  • 人工神经网络(ANN):ANN的训练通常使用梯度下降或其变体(如SGD、Adam、RMSprop等)来优化损失函数,并通过反向传播算法来更新网络权重。

  • 多层感知器(MLP):MLP是ANN的一种,其训练方法与ANN相同,使用梯度下降或其变体来优化损失函数。

  • 朴素贝叶斯分类器(Naive Bayes Classifier):朴素贝叶斯分类器的训练涉及到计算每个类别的条件概率。对于离散特征,通常使用频率估计;对于连续特征,可以使用高斯分布或其他概率分布。

  • 集成方法(Ensemble Methods):除了随机森林,其他集成方法如AdaBoost、Gradient Boosting和XGBoost也使用特定的算法来训练模型,这些算法通过迭代地训练模型并调整权重来优化整体性能。

  • 深度学习模型(Deep Learning Models):深度学习模型,如卷积神经网络(CNN)和循环神经网络(RNN),通常使用Adam、RMSprop或其他自适应学习率优化算法来训练。

三.交叉验证

交叉验证是在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择(model selection)。交叉验证法的作用就是尝试利用不同的训练集/验证集划分来对模型做多组不同的训练/验证,来应对单独测试结果过于片面以及训练数据不足的问题。

1.k-折交叉验证

①.将数据集分为训练集和测试集,测试集放在一边。

②.将训练集分为 k 份,每次使用 k 份中的1 份作为验证集,其他全部作为训练集。

③.通过 k 次训练后,得到了 k 个不同的模型。

④.评估 k 个模型的效果,取这里K次的记录误差平均值,作为最终评价模型性能的结果

或④.(模型选择的情况)评估 k 个模型的效果,从中挑选效果最好的超参数。(在模型选择时,假设模型有许多超参数可供调参,一组超参数便确定一个模型,计算其交叉验证误差,最后选择使得交叉验证误差最小的那一组超参数,这便是模型选择过程。)。使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终所需模型,最后再到测试集上测试。

2.交叉验证中的最佳模型选择:

主要关注的是超参数的选择。交叉验证的过程通常用于评估不同超参数设置下模型的性能,以确定最佳的超参数组合。通常涉及以下几个步骤:

  • 定义搜索空间:在开始超参数优化之前,需要定义每个超参数的可能取值范围或一个候选列表。这个搜索空间是基于你对模型和任务的了解预先定义的。

  • 初始化超参数:一开始,要有一个基于经验或默认的超参数设置作为起点。这是你的初始模型配置。

  • 超参数搜索:使用超参数搜索策略(如网格搜索、随机搜索、贝叶斯优化等)来探索定义的搜索空间。这些策略会尝试不同的超参数组合。

  • 交叉验证:对于搜索空间中的每组超参数,使用交叉验证来评估模型的性能。这意味着数据被分成多个折叠,每个折叠轮流作为验证集,其余作为训练集。

  • 性能评估:在每个验证折叠上,模型使用当前的超参数组合进行训练,并在验证集上进行评估。

  • 选择最佳组合:根据交叉验证的结果,选择平均性能最好的超参数组合。

  • 最终训练:一旦找到了最佳的超参数组合,可以使用整个训练集重新训练模型,并在独立的测试集上进行最终评估。

3.如何确定k值?

posted @ 2024-12-18 23:12  魔魔胡胡胡萝卜  阅读(142)  评论(0编辑  收藏  举报