2016-04-24 6 views
0

私のデータにはpidという列があり、同じpidのレコードは列車テストの分割の間に漏れてはいけません。カスタム折りたたみによるネストされたクロスバリデーション

  • 内部層は、私は、元の列車のデータ+に外部モデルを構築列車データ
  • にクロスヴァル予測することによって、内部予測ベクトルを構築する - 私は、2層積層モデルが持っています私は、テスト・データのパフォーマンス

このプロセスは、X5を繰り返さなければならないを評価する内部予測ベクトル

  • 考えられる最も良い方法は、外層にpid % 25、内層にpid % 5と分割されていました。

    コードが煩雑で、非常にpythonicではありませんでした。それを行う良い方法はありますか?私はsklearn/pythonのきれいできれいな使い方が欠けているのでしょうか、あるいは私のデザインに根本的な欠陥がありますか?

    N = 5 
    
    for external_fold in range(N): 
    
        ex_test = [x for x in range(N**2) if external_fold*N <= x % (N**2) < (external_fold+1)*N] 
        ex_train = [x for x in range(N**2) if x not in ex_test] 
        ex_train_index = X[(X.pid % N**2).isin(ex_train)].index 
        ex_test_index = X[(X.pid % N**2).isin(ex_test)].index 
        ... 
        for internal_fold in range(N): 
         in_train_index = X[(X.pid % N)!=internal_fold].index 
         in_test_index = X[(X.pid % N)==internal_fold].index 
         # build a vector of internal model predictions 
    
        # build external model and assess performance 
    
  • +0

    ['skelarn.cross_validation.KFold'](http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html#sklearn.cross_validation.KFold)を使用してより良いアプローチかもしれません。 – ChrisP

    答えて

    1

    あなたがごく最近Scikit・ラーンで対処された2つのニーズを持って、そして次のリリースバージョンに含まれるべきである:相関サンプルと

    クロス検証戦略は、一緒

    保持しました

    新しいCV splitter classesには、同じpidの要素が同じテスト部分に含まれるべきであると考えられるケースを処理するように設計されたLabelKFoldLabelShuffleSplitが含まれています。

    ネストされたクロスバリデーション

    クロスバリデーションイテレータAPIは、クロスバリデーションネストされたより良いサポートに再設計されました。クロスバリデーション戦略コンストラクタにデータ依存のパラメータを渡す必要はなくなりました。したがって、GridSearchCVGridSearchCVにネストすると、それぞれ独自のcvパラメータが必要です。

    このAPIはまだ新鮮であり、変更が可能です。

    関連する問題