首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用scikit-learn运行k-fold后访问数据集?

如何在使用scikit-learn运行k-fold后访问数据集?
EN

Stack Overflow用户
提问于 2020-03-29 00:12:18
回答 1查看 432关注 0票数 2

我正在尝试应用kfold方法,但我不知道如何访问生成的训练和测试集。在浏览了几个博客和scikitlearn用户指南之后,人们所做的唯一一件事就是打印训练和测试集。这对于较小的数据帧可能有效,但对于较大的数据帧则没有用处。有谁可以帮我?

我使用的数据:https://github.com/ageron/handson-ml/tree/master/datasets/housing

我现在所在的位置:

代码语言:javascript
复制
X = housing[['total_rooms', 'total_bedrooms']]
y = housing['median_house_value']

kf = KFold(n_splits=5) 

for train_index, test_index in kf.split(X):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

但这只对生成最后一个数据集有用。我应该能把所有的都拿到。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-29 01:19:46

AFAIK、KFold (以及实际上与交叉验证过程相关的所有内容)旨在提供临时数据集,因此,正如您所说,可以使用它们动态地拟合和评估模型,如Cross-validation metrics in scikit-learn for each data split中所示。

尽管如此,由于Kfold.split()会生成Python生成器,因此您可以使用生成的索引来获得永久子集,尽管需要一些手动操作。以下是波士顿数据的一个示例:

代码语言:javascript
复制
from sklearn.model_selection import KFold
from sklearn.datasets import load_boston

X, y = load_boston(return_X_y=True)
n_splits = 3
kf = KFold(n_splits=n_splits, shuffle=True)

folds = [next(kf.split(X)) for i in range(n_splits)]

现在,对于range(n_splits)中的每个kfolds[k][0]包含训练指标,folds[k][1]包含相应的验证指标,因此您可以这样做:

代码语言:javascript
复制
X_train_1 = X[folds[0][0]]
X_test_1 = X[folds[0][1]]

诸若此类。请注意,相同的索引也适用于标签y

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

https://stackoverflow.com/questions/60903295

复制
相关文章

相似问题

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