【问题标题】:How can we subsample a pandas dataframe within every value of a column我们如何在列的每个值中对 pandas 数据框进行二次采样
【发布时间】:2018-02-04 19:28:12
【问题描述】:

我有一个数据框,其中有一列给出集群,我想在训练中执行具有相同分数的 kfold,并在每个集群中进行测试。

我知道我可以使用以下代码自己完成:

nb_fold = 10
for i in range(nb_fold):

    X_train= X.groupby('Cluster').apply(lambda x: x.sample(frac = 1/nb_fold))
    X_train.index = temp.index.droplevel(0)

    Y_train = Y.loc[X_train.index]

    X_eval, Y_eval = X.drop(X_train.index), Y.drop(Y_train.index)

但我想知道是否有一个 scikit learn 包装器,因为它会进行有替换的平局,而我可以使用没有替换的平局。

【问题讨论】:

    标签: python pandas scikit-learn cross-validation


    【解决方案1】:

    您似乎需要StratifiedKFold。它通常有助于在分类任务的各个折叠中保持类的分布相同。但是您可以在集群标签上进行分层以达到预期的效果。

    from sklearn.model_selection import StratifiedKFold
    
    skf = StratifiedKFold(n_splits=10)
    for train_ind, eval_ind in skf.split(X, X['Cluster']):
        X_train, Y_train = X.iloc[train_ind, :], Y.iloc[train_ind]
        X_eval, Y_eval = X.iloc[eval_ind, :], Y.iloc[eval_ind]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 2013-01-13
      • 2014-11-10
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多