6

scikit-learn でシャッフルされた層別 k 分割交差検証を実行する組み込みの方法はありますか? これは最も一般的な CV メソッドの 1 つですが、これを行うための組み込みメソッドが見つからないことに驚いています。

cross_validation.KFold()シャッフルフラグがあるのを見ましたが、階層化されていません。残念ながらcross_validation.StratifiedKFold()、 にはそのようなオプションcross_validation.StratifiedShuffleSplit()がなく、ばらばらの折り目を生成しません。

何か不足していますか?これは計画されていますか?

(明らかに、これを自分で実装できます)

4

4 に答える 4

5

のシャッフル フラグcross_validation.StratifiedKFoldは、現在のバージョン 0.15 で導入されました。

http://scikit-learn.org/0.15/modules/generated/sklearn.cross_validation.StratifiedKFold.html

これは変更ログで見つけることができます:

http://scikit-learn.org/stable/whats_new.html#new-features

cross_validation.StratifiedKFold のシャッフル オプション。ジェフリー・ブラックバーン著。

于 2014-07-25T17:42:06.997 に答える
1

これは、層化シャッフルをトレーニング セットとテスト セットに分割した私の実装です。

import numpy as np

def get_train_test_inds(y,train_proportion=0.7):
    '''Generates indices, making random stratified split into training set and testing sets
    with proportions train_proportion and (1-train_proportion) of initial sample.
    y is any iterable indicating classes of each observation in the sample.
    Initial proportions of classes inside training and 
    test sets are preserved (stratified sampling).
    '''

    y=np.array(y)
    train_inds = np.zeros(len(y),dtype=bool)
    test_inds = np.zeros(len(y),dtype=bool)
    values = np.unique(y)
    for value in values:
        value_inds = np.nonzero(y==value)[0]
        np.random.shuffle(value_inds)
        n = int(train_proportion*len(value_inds))

        train_inds[value_inds[:n]]=True
        test_inds[value_inds[n:]]=True

    return train_inds,test_inds


y = np.array([1,1,2,2,3,3])
train_inds,test_inds = get_train_test_inds(y,train_proportion=0.5)
print y[train_inds]
print y[test_inds]

このコードは次を出力します。

[1 2 3]
[1 2 3]
于 2014-12-10T22:25:10.783 に答える
-3

私の知る限り、これは実際に scikit-learn で実装されています。

""" 階層化された ShuffleSplit 交差検証反復子

トレーニング テスト セットのデータを分割するためのトレーニング/テスト インデックスを提供します。

この交差検証オブジェクトは StratifiedKFold と ShuffleSplit をマージしたもので、層化されたランダム化されたフォールドを返します。フォールドは、各クラスのサンプルの割合を維持することによって作成されます。

注: ShuffleSplit 戦略と同様に、階層化されたランダム分割は、すべてのフォールドが異なることを保証するものではありませんが、これはかなり大きなデータセットでは可能性が高いです。"""

于 2013-06-05T21:59:39.910 に答える