【发布时间】:2017-12-26 13:51:42
【问题描述】:
我正在尝试使用 StratifiedKFold 创建用于非 sklearn 机器学习工作流程的训练/测试/验证拆分。因此,DataFrame 需要被拆分,然后保持这种状态。
我正在尝试使用 .values 进行如下操作,因为我正在传递 pandas DataFrames:
skf = StratifiedKFold(n_splits=3, shuffle=False)
skf.get_n_splits(X, y)
for train_index, test_index, valid_index in skf.split(X.values, y.values):
print("TRAIN:", train_index, "TEST:", test_index, "VALID:", valid_index)
X_train, X_test, X_valid = X.values[train_index], X.values[test_index], X.values[valid_index]
y_train, y_test, y_valid = y.values[train_index], y.values[test_index], y.values[valid_index]
这失败了:
ValueError: not enough values to unpack (expected 3, got 2).
我通读了所有 sklearn 文档并运行了示例代码,但没有更好地理解如何在 sklearn 交叉验证场景之外使用分层 k 折叠拆分。
编辑:
我也试过这样:
# Create train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, stratify=y)
# Create validation split from train split
X_train, X_valid, y_train, y_valid = train_test_split(X_train, y_train, test_size=0.05)
这似乎可行,尽管我想我这样做会弄乱分层。
【问题讨论】:
-
您的问题到底是什么?这与您的预期有何不同?
-
感谢您的回复@RyanStout,我的错误 - 已更新错误消息。
标签: python pandas scikit-learn cross-validation data-science