码迷,mamicode.com
首页 > 其他好文 > 详细

K折交叉验证

时间:2019-06-01 21:07:15      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:状态   color   form   复杂   python实现   from   避免   模块   div   

交叉验证的思想

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

简单的交叉验证

  将原始数据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折交叉验证

标签:状态   color   form   复杂   python实现   from   避免   模块   div   

原文地址:https://www.cnblogs.com/zymei/p/10832582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!