2017-08-27 72 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

相關問題