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

Python 如何使用sklearn将数据拆分为3个或更多部分,python,machine-learning,scikit-learn,cross-validation,train-test-split,Python,Machine Learning,Scikit Learn,Cross Validation,Train Test Split,我想将数据分为训练、测试和验证数据集,这些数据集是分层的,但sklearn只提供交叉验证。训练、测试和验证数据集只能分为两部分。 如果我想这样做,我应该怎么做如果你想使用分层训练/测试分割,你可以使用 假设X是您的特征,y是您的标签,基于以下示例: 更新:要将数据拆分为3个不同的百分比,可以这样使用: X_train, X_test, X_validate = np.split(X, [int(.7*len(X)), int(.8*len(X))]) y_train, y_test, y_va

我想将数据分为训练、测试和验证数据集,这些数据集是分层的,但sklearn只提供交叉验证。训练、测试和验证数据集只能分为两部分。
如果我想这样做,我应该怎么做如果你想使用分层训练/测试分割,你可以使用

假设
X
是您的特征,
y
是您的标签,基于以下示例:

更新:要将数据拆分为3个不同的百分比,可以这样使用:

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))])

您还可以多次使用
train\u test\u split
来实现此目的。第二次,在第一次调用
train\u test\u 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

谢谢您的回答,但我想将数据集分成三部分,如[70%,20%,10%],分层折叠可能没有帮助。@loseryao哦,对不起,我以为您的意思是分成3个不同的折叠,我会更新它。将数据重新排列可能是明智的。
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