2012-02-09 175 views
2

我想分層地將一個語料庫分成訓練&測試集Matlab - 多維數據的分層採樣

觀測數據點被佈置在矩陣A作爲

A=[16,3,0;12,6,4;19,2,1;.........;17,0,2;13,3,2] 

矩陣的每一列代表一個不同的功能。

在Matlab中,cvpartition(A,'holdout',p)函數要求A是一個向量。我怎樣才能用A作爲矩陣執行相同的操作,即結果集具有與原始語料庫中每個特徵大致相同的分佈。

+0

您的意思是使用cvpartition(A(:),'holdout',p)將使用A的所有值作爲向量還是您的意思是將cvpartition分別應用於矩陣的每一行? – tim 2012-02-09 07:28:05

+0

不,我不希望將A(:)作爲向量,因爲這裏的每列都表示一個獨特的物理特徵。我希望對矩陣A進行分割,使得所得到的分區(比如B1和B2)具有與A中大致相同的值分佈。爲了進一步闡明B1的列1中**值的分佈** = ** B2 **第1列中值的分佈** ** ** A **列第1列中值的分佈同樣適用於coulmn2&colum3 – 2012-02-09 07:45:54

回答

0

通過使用矩陣A而不是分組數據,您可以假定數據的隨機分區將返回具有相同列分佈的測試和訓練集。

總的來說,你在你的問題中做出的假設是存在A的分區,使得A(每列1)的每個邊際分佈在所有三個變量之間具有相同的分佈。不能保證這是真的。檢查矩陣的列是否相關。如果不是,只是對分區1,使用行索引來定義測試矩陣:

cv = cvpartition(A(:, 1), 'holdout', p); 
text_mat = A(cv.test, :); 

如果是相關的,你可能需要回去重新考慮你正在嘗試做的。