1. ホーム
  2. python

[解決済み] クロスバリデーションなどのために、データセットをトレーニング用とテスト用に分割するにはどうしたらいいですか?

2022-09-06 05:45:30

質問

NumPyの配列をランダムにトレーニング用とテスト/検証用のデータセットに分割する良い方法は何でしょうか?何か似たような cvpartition または crossvalind 関数を使用することができます。

どのように解決するのですか?

データセットを一度2つに分割したい場合は numpy.random.shuffle とするか、あるいは numpy.random.permutation で、インデックスを追跡する必要があります (再現性を高めるため、ランダムシードを固定することを忘れないでください)。

import numpy
# x is your dataset
x = numpy.random.rand(100, 5)
numpy.random.shuffle(x)
training, test = x[:80,:], x[80:,:]

または

import numpy
# x is your dataset
x = numpy.random.rand(100, 5)
indices = numpy.random.permutation(x.shape[0])
training_idx, test_idx = indices[:80], indices[80:]
training, test = x[training_idx,:], x[test_idx,:]

いろいろな方法があります。 は、クロスバリデーションのために同じデータセットを繰り返し分割する多くの方法があります。それらの多くは で利用可能です。 sklearn ライブラリ (k-fold, leave-n-out, ...) を利用することができます。 sklearn には、より高度な "層別サンプリング"。 のような、いくつかの特徴に関してバランスの取れたデータのパーティションを作成する方法も含まれます。