2012-11-16 23 views
0

我有一個前面的問題here,我想即時遇到問題,因爲我無法同時洗牌樣本數據和樣本數據(idx)的指數。randperm或shuffle在同一時間的兩個數據集

我有一個名爲fulldata的數據集,其中包含49行6列,然後我有另一個數據集是全數據(Book2)的類標籤,其中包含許多類標籤,它們與完整數據中的確切行相對應。

我想從fulldata(normal。和smurf。)中選擇兩個類標籤,其中我需要750個普通行和250個smurf行。

然後我想隨機洗牌新的樣本數據(1000x6)。

到目前爲止,這是管理。但後來我被卡住了......丹幫助了上一個問題,但後來我注意到k1輸出Book2的其他一些類標籤,例如海王星等,不應該是這樣的...... K1應該只包含smurf和普通類標籤。

爲什麼我問這個是因爲我想用貝葉斯分類器在MATLAB和爲了使用它,我需要的原因:

Test_Data (unseen data) 
Trainning_data (This is the sample data im trying to create above) 
Target_class (this is the class labels that match exactly each row in sample data) 
+2

您能否重新解釋一下它,以便更清楚地知道您到底在找什麼? –

+0

同時洗牌兩個數據集?我不能想出另一種方式來重述它。 –

+0

也許你展示的東西看起來像你的輸入,並顯示你想要的輸出數據。 (小規模或只有幾行) –

回答

2

我想你想

idx = [smurfIdx(a);normIdx(p)]; 

然後確保你使用@從以前的問題丹的建議,即

shuffle = randperm(1000); 
sample = sample(shuffle,:); 
K1 = Book2(idx (shuffle), :); 
1

問題的措辭是有些模糊,所以不是清楚你卡在哪裏。然而,我冒昧地回顧了你以前的問題(thisthis),所以這裏是我的解決你的問題的嘗試:

爲了這個答案的目的,我們先生成一個隨機數據集,類似於你的:

classes = {'normal.', 'smurf.', 'neptune.', 'eject.', 'portsweep.'}; 
fulldata = ceil(1e3 * rand(49000, 6)); 
Book2 = {classes{ceil(numel(classes) * rand(size(fulldata, 1), 1))}}'; 

允許隨機選擇750行對應「標準」標籤和250行對應「smurf」標籤。但是,您應該創建一個隨機索引向量,並使用它來索引fulldataBook2數組,如下所示,而不是將數據本身應用randperm,並選擇前N個值(與您之前的問題一樣)

idxnormal = strmatch('normal.', Book2);   % # Find normals 
idxnormal = idxnormal(randperm(numel(idxnormal))); % # Random shuffle of normals 
idxsmurf = strmatch('smurf.', Book2);    % # Find smurfs 
idxsmurf = idxsmurf(randperm(numel(idxsmurf))); % # Random shuffle of smurfs 
idx = [idxnormal(1:750); idxsmurf(1:250)];   % # 750 normals and 250 smurfs 
idx = idx(randperm(numel(idx)));     % # Random shuffle 

idx現在持有隨機索引到fulldata /「第二冊」,這僅對應於「正常」或「藍精靈」的標籤。現在讓我們用相應的標籤檢索數據的一個子集:

subsetdata = fulldata(idx, :); 
K1 = Book2(idx); 
+0

我可能已經發現使用上述的問題,[請參閱此處的新問題](http://stackoverflow.com/questions/13426665/sample-data-causing-problems-with -naive-bayes-classifier)不確定它是抽樣還是分類器。 –