我正在尝试应用 kfold 方法,但我不知道如何访问生成的训练和测试集。在浏览了几个博客和 scikitlearn 用户指南后,人们唯一要做的就是打印训练和测试集。这可能适用于小型数据框,但对于较大的数据框则没有用。谁能帮我?
我正在使用的数据:https://github.com/ageron/handson-ml/tree/master/datasets/housing 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]
但这仅对生成最后一个数据集有用。我应该能够得到全部。
提前致谢。
AFAIK, KFold
(事实上,与交叉验证过程相关的所有内容)都是为了提供临时数据集,以便人们能够如您所说,即时使用它们来拟合和评估模型,如下所示scikit-learn 中每个数据分割的交叉验证指标 https://stackoverflow.com/questions/54201464/cross-validation-metrics-in-scikit-learn-for-each-data-split/54202609#54202609.
尽管如此,自从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)]
现在,对于每一个k
in range(n_splits)
, folds[k][0]
包含训练指标和folds[k][1]
相应的验证索引,所以你可以这样做:
X_train_1 = X[folds[0][0]]
X_test_1 = X[folds[0][1]]
等等。请注意,相同的索引适用于标签y
too.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)