如何使用sklearn将数据拆分为3个或更多部分

los*_*yao 3 python machine-learning scikit-learn cross-validation

我想将数据拆分为训练,测试和验证数据集,这些数据集是分层的,但sklearn只提供cross_validation.train_test_split,它只能分为2个部分.如果我想这样做,我该怎么办?

Moh*_*hif 6

如果您想使用分层训练/测试分裂,您可以在Sklearn中使用StratifiedKFold

假如X是你的特点和y是你的标签的基础上,例如在这里:

from sklearn.model_selection import StratifiedKFold
cv_stf = StratifiedKFold(n_splits=3)
for train_index, test_index in skf.split(X, y):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)

更新:要将数据分成3个不同的百分比,使用numpy.split()可以这样做:

X_train, X_test, X_validate  = np.split(X, [int(.7*len(X)), int(.8*len(X))])
y_train, y_test, y_validate  = np.split(y, [int(.7*len(y)), int(.8*len(y))])
Run Code Online (Sandbox Code Playgroud)