一、交叉验证
交叉验证(Cross-validation)是在机器学习建立模型和验证模型参数时常用的方法。它的主要目的是评估模型在独立数据集上的泛化能力,以避免过拟合和欠拟合的问题,并帮助我们选择最佳的模型和超参数。
(一)基本原理
交叉验证的基本思想是将原始数据集分成多个部分,一部分当作训练集,另一部分作为验证集。先用训练集对算法模型进行训练,再用验证集测试训练得到的算法模型,反复利用这些部分进行模型的训练和验证。
通过这种方式,我们可以获得多个模型性能的估计值,并取其平均值作为模型性能的最终评估。
(二)步骤
1、数据划分
eg: 将原始数据集以4:1的比例分割为训练集和测试集,训练集被用于训练和调整模型,而测试集则用于评估模型的准确率,以检验模型的泛化能力和预测精度。
2、反复训练与验证
在K折交叉验证方法中,原始数据集被均分为K份,其中K-1份数据作为训练数据集,用于训练模型;而剩下的1份数据则作为验证数据集,用于验证模型的性能和准确率。
比如,把数据分成5份,先用第一份数据当验证集,把后面四份的训练结果与第一份做验证;再用第二份数据当验证集,把其他四份数据的训练结果和第二份做验证;以此类推...
这种方法有助于评估模型的稳定性和泛化能力,同时也能充分利用数据集,提供更准确的模型评估结果。
3、性能评估
这个过程一共需要进行K次,记录每次迭代的评估指标(如准确率、召回率、F1分数、均方误差等),并计算这些指标的平均值,以此作为模型性能的总体评估。
4、模型选择与调参
根据交叉验证的结果,比较这些平均性能指标,从中选择最佳的模型或参数设置。交叉验证可以帮助我们确定哪些参数调整能够带来模型性能的提升。
(三)注意点
当我们在模型中添加网格搜索时,一般情况下,我们在训练模型前已经按照一定比例划分了测试集和训练集(如9训练集:1测试集)。当想要进行k-fold交叉验证时,应该使用那90%的训练集数据,并将其进一步划分为k个子集。
保留的那10%的测试集数据在k-fold交叉验证过程中是不参与的,它通常用于在交叉验证结束后,评估所选模型在未见数据上的性能。这样做可以提供一个更真实的模型性能度量,因为测试集数据在模型选择和调优过程中是不可见的。