2012-02-09 15 views
2

コーパスをトレーニング&テストセットに層別に分割したいと思います。Matlab - 多次元データの層別サンプリング

観測データ点は、マトリックスの各列は別個の機能を表す

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

としてマトリックスAに配置されています。

Matlabでは、cvpartition(A,'holdout',p)関数はベクトルとしてAを必要とします。 Aと同じアクションをMatrixとして実行するにはどうすればよいですか。つまり、結果のセットは元のコーパスと同じように各フィーチャの分布がほぼ同じです。

+0

Aのすべての値をベクトルとして使用するcvpartition(A(:)、 'holdout'、p)を使用することを意味しますか?または、行列の各行にcvpartitionを別々に適用することを意味しますか? – tim

+0

いいえ、私はここで各列が別個の物理的な特徴を示すので、A(:)がベクトルとして取られることを望んでいません。結果のパーティション(B1とB2など)の値がAとほぼ同じ値になるように行列Aを分割したいと思います。B1 ** = **のcolumn1の値の分布をさらに明確にするためにB2 **の列1の値の分布= ** A **の列1の値の分布また、coulmn2&colum3も同じ値を保持する必要があります –

答えて

0

グループ化されたデータではなく、行列Aを使用することで、データのランダムなパーティションが同じ列分布を持つテストおよび列車セットを返すことを前提としています。

一般的に、あなたの質問では、Aの境界分布(列あたり1)が3つの変数すべてで同じ分布になるようなAのパーティションがあると仮定しています。これが本当であるという保証はありません。行列の列に相関があるかどうかを確認します。そうでない場合は、単にパーティション1に、テスト行列を定義する行インデックスを使用します。彼らが相関している場合は

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

、あなたは戻って何をしようとする再検討する必要があるかもしれません。

関連する問題