K折交叉验证

Posted zymei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K折交叉验证相关的知识,希望对你有一定的参考价值。

交叉验证的思想

  交叉验证主要用于防止模型过于复杂而引起的过拟合,是一种评价训练数据的数据集泛化能力的统计方法。其基本思想是将原始数据进行划分,分成训练集和测试集,训练集用来对模型进行训练,测试集用来测试训练得到的模型,以此来作为模型的评价指标。

简单的交叉验证

  将原始数据D按比例划分,比如7:3,从D中随机选择70%的数据作为训练集train_data,剩余的作为测试集test_data(绿色部分)。如下图所示,这里的数据都只利用了一次,并没有充分利用,对于小数据集,需要充分利用其数据的信息来训练模型,一般会选择K折交叉验证。

  技术图片

 K折交叉验证

  将原始数据D随机分成K份,每次选择(K-1)份作为训练集,剩余的1份(红色部分)作为测试集。交叉验证重复K次,取K次准确率的平均值作为最终模型的评价指标。过程如下图所示,它可以有效避免过拟合和欠拟合状态的发生,K值的选择根据实际情况调节。

  技术图片

 

python实现

  使用scikit-learn模块中的方法KFold,示例如下:

 1 from sklearn.model_selection import KFold
 2 import numpy as np
 3 x = np.array([B, H, L, O, K, P, W, G])
 4 kf = KFold(n_splits=2)
 5 d = kf.split(x)
 6 for train_idx, test_idx in d:
 7     train_data = x[train_idx]
 8     test_data = x[test_idx]
 9     print(train_idx:, train_data:.format(train_idx, train_data))
10     print(test_idx:, test_data:.format(test_idx, test_data))
11 
12 # train_idx:[4 5 6 7], train_data:[‘K‘ ‘P‘ ‘W‘ ‘G‘]
13 # test_idx:[0 1 2 3], test_data:[‘B‘ ‘H‘ ‘L‘ ‘O‘]
14 # train_idx:[0 1 2 3], train_data:[‘B‘ ‘H‘ ‘L‘ ‘O‘]
15 # test_idx:[4 5 6 7], test_data:[‘K‘ ‘P‘ ‘W‘ ‘G‘]

 

以上是关于K折交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

在 MLPClassification Python 中实现 K 折交叉验证

在 MATLAB 中测试模型准确性的 K 折交叉验证

小白学习之pytorch框架之实战Kaggle比赛:房价预测(K折交叉验证*args**kwargs)

在使用 k 折交叉验证训练训练数据后如何测试数据?

使用 K 折交叉验证标准化数据

绘制 K 折交叉验证的 ROC 曲线