

以下のように、scikit-learnの関数train_test_splitを用いると、

[code]

    dataset_train, dataset_test = train_test_split(dataset, train_size=0.8)
    
[/code]

データセットを訓練データとテストデータに分割はしてくれるのですが、  
クラス数が多い（例えば100クラス）場合だと、  
訓練データとテストデータの各々のクラス数が異なる時があります。  
例えば訓練データに含まれるクラス数は100である一方、  
テストデータのそれは98となってしまうことがあります。

train_test_splitでは、ランダムシャッフルしてsplitしているだけなので、  
クラスに含まれるデータ数がアンバランスな場合、このようなことが起きると思われます。

クラス数もちゃんと保つように、データを分割するには、  
どのようにすれば良いでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2016-10-05T06:12:11.420
29368
2017-01-19T14:59:19.663
12874
question
python scikit-learn
Scikit-learnでクラス数を考慮してデータを分割したい


推測ですが，こういう事ですか？

[code]

    dataset_train, dataset_test = train_test_split(dataset, stratify=dataset, train_size=0.8)
    
[/code]


CC BY-SA 3.0
2016-11-29T10:26:48.293
30771
2016-11-29T10:26:48.293
19772
29368
answer


クラス比例を保ちながら分割するには`StratifiedShuffleSplit`を[使用して下さい](http://scikit-
learn.org/stable/modules/generated/sklearn.model_selection.StratifiedShuffleSplit.html#sklearn.model_selection.StratifiedShuffleSplit)。


CC BY-SA 3.0
2016-12-10T05:30:32.313
31071
2016-12-10T07:01:58.337
2016-12-10T07:01:58.337
19040
19040
29368
answer