什么是交叉验证
拿最基本的交叉验证方法–k折交叉验证举例:
将训练集分成k个较小的集合:
train_data=t1+t2+...+ti+...+tk
t
r
a
i
n
_
d
a
t
a
=
t
1
+
t
2
+
.
.
.
+
t
i
+
.
.
.
+
t
k
for t in {t1, t2, ..., tk}:
t作为验证集,其他k-1个集合合并后作为训练集
计算出该模型的性能指标(如准确率)st
最终的性能指标S = avg(s1,s2,...,sk)
其他方法会在后边描述,主要原则基本和k折交叉验证相同
为什么要使用交叉验证
通常情况下,我们会将数据分成训练集和测试集。用训练集训练数据,然后在测试集上测试该模型的泛化能力。
但是当我们遇到有超参数的模型(如svm)时,不能直接用测试集来检验哪个超参数最优,而是必须先在原有基础上再分割出一个验证集,在验证集上检验哪个超参数最优,然后在测试集上测试模型的泛化能力。
而将数据分割成三个部分,会大大降低训练数据的数量,进而有可能会导致最终得出的模型解释能力不足,也会使模型的性能受到数据分割成训练和测试的随机性的影响。为了解决这一问题,我们可以使用交叉验证,充分的利用数据,同时也避免了随机性造成的模型性能不稳定。交叉验证在数据集较少的情况下优势较为明显。
不过,我们还是要注意,这样循环k次,会导致模型耗时更长,需谨慎使用。
怎样使用交叉验证
这里详细介绍一下在sklearn中使用交叉验证训练模型的全过程。
todo
http://sklearn.apachecn.org/cn/0.19.0/modules/cross_validation.html
交叉验证的种类
todo