0

16のクラスに割り当てられた50000個の観測値の完全なデータセットがあります。ここで、たとえば完全なデータの70%のサンプルを描画したいのですが、MATLABで各クラスから同じ数のサンプルを取得したいと思います(もちろん、一部のクラスの数が必要より少ないため、可能であれば)

これを実行できるMATLAB関数はありますか、それとも自分で新しい関数をプログラムする必要がありますか?ここで時間を節約しようとしています。

私は見つけましcvpartitionたが、私が知る限り、これは元のデータセットと同じクラス分布のサンプルを取得するためにのみ使用でき、均一に分散されたサンプルは使用できません。

ご協力ありがとうございました!

4

1 に答える 1

0

それほど難しいことではありません。観測値がベクトル内にあるとしましょうobservations。その後、あなたはすることができます

fraction = 0.7;

classes = unique(observations);
nObs = length(observations);
nClasses = length(classes);
nSamples = round(nObs * fraction / nClasses);

for ii = 1:nClasses
    idx = observations == classes(ii);
    samples((ii-1)*nSamples+1:ii*nSamples) = randsample(observations(idx), nSamples);
end

これsamplesは、サンプリングされた観測値を含む長さのベクトルでありnClasses * nsamples、各クラスからの数は同じです。

現時点では、クラスの1つに少なくともnSamples観測値が含まれていない場合は失敗します。'replace','true'最も簡単な修正は、への呼び出しに追加の引数を追加するrandsampleことです。これにより、選択された後に各観測値を置き換えるように指示されます。

于 2013-03-27T10:52:40.697 に答える