交叉验证(Cross Validation)

交叉验证是在机器学习建立模型和验证模型参数时常用的方法。交叉验证就是重复使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓的‘交叉’。

1.简单交叉验证

所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。 

2.k-折交叉验证

k折交叉验证会把样本数据随机的分成k份,每次随机的选择k-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择k-1份来训练数据。若干轮(小于k)之后,选择损失函数评估最优的模型和参数。

k 折交叉验证通过对 k 个不同分组训练的结果进行平均来减少方差,因此模型的性能对数据的划分就不那么敏感。

1) 不重复抽样将原始数据随机分为 k 份

2) 每一次挑选其中 1 份作为测试集,剩余 k-1 份作为训练集用于模型训练。

3) 重复第二步 k 次,这样每个子集都有一次机会作为测试集,其余机会作为训练集。

4) 在每个训练集上训练后得到一个模型,用这个模型在相应的测试集上测试,计算并保存模型的评估指标,

5)计算 k 组测试结果的平均值作为模型精度的估计,并作为当前 k 折交叉验证下模型的性能指标。

k一般取10

3.留一法

当k=m 即k等于样本总数时,就是留一法。每次的测试集都只有一个样本,要进行 m 次训练和预测。 这个方法用于训练的数据只比整体数据集少了一个样本,因此最接近原始样本的分布。 但是训练复杂度增加了,因为模型的数量与原始数据样本数量相同。 一般在数据缺乏时使用。

cross_val_score 

estimator : 模型

X:特征

y : 输出

scoring : 模型评估 分类、聚类、回归所用模型是不一样的

cv : k折交叉验证

猜你喜欢

转载自blog.csdn.net/zhaoqqa/article/details/82113302