网站制作公司深圳,wordpress安装编辑器,网站开发软件 论文 摘要,简单的网站设计案例StratifiedKFold解释和代码实现 文章目录 一、StratifiedKFold是什么#xff1f;二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释3.4 数据打乱对这种交叉验证的影响。 四、总结 一、StratifiedKFold是什么#xff1f; … StratifiedKFold解释和代码实现 文章目录 一、StratifiedKFold是什么二、 实验数据设置2.1 实验数据生成代码2.2 代码结果 三、实验代码3.1 实验代码3.2 实验结果3.3 结果解释3.4 数据打乱对这种交叉验证的影响。 四、总结 一、StratifiedKFold是什么
0123每一行表示测试集和训练集的划分的一种方式。 class表示类别的个数下图显示的是3类有些交叉验证根据类别的比例划分测试集和训练集例三。 group表示从不同的组采集到的样本颜色的个数表示组的个数有些时候我们关注在一组特定组上训练的模型是否能很好地泛化到看不见的组。举个例子解释“组”的意思我们有10个人我们想要希望训练集上所用的数据来自12345678测试集上的数据来自910也就是说我们不希望测试集上的数据和训练集上的数据来自同一个人如果来自同一个人的话训练集上的信息泄漏到测试集上了模型的泛化性能会降低测试结果会偏好。
二、 实验数据设置
2.1 实验数据生成代码
X, y np.arange(0,60).reshape((30,2)), np.hstack(([0] * 3, [1] * 9, [2] * 18))
print(数据, end )
for l in X:print(l, end )
print()
print(标签, y)2.2 代码结果
数据 [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59]
标签 [0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]数据个数、标签个数30个 类别个数3个分别是012比例是0.10.30.6和class每类对应StratifiedKFold 组别group:由于StratifiedKFold交叉验证结果和group无关所以这里不再设置。
三、实验代码
3.1 实验代码
代码如下
from sklearn.model_selection import StratifiedKFold
import numpy as np
# X, y np.ones((30, 1)), np.hstack(([0] * 20, [1] * 10))
# print(np.arange(0,30).reshape((30,1)))
X, y np.arange(0,60).reshape((30,2)), np.hstack(([0] * 3, [1] * 9, [2] * 18))
print(数据, end )
for l in X:print(l, end )
print()
print(标签, y)
skf StratifiedKFold(n_splits3)
for i,(train, test) in enumerate(skf.split(X, y)):print(StratifiedKFold 第%d折叠 % (i1))print(train - {}.format(np.bincount(y[train])))print( 训练集索引%s % train)print( 训练集标签, y[train])print( 训练集数据, end )for l in X[train]:print(l, end )print()# print( 训练集数据, X[train])print(test - {}.format(np.bincount(y[test])))print( 测试集索引%s % test)print( 测试集标签, y[test])print( 测试集数据, end )for l in X[test]:print(l, end )print()# print( 测试集数据, X[test])print()3.2 实验结果
结果如下
数据 [0 1] [2 3] [4 5] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59]
标签 [0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
StratifiedKFold 第1折叠
train - [ 2 6 12]训练集索引[ 1 2 6 7 8 9 10 11 18 19 20 21 22 23 24 25 26 27 28 29]训练集标签 [0 0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2]训练集数据 [2 3] [4 5] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59]
test - [1 3 6]测试集索引[ 0 3 4 5 12 13 14 15 16 17]测试集标签 [0 1 1 1 2 2 2 2 2 2]测试集数据 [0 1] [6 7] [8 9] [10 11] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] StratifiedKFold 第2折叠
train - [ 2 6 12]训练集索引[ 0 2 3 4 5 9 10 11 12 13 14 15 16 17 24 25 26 27 28 29]训练集标签 [0 0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2]训练集数据 [0 1] [4 5] [6 7] [8 9] [10 11] [18 19] [20 21] [22 23] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59]
test - [1 3 6]测试集索引[ 1 6 7 8 18 19 20 21 22 23]测试集标签 [0 1 1 1 2 2 2 2 2 2]测试集数据 [2 3] [12 13] [14 15] [16 17] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] StratifiedKFold 第3折叠
train - [ 2 6 12]训练集索引[ 0 1 3 4 5 6 7 8 12 13 14 15 16 17 18 19 20 21 22 23]训练集标签 [0 0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2]训练集数据 [0 1] [2 3] [6 7] [8 9] [10 11] [12 13] [14 15] [16 17] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47]
test - [1 3 6]测试集索引[ 2 9 10 11 24 25 26 27 28 29]测试集标签 [0 1 1 1 2 2 2 2 2 2]测试集数据 [4 5] [18 19] [20 21] [22 23] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59]
进程已结束退出代码 0
3.3 结果解释
可以看到测试集和训练集划分是根据折叠数和标签的比例。例如这里的折叠数是3标签的比例是136所以在第一折叠处测试集标签0的个数是1/3折叠数*0.1标签比例*30样本数1个。剩余的分析同理。
StratifiedKFold 第1折叠
train - [ 2 6 12]训练集索引[ 1 2 6 7 8 9 10 11 18 19 20 21 22 23 24 25 26 27 28 29]训练集标签 [0 0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2]训练集数据 [2 3] [4 5] [12 13] [14 15] [16 17] [18 19] [20 21] [22 23] [36 37] [38 39] [40 41] [42 43] [44 45] [46 47] [48 49] [50 51] [52 53] [54 55] [56 57] [58 59]
test - [1 3 6]测试集索引[ 0 3 4 5 12 13 14 15 16 17]测试集标签 [0 1 1 1 2 2 2 2 2 2]测试集数据 [0 1] [6 7] [8 9] [10 11] [24 25] [26 27] [28 29] [30 31] [32 33] [34 35] 3.4 数据打乱对这种交叉验证的影响。
X, y np.arange(0,60).reshape((30,2)), np.hstack(([0] * 3, [1] * 9, [2] * 18))改为下面的代码
arr np.hstack(([0] * 3, [1] * 9, [2] * 18))
print(原始标签, arr)
# 使用np.random.shuffle函数将数组打乱
np.random.shuffle(arr)
X, y np.arange(0,60).reshape((30,2)), arr可以看出划分和标签的先后顺序有一定的关系。
四、总结
StratifiedKFold:考虑了标签class但没考虑组group的影响。