2017-08-27 74 views
1

我有一个数据框,其中有一列给出了聚类,我想在每个聚类中执行一个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学习包装器,由于这确实一个平局与更换,我可以用一个平局,无需更换。

回答

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] 
+0

这正是我所需要的,非常感谢! – ysearka

相关问题