天天看点

交叉验证(Cross validation)总结

一  什么是CV

       CV,通俗理解就是使用训练数据和测试数据交叉的方式来验证一个(或多个)模型的性能,以此判定算法在数据上的大致性能。        使用CV可以大致估算出模型的准确率;当模型中有超参数(hyperparameter)时,可以使用CV的方法选取这些超参

二 为什么需要CV

        构建机器学习模型的一个重要环节是评价模型在新数据上的性能。模型过于简单,容易出现欠拟合(high bias, underfitting);模型过于负责, 容易过拟合(high variance, overfitting). 为了达到一个合理的bias-variance平衡,需要对模型进行认真评估,如果达不到平衡,可能需要调参, 甚至更换模型。 CV可以增强模型的泛化能力(即在新数据上的表现)

三 两种CV

     1. Hold-out validation

     使用 hold out (可以理解为保留,即保留部分数据做验证)方法,我们将初始数据集(initial dataset)分为训练集(training dataset)和测试集(test dataset)两部分。训练集用于模型的训练,测试集进行性能的评价。然而,在实际机器学习的应用中,我们常常需要反复调试和比较不同的参数设置以提高模型在新数据集上的预测性能。这一调参优化的过程就被称为模型的选择(model selection):select the optimal values of tuning parameters (also called hyperparameters)。然而,如果我们重复使用测试集的话,测试集等于称为训练集的一部分,此时模型容易发生过拟合。

一个使用 holdout 方法进行模型选择的较好的方式是将数据集做如下的划分:

  • 训练集(training set);

    The training set is used to fit the different models

  • 评价集(validation set);

    The performance on the validation set is then used for the model selection。

    常用的做法是,超参选取多个value进行模型的训练,分被使用validation set 进行评估,选取效果最佳的参数value。

  • 测试集(test set);

    The advantage of having a test set that the modelhasn’t seen before during the training and model selection steps is that we can obtain a less biased estimate of its ability to generalize to new data.  对模型测创建过程无影响,测试更准确

     下图阐述了 holdout cross-validation 的工作流程,其中我们重复地使用 validation set 来评估参数调整时(已经历训练的过程)模型的性能。一旦我们对参数值满意,我们就将在测试集(新的数据集)上评估模型的泛化误差。

  • 交叉验证(Cross validation)总结
    holdout 方法的弊端在于性能的评估对training set 和 validation set分割的比例较为敏感。在NG的课程所说, hold out cv直选择了部分数据(常用70%)进行模型的训练,对数据少、数据昂贵的情况并不合适,这是k-fold cv 可以提供更多的选择

    2 k-fold validation

         按照NG在http://cs229.stanford.edu/notes/cs229-notes5.pdf 中的解释。        

        在 k-fold cross_validation,将训练集分为 k folds(k个部分),其中的 k-1 folds 用于模型的训练,1 fold 用于测试。使用一个模型,将这一过程重复 k 次,我们便可获得 这个模型的性能评价;针对不同的模型(例如LR、SVM、NN等),依次执行上述过程,计算得到对应的性能。  这样就可以选择最优的model。 每个model都训练了k词,计算量较大。

        k常选10.  如果数据较少,k应该选择较大,以便使训练数据更多。极限情况下,k = 样本数,这样validation subset只有一个,这种情况叫leave-one-out-cv。 下图是流程图

交叉验证(Cross validation)总结

继续阅读