首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KFold和ShuffleSplit CV有什么区别?

KFold和ShuffleSplit CV有什么区别?
EN

Stack Overflow用户
提问于 2016-01-12 05:28:09
回答 1查看 15.1K关注 0票数 42

似乎每次迭代对象时,KFold都会生成相同的值,而Shuffle Split每次都会生成不同的索引。这是正确的吗?如果是这样,那么一个比另一个有什么用处呢?

代码语言:javascript
复制
cv = cross_validation.KFold(10, n_folds=2,shuffle=True,random_state=None)
cv2 = cross_validation.ShuffleSplit(10,n_iter=2,test_size=0.5)
print(list(iter(cv)))
print(list(iter(cv)))
print(list(iter(cv2)))
print(list(iter(cv2)))

生成以下输出:

代码语言:javascript
复制
[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))]                                     
[(array([1, 3, 5, 8, 9]), array([0, 2, 4, 6, 7])), (array([0, 2, 4, 6, 7]), array([1, 3, 5, 8, 9]))]                                     
[(array([4, 6, 3, 2, 7]), array([8, 1, 9, 0, 5])), (array([3, 6, 7, 0, 5]), array([9, 1, 8, 4, 2]))]                                     
[(array([3, 0, 2, 1, 7]), array([5, 6, 9, 4, 8])), (array([0, 7, 1, 3, 8]), array([6, 2, 5, 4, 9]))]    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-12 05:44:40

在KFold和ShuffleSplit输出中的差异

KFold会将您的数据集划分为预先指定数量的folds,并且每个样本必须位于且仅位于一个折叠中。折叠是数据集的子集。

ShuffleSplit将在每个迭代期间随机采样整个数据集,以生成训练集和测试集。test_sizetrain_size参数控制每次迭代的测试和训练测试集的大小。由于您在每次迭代期间从整个数据集进行采样,因此在一次迭代期间选择的值可能会在另一次迭代期间再次选择。

摘要: ShuffleSplit迭代工作,KFold只是将数据集分成k倍。

执行验证时的差异

在KFold中,在每一轮中,您将使用一个折叠作为测试集,而所有剩余的折叠作为您的训练集。然而,在ShuffleSplit中,在每一轮迭代期间,您应该只使用迭代n中的训练和测试集。随着数据集的增长,交叉验证时间也会增加,这使得随机拆分成为一种更有吸引力的替代方法。如果你可以用一定百分比的数据训练你的算法,而不是使用所有的k-1倍,ShuffleSplit是一个有吸引力的选择。

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34731421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档