2012-11-16 29 views
2

我有一個小問題,下面的代碼最後一行是具體的,我試圖找到我的「樣本」的類名稱,我的意思是我需要知道哪些正常和哪些smurf屬於我的1000x6樣本的每一行。匹配行樣本到類標籤

%% sampling 
normIdx = strmatch('normal.', Book2); 
normalSubset = fulldata(normIdx, :); 
normal = randperm(size(normalSubset , 1)); 
p = (normal(1:750)-1)'; 

% 
smurfIdx = strmatch('smurf.', Book2); 
smurfSubset = fulldata(smurfIdx, :); 
smurf = randperm(size(smurfSubset , 1)); 
a = (smurf(1:250)-1)'; 

% 
normalSample = normalSubset (p, :); 
smurfSample = smurfSubset (a, :); 

% 
sample = [normalSample ; smurfSample] 

% 
sample = sample(randperm(1000),:); 

% 
idx = [a ; p]; 
K1 = Book2(idx (sample==1), :) 

K1應等於1000個樣品類別標籤,其中750應該是正常和250應藍精靈,他們應該恰好correspnd到樣品中的同一條線上。 Book2包含類別標籤,我也有從其派生樣本的完整數據。

大氣壓K1導致:

Index exceeds matrix dimensions 

有可能只是在fulldata樣本的數據的匹配數據的一種簡單的方法,但林不知道是否有可能在fulldata重複數據...所以匹配已經結束,因爲sample是隨機的,所以我拋棄了我可以做什麼來將類標籤與抽樣進行匹配。

回答

1

這是你的意思嗎? :

% 
shuffle = randperm(1000); 
sample = sample(shuffle,:); 

% 
idx = [a ; p]; 
K1 = Book2(idx (shuffle), :); 
+0

嗯東西是不正確的在這裏,我tryed你的方法,但由於某種原因,其標籤的arent「正常」或「藍精靈」其他的事情......其他類的標籤我在第二冊......其假設只有750個正常標籤和250個smurf標籤,所以要麼沒有正確選擇正常,smurf或K1是錯誤的。 –

+0

這可能是因爲idx不在洗牌? –

+0

哦不,我看到了這個問題。這是因爲p和a僅涉及完整數據的子集,所以它們必須應用於Book2的子集。您需要從頭開始追蹤索引。是否有以Book2至fulldata的順序映射的1對1映射?如果有,那麼你只需要做什麼來完整數據到Book2,並且總是將你的randperms保存在一個變量中,以確保他們的fulldata和book2總是被混洗在一起 – Dan