crossvalindのヘルプによると、使用しているフォームは次のとおりcrossvalind(METHOD, GROUP, ...)
です。この場合、GROUP はデータのクラス ラベルなどです。したがって、2 番目の引数としての 1:11 は、2 つの例が同じラベルを持っていないことを示唆しているため、ここでは混乱を招きます。関数が何かおかしなことをしても驚くべきではないので、これは十分に珍しいことだと思います。
私はやってみました:
numel(unique(crossvalind('KFold', rand(11, 1) > 0.5, 5)))
そして、それは結果として確実に得5
られました。これは私が期待することです。私の例は、2 つのクラスの問題に対応します (一般的な規則として、次のようなものが必要になると思いますnumel(unique(group)) <= numel(group) / folds
)。折り畳みサイズの差が 1 以下で、少なくとも 2 つの例が 1 つおきに表示されますが、これを確認するためにコードを調べていません。
次のことを意図している可能性があります。
crossvalind('KFold', 11, 5);
これは、11 個のデータ ポイントに対して 5 つのフォールドを計算します。これは、ラベルを巧妙に処理しようとはしていないため、K 個のフォールドが存在することは確実です。
ただし、あなたの問題では、実際にデータポイントが非常に少ない場合は、次の方法で行うことができる、leave-one-out 交差検証を行う方がよいでしょう。
crossvalind('LeaveMOut', 11, 1);
ただし、より良い方法は次のとおりです。
for leave_out=1:11
fold_number = (1:11) ~= leave_out;
<code here; where fold_number is 0, this is the leave-one-out example. fold_number = 1 means that the example is in the main fold.>
end