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

python machine-learning scikit-learn cross-validation

2509 观看

2回复

18 作者的声誉

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

作者: loseryao 的来源 发布者: 2017 年 9 月 15 日

回应 2


6

5377 作者的声誉

决定

如果要使用分层训练/测试拆分,则可以在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]

更新:要将数据拆分为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))])
作者: Mohammed Kashif 发布者: 2017 年 9 月 15 日

1

38 作者的声誉

您也可以train_test_split多次使用以实现此目的。第二次,在第一次调用的训练输出上运行它train_test_split

from sklearn.model_selection import train_test_split

def train_test_validate_stratified_split(features, targets, test_size=0.2, validate_size=0.1):
    # Get test sets
    features_train, features_test, targets_train, targets_test = train_test_split(
        features,
        targets,
        stratify=targets,
        test_size=test_size
    )
    # Run train_test_split again to get train and validate sets
    post_split_validate_size = validate_size / (1 - test_size)
    features_train, features_validate, targets_train, targets_validate = train_test_split(
        features_train,
        targets_train,
        stratify=targets_train,
        test_size=post_split_validate_size
    )
    return features_train, features_test, features_validate, targets_train, targets_test, targets_validate
作者: Nate Karasch 发布者: 2018 年 9 月 28 日
32x32