在使用scikitlearn运行kfold后,如何访问数据集?

2024-03-29 07:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我目前所在的位置:

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]

但这只在获取生成的最后一个数据集时有用。我应该能得到所有的

提前谢谢


Tags: 数据方法用户httpstestindex指南train
1条回答
网友
1楼 · 发布于 2024-03-29 07:27:04

AFAIK,KFold(事实上,所有与交叉验证过程相关的内容)都是为了提供临时数据集,这样,正如您所说,您就可以动态地使用它们进行拟合&;如Cross-validation metrics in scikit-learn for each data split所示评估模型

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

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]相应的验证索引,因此您可以执行以下操作:

X_train_1 = X[folds[0][0]]
X_test_1 = X[folds[0][1]]

等等。注意,同样的索引也适用于标签y

相关问题 更多 >