[Machine Learning] 交叉验证(Cross Validation)

交叉验证(Cross Validation)


什么是交叉验证(Cross Validation)

交叉验证是一种模型验证技术,可用于评估统计分析(模型)结果在其他独立数据集上的泛化能力。它主要用于预测,我们可以用它来评估预测模型在实践中的准确度

什么是泛化(Generalization)能力呢?

在《[Machine Learning] 回归(Regression)》中有提到,这里简单说明一下:

泛化能力通俗来将是指学习到的模型对未知数据的预测能力

交叉验证(Cross Validation)的目的

在实际训练中,模型通常对训练数据好,但是对训练数据之外的数据拟合程度差。因此,为了得到可靠稳定的模型,使用交叉验证可以在使用模型进行预测时,准确衡量一个模型在实际数据集上的效果。

交叉验证(Cross Validation)的基本思想

在某种意义下把原始数据进行分组,一部分作为训练集(Training Data),一部分作为验证集(Validation Set),还有一部分作为测试集(Testing Set)

  • 训练集

    训练集用于训练模型,即确定模型的参数

  • 验证集

    验证集用于模型的选择,更具体地说,验证集不参与参数的确定(即模型的训练过程)。验证集只是为了选择超参数,比如网络层数、网络节点数、学习率这些在开始学习过程之前设置值的参数

  • 测试集

    测试集只使用一次,即在训练完成后评价最终的模型时使用。它既不参与模型训练的过程,也不参与超参数的选择过程,而仅仅用于模型的评价。

  1. 使用训练集对模型进行训练
  2. 利用验证集来测试训练得到的模型,以此来评价模型的性能指标

交叉验证(Cross Validation)的作用

  • 有助于评估模型的质量
  • 有助于我们挑选出那些能够在预测数据集上取得最好性能的模型
  • 有助于我们避免欠拟合和过拟合

什么是欠拟合&过拟合呢?在《[Machine Learning] 欠拟合&过拟合(Underfitting & Overfitting)》中有提到,这里简单说明一下:

欠拟合指的是模型没能够从训练数据中学习到足够的模式(模型拟合程度不高,数据拟合曲线较远,模型没有很好地捕捉到数据特征,不能够很好的拟合数据)。此时,模型在训练集和测试集上的表现都非常差。

过拟合是指为了得到一致假设而使假设变得过度严格。此时,模型在训练集上表现很好,但是在测试集上表现则非常差。

举例说明

在实际中,数据集一般分为训练集(Training Set)、已知测试集(Public Testing Set)、未知测试集(Private Testing Set)。

交叉验证具体步骤:

  • 拆分训练集

    将训练集(Training Set)拆分为真正的训练集(Training Set)和验证集(Validation Set)

  • 训练模型

    假设当前你有三个模型,那么你的目标就是选出一个最好的模型。将这三个模型用训练集(Training Set)进行训练

  • 验证模型

    训练结束后,将已经训练好的三个模型用验证集(Validation Set)进行验证,然后挑选出最好的模型(Error最小)。如果你觉得原本的训练集被拆分成两组后训练集数据变少了,那么你可以在确定模型后再重新用未拆分的训练集(Training Set)训练确定的模型

  • 测试模型

    把确定并训练好的模型使用测试集(Testing Set)进行预测并计算Error,往往计算出的Error会大于模型在验证集(Validation Set)上的Error,但是测试集(Testing Set)上的Error才是能真正反映你在其他未知测试集(Private Testing Set)上的Error

注意千万不能在训练过程中使用测试集后,再用相同的测试集去测试模型。这样做其实是一个cheat行为,使得模型测试时准确率提高,但实际上模型在其他未知的测试集上未必准确率会提高。比如天池、DC等线上比赛,都会有相应的后台测试集,这些测试集你是不知道的(即使在心情上把持不住这么做,但也不要这么做)

k折交叉验证(k-fold Cross Validation)

没有足够的数据用于训练模型时,划分数据的一部分进行验证会导致得到模型欠拟合,减少训练集,会使模型丧失部分数据集中重要的特征或趋势,这会增加偏差(bias)导致的误差

因此,我们需要一种方法来提供样本集训练模型并且留一部分数据集用于验证模型——k折交叉验证

具体步骤(下图为3折交叉验证):

  • 将数据集打乱,将打乱后的数据集均匀分成k份
  • 轮流选择其中的k-1份作为训练集(Training Set),剩下的1份作为验证集(Validation Set),并计算模型的Error
  • 迭代进行k次后将k次的Error做平均作为选择最优模型的依据

优点:k折交叉验证在进行k次交叉验证之后,使用k次平均成绩作为整个模型的得分。每个数据在验证集中出现一次,并且在训练中出现k-1次。

  • 这将显著减少欠拟合,因为使用了数据集中的大多数的数据进行训练
  • 同时也降低了过拟合的可能,因为也使用了大多数的数据进行模型的验证。

文章就到这里,还请大家帮忙勘误!

(如果文章对您有帮助,希望可以点赞或评论~ 谢谢您的支持~)

发布了6 篇原创文章 · 获赞 3 · 访问量 3440

猜你喜欢

转载自blog.csdn.net/Oh_MyBug/article/details/104304085