在机器学习和深度学习中,将数据分为训练集(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)。交叉验证法的作用就是尝试利用不同的训练集/验证集划分来对模型做多组不同的训练/验证,来应对单独测试结果过于片面以及训练数据不足的问题。
k-折交叉验证
1.将数据集分为训练集和测试集,测试集放在一边。
2.将训练集分为 k 份,每次使用 k 份中的1 份作为验证集,其他全部作为训练集。
3.通过 k 次训练后,得到了 k 个不同的模型。
4.评估 k 个模型的效果,取这里K次的记录误差平均值,作为最终评价模型性能的结果
或4.(模型选择的情况)评估 k 个模型的效果,从中挑选效果最好的超参数。(在模型选择时,假设模型有许多超参数可供调参,一组超参数便确定一个模型,计算其交叉验证误差,最后选择使得交叉验证误差最小的那一组超参数,这便是模型选择过程。)。使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终所需模型,最后再到测试集上测试。
如何确定k值?