在机器学习里,通常来说我们不能把全部数据用于训练模型,
否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果
1.The Validation Set Approach
第一种是最简单的,也是很容易就想到的。
我们可以把整个数据集分成两部分,一部分用于训练,一部分用于验证,
这也就是我们经常提到的训练集(training set)和测试集(test set)
不过,这个简单的方法存在两个弊端。
1.最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法。
什么意思呢?我们再看一张图:
右边是十种不同的训练集和测试集划分方法得到的test MSE,可以看到,在不同的划分方法下,test MSE的变动是很大的,而且对应的最优degree也不一样。所以如果我们的训练集和测试集的划分方法不够好,很有可能无法选择到最好的模型与参数。
2.该方法只用了部分数据进行模型的训练
我们都知道,当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。
基于这样的背景,有人就提出了Cross-Validation方法,也就是交叉验证。
2.1 LOOCV
首先,我们先介绍LOOCV方法,即(Leave-one-out cross-validation)。
像Test set approach一样,LOOCV方法也包含将数据集分为训练集和测试集这一步骤。
但是不同的是,我们现在只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。
如上图所示,假设我们现在有n个数据组成的数据集,
那么LOOCV的方法就是每次取出一个数据作为测试集的唯一元素,
而其他n-1个数据都作为训练集用于训练模型和调参。
结果就是我们最终训练了n个模型,
每次都能得到一个MSE。而计算最终test MSE则就是将这n个MSE取平均。
mse mean-square-error
首先它不受测试集合训练集划分方法的影响,
因为每一个数据都单独的做过测试集。
同时,其用了n-1个数据训练模型,也几乎用到了所有的数据,保证了模型的bias更小。
不过LOOCV的缺点也很明显,那就是计算量过于大,是test set approach耗时的n-1倍。
2.2 K-fold Cross Validation
每次的测试集将不再只包含一个数据,而是多个,
具体数目将根据K的选取决定。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:
1.将所有数据集分成5份
2.不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的[公式]
3.将5次的[公式]取平均得到最后的MSE
不难理解,其实LOOCV是一种特殊的K-fold Cross Validation(K=N)。
交叉验证
最新推荐文章于 2022-09-28 12:48:51 发布