【问题标题】:How do I access the datasets after running k-fold with scikit-learn?使用 scikit-learn 运行 k-fold 后如何访问数据集?
【发布时间】:2020-07-09 05:06:52
【问题描述】:

我正在尝试应用 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]

但这仅对生成最后一个数据集有用。我应该都能得到。

提前致谢。

【问题讨论】:

  • 访问数据集”是什么意思?访问它们有什么用?
  • @desertnaut 好吧,它可能意味着任何东西。最明显的是使用所有这些来运行模型。我想我可以在循环内做到这一点。但我希望能够拥有例如:X_train_1、X_test_1、X_train_2、X_test_2 等等......
  • @desertnaut 如果我愿意,基本上可以查看所有组合。我错过了什么吗?我的意思是,关于理论

标签: python scikit-learn k-fold


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 2021-05-23
    • 2017-02-24
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2015-05-22
    • 2017-01-09
    相关资源
    最近更新 更多