2012-02-09 170 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, :); 

如果是相关的,你可能需要回去重新考虑你正在尝试做的。