Bootstrap

分类问题的交叉验证原理+实现

分类问题的交叉验证原理+实现


最近小论文返修,审稿人要求增加分类算法的交叉验证结果。断断续续花了一个星期时间完成。为避免后续再修改的时候忘记,总结一下交叉验证的原理和实现方法。

原理

首先要交叉验证,就需要有三个数据集:训练集、测试集和验证集。训练集和测试集是最基本所需,作用不用多说。为什么需要验证集呢,是因为一个测试集的验证能力是有限的,为了验证一个模型的泛化能力,即为了证明一个模型在一个数据集上表现出高精度不是巧合,就需要多个数据集来验证,即交叉验证。
一般情况下,在已划分的训练集和测试集的基础上,对训练集进一步划分,以三折交叉验证为例,将训练集样本分为三份,首先将后两份作为训练集,第一份作为验证集;其次将第一份和第三份作为训练集,第二份作为验证集;最后将前两份作为训练集,第三份作为验证集(python习惯以验证集的序号为主)。依次训练并预测。
需要注意的是,这里预测的不是与test_y对应的预测值,而是在给定阈值下为正样本的概率。进而可计算出fpr(false positive rate)和tpr(false positive rate),进而画出ROC曲线,进而可计算(0,1)区间内曲线与横坐标轴包围的面积AUC。当AUC大于0.5时,则表示模型是合理且有效的。
三折交叉验证对应三条ROC曲线。

实现

使用Python3.7实现交叉验证主要包括以下几步:
1、划分训练集为训练集和验证集。在sklearn中有现成的包可直接调用。

;