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