【问题标题】:how can I split data in 3 or more parts with sklearn如何使用 sklearn 将数据拆分为 3 个或更多部分
【发布时间】:2018-02-24 05:24:58
【问题描述】:

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

【问题讨论】:

    标签: python machine-learning scikit-learn cross-validation train-test-split


    【解决方案1】:

    您也可以多次使用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
    

    【讨论】:

      【解决方案2】:

      如果您想使用分层训练/测试拆分,可以使用StratifiedKFold in Sklearn

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

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

      【讨论】:

      • 感谢您的回答,但我想将数据集分成三部分,例如 [70%,20%,10%],StratifiedKFold 可能无济于事。
      • @loseryao 哦,对不起,我以为你的意思是分成 3 个不同的折叠,我会更新它。
      • 可能很聪明地打乱数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      相关资源
      最近更新 更多