K折交叉验证处理数据!

机器学习(Machine Learning)与 深度学习(Deep Learning)的相关研究中,经常会将数据集(dataset)划分为训练集(training set)跟测试集(testing set)这两个子集,训练集用以建立模型(model),测试集则用来评估该模型对未知样本进行预测时的精确度,正规的说法是模型的泛化能力(generalization ability)。
但是有时候我们的数据点少,训练集和测试集就会很少,因此模型结果可能会有很大波动。也就是说,训练集和测试集的划分方式可能会对模型产生很大影响,这就无法对模型进行可靠评估。

在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集随机分为k个小数据集,每次将其中一个小数据集作为测试集,剩下k-1个小数据集作为训练集进行训练,这就是K-折交叉验证

注意:当你把原始数据的训练集和测试集都划分好了之后,做K折交叉验证需要在原来的训练集上做,得出相关的结论,再在测试集上看结果。

下面上图让大家直观了解下:
K折交叉验证处理数据!_第1张图片
这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次。(注意每次作为验证模型的数据是不同的)

下面附上python中sklearn库实现K折交叉验证代码:
K折交叉验证处理数据!_第2张图片
再来看看结果:
K折交叉验证处理数据!_第3张图片
最后来看看这些参数的意思:

1.n_splits:表示划分几等份,也就是K折。

2.shuffle :布尔值,可选。是否在分割成批次之前打乱数据。

3.random_state :值为 int,RandomState实例或None,可选,默认=None
…如果是int,则random_state是随机数生成器使用的种子;
…如果是RandomState实例,则random_state是随机数生成器;
…如果是None,随机数生成器所使用的RandomState实例是np.random。
…random_state,在shuffle== True时使用.

5.get_n_splits() 返回交叉验证器中的拆分迭代次数

6.split() 将数据拆分为训练和测试集。

当然啦,作为一个合格的程序员,程序当然得自己写,下面附上一个我在做一个案例时用的交叉验证代码吧
K折交叉验证处理数据!_第4张图片

你可能感兴趣的:(K折交叉验证处理数据!)