4

私は2つのデータを持っています。fulldata1 つは49625x6 の数値データのデータセットである実際のもので、もう 1 つは 49625x1 という名前の target_class を持つそのデータのインデックスBook2です。

Book2 には、fulldata データセット エントリと一致するように何度も繰り返される 6 つの名前 (文字列) があります。Book2 を使用して、1000 サンプルの 25% が「青」で 75% が「赤」である fulldata から 1,000 サンプルを取得し、これを という名前の新しいサブサンプルに含めsampledataます。

MATLAB でこれを達成するにはどうすればよいですか?

疑似コード:

Book2 から 250 の青のサンプルを選択します。250 のランダムな「青」のサンプルを「選択」する方法がわからないか、わかり bluesample = indX(Book2, :)ませBook2(indX, :)ん。

Book2 から 750 の赤のサンプルを選択します。ここでも、750 のランダムな「赤」のサンプルを「選択」する方法がわからないか、ここでもわかり redsample = indX(Book2, ;)ませBook2(indX, :)ん。

青と赤のサンプルをサブサンプルに結合します。

subsample = join(bluesample, redsample)

subsample のインデックスを見つけて、fulldata から sampledata を作成します。

sampledata = subsample(indX(fulldata), :) This line is probably wrong

これは、2 つのデータセットのイメージです。

ここに画像の説明を入力してください

Book2 の各行は、fulldata の行と一致します。Book2はフルデータのインデックスであり、クラスのラベルが含まれています。

したがって、私のデータセットに関しては、次のように簡単に言うことができます。

Choose 250 random samples of the string "normal." from Book2 and log the row number.
Choose 750 random samples of the string "not normal." from Book2 and log the row number.
Combine the two random samples of row numbers together.
Make a new dataset (1000x6) using the combined row numbers (above) of fulldata.
4

1 に答える 1

1

strmatch を使用して「通常の」レコードを抽出します。

normIdx = strmatch('normal.', Book2);
normalSubset = fulldata(normIdx, :);

次に、250個のランダムな非反復整数のリストを生成するために、「非反復ランダム整数のmatlabリスト」をグーグルで検索し、最初の結果から:

p = randperm(size(normalSubset , 1));
p = p(1:250)-1;

では、ランダムに選択された 250 のノーマル レコードを取得します。

normalSample = normalSubset (p, :);

normalSample250 x 6 になります。今度は、'not normal' で同じことを行います。notNormalSample(750 x 6)を取得してから結合して取得します

sample = [normalSample ; notNormalSample ]

したがって、sampleすべての法線は非法線の前に表示されます。それらを混同したい場合は、randperm()もう一度使用します。

sample = sample(randperm(1000), :);
于 2012-11-13T07:40:40.980 に答える