首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scikit学习中的分层训练/验证/测试拆分

scikit学习中的分层训练/验证/测试拆分
EN

Stack Overflow用户
提问于 2016-11-27 20:49:20
回答 2查看 8.7K关注 0票数 9

这里已经描述了如何通过train_test_split (Stratified Train/Test-split in scikit-learn)在scikit中进行分层训练/测试拆分,以及如何通过np.split (How to split data into 3 sets (train, validation and test)?)随机训练/验证/测试拆分。但是,如何进行分层训练/验证/测试拆分呢?

对于分层(在类标签上)训练/验证/测试拆分,我想到的最接近的近似方法如下,但我怀疑有一种更好的方法可以在一个函数调用中实现这一点,或者以一种更准确的方式实现:

假设我们想要进行60/20/20训练/验证/测试拆分,那么我现在的方法是首先进行60/40分层拆分,然后在前40个分区上进行50/50分层拆分,最终得到60/20/20分层拆分。

代码语言:javascript
复制
from sklearn.cross_validation import train_test_split
SEED = 2000
x_train, x_validation_and_test, y_train, y_validation_and_test = train_test_split(x, y, test_size=.4, random_state=SEED)
x_validation, x_test, y_validation, y_test = train_test_split(x_validation_and_test, y_validation_and_test, test_size=.5, random_state=SEED)

如果我的方法是正确的,或者如果你有更好的方法,请回来。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-12-21 07:59:44

解决方案是只使用StratifiedShuffleSplit两次,如下所示:

代码语言:javascript
复制
from sklearn.model_selection import StratifiedShuffleSplit

split = StratifiedShuffleSplit(n_splits=1, test_size=0.4, random_state=42)
for train_index, test_valid_index in split.split(df, df.target):
    train_set = df.iloc[train_index]
    test_valid_set = df.iloc[test_valid_index]

split2 = StratifiedShuffleSplit(n_splits=1, test_size=0.5, random_state=42)
for test_index, valid_index in split2.split(test_valid_set, test_valid_set.target):
    test_set = test_valid_set.iloc[test_index]
    valid_set = test_valid_set.iloc[valid_index]
票数 3
EN

Stack Overflow用户

发布于 2018-09-05 04:53:46

是的,这正是我要做的--运行两次train_test_split()。首先可以考虑将训练集拆分出来,然后训练集可能会被分成不同的折叠线或阻挡线。

事实上,如果您最终使用包含内置交叉验证的scikit模型测试您的模型,您甚至可能不必再次显式运行train_test_split()。如果你使用(非常方便的) model_selection.cross_val_score函数,也是一样的。

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

https://stackoverflow.com/questions/40829137

复制
相关文章

相似问题

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