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 折交叉验证