bobo老师,向您询问一个问题。如何使用交叉验证调节参数,并且得到最终的准确率呢?我看了bobo老师课程里面的回答:先使用train_test_split把原始数据集划分为训练集和测试集,然后在训练集上交叉验证,寻找最优的参数。最优参数一旦找到后,使用整个训练集去训练最优参数下的模型,然后在测试集上得到最终的准确率。这个办法我觉得没毛病,确实合理划分了训练集、验证集、测试集。因为在训练集下进行交叉验证,每次都会划分一小份数据作为验证的作用。
但是这个方法有一个漏洞:一开始划分的测试集有随机性。如果数据量非常小的话,那一开始划分训练集、测试集包含很大的偶然性。有可能划分到的测试集中包含了很多容易分对的样本,也有可能一开始划分的测试集包含了非常多很难分对的样本。在小样本的情况下,如果只让模型在一个测试集上得出答案的话,这样子的结果似乎没有可信度啊。如果只在一个测试集上测试的话,只能得到一个准确率,这样甚至都不能算置信区间。
那为什么不把原始数据直接交叉验证呢?直接将原始数据划分为训练集、验证集、测试集。十则交叉验证的话,就按6:2:2的比例将所有数据随机划分十次。这样既能通过验证集调节参数,我也相当于拥有了10个测试集,会得出10个准确率。这样我就能算出模型最终的平均准确率以及标准差。
不过我查了一些资料,似乎没有人这么干过。。。为什么不采取这种方式进行交叉验证呢:)