1

以下は、データセットからランダム順列のセット数を選択する例です。remaainderを使用して新しいデータセットを作成するにはどうすればよいですか。たとえば、以下では49402(約10%)を選択しUnseenTestdata、これにちなんで名付けられたデータセットを作成します。残りは、という名前の新しいデータセットに入れtestdataます。

pointsToPick = 49402;  %# Numbers to pick
rVec = randperm(494021);   %# Random permutation of datapoint indices (N=494021 in this case)  

UnseenTestdata = fulldata(rVec(1:pointsToPick),:); %# Random sample

Unseentestdataからfulldataを引いたもの=適切な名前のtestdataというデータセットの残りの部分。

フルデータセットのサイズは494021x6で、そのうち49402x6をフルデータからランダムに選択します。次に、fulldataからunseentestdataを差し引いたものを取得する必要があります。

Barnabas Szabolcsは、次のテストケースの回答を追加しました。

fulldata = [1 2; 3 4; 5 6; 7 8];
rVec = randperm(4);  
pointsToPick=2;
unseen = fulldata(rVec(1:pointsToPick),:); 
testdata = fulldata(rVec(pointsToPick:length(rVec)),:); 

ただし、これは機能しません。結果を画面にダンプしました。

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

スクリーンダンプで見えないデータ=3,4と7,8に気付いた場合でも、テストデータで気付いた場合は7,8が残ります。

fulldata=の場合

1,2
3,4
5,6
7,8

そして、この場合、2つのランダムな行を選択します。見えない行は次のとおりです。

row
3,4
7,8

次に、残っているものは次のようになります。

1,2
5,6

ただし、例のテストダンプの画面に気付いた場合、testdataには次の行があります。

7,8

サンプルテストが機能しないことを示しています。

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、解決策は

testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:);

簡単なテストケース:

fulldata = [1 2; 3 4; 5 6; 7 8;10 9];
rVec = randperm(4);  // gives me first time [4 2 3 1 5]
pointsToPick=2;
unseen = fulldata(rVec(1:pointsToPick),:); // [7 8; 3 4]
// length(rVec) is 5
testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:); // [5 6; 1 2; 10 9]

fulldataある意味で= unseen(setplus)であることがはっきりとわかりますtestdata。配列はc++の場合とは異なり、1から上にインデックスが付けられるため、「+ 1」が必要であることに注意してください。したがって、最後のインデックスはではありlengthませんlength-1

これを使用して、状況が正しいかどうかを確認できます。

 isequal(sort([unseen; test]), sort(full_data)) // should be true
于 2012-11-17T11:49:26.687 に答える