Die Hilfe für crossvalind besagt, dass das von Ihnen verwendete Formular lautet: crossvalind(METHOD, GROUP, ...)
. In diesem Fall ist GROUP das z. die Klassenbezeichnungen Ihrer Daten. Also 1:11, da das zweite Argument hier verwirrend ist, weil es keinen Hinweis darauf gibt, dass zwei Beispiele dasselbe Label haben. Ich denke, das ist genug ungewöhnlich, dass Sie nicht überrascht sein sollten, wenn die Funktion etwas Seltsames tut.
Ich habe versucht zu tun:
numel(unique(crossvalind('KFold', rand(11, 1) > 0.5, 5)))
und es gab zuverlässig 5
als Ergebnis, das ist das, was ich erwarten würde; mein Beispiel würde einem Zwei-Klassen-Problem entsprechen (ich würde annehmen, dass Sie in der Regel etwas wie numel(unique(group)) <= numel(group)/folds
wollen) - meine Hypothese wäre, dass es versucht, ein Beispiel für jede Klasse in der K-ten Falte zu haben, und mindestens 2 Beispiele in jedem anderen, mit einem Unterschied zwischen Falten Größen von nicht mehr als 1 - aber ich habe nicht in den Code geschaut, um dies zu überprüfen.
Es ist möglich, dass Sie tun bedeuten:
crossvalind('KFold', 11, 5);
die 5 Falten für 11 Datenpunkte berechnen würde - dies nicht versucht, etwas klug mit Etiketten zu tun, so dass Sie sicher sein würde, dass es sei K Falten.
jedoch in Ihr Problem, wenn Sie wirklich nur sehr wenige Datenpunkte haben, dann ist es wahrscheinlich besser zu machen leave-one-out Kreuzvalidierung, die Sie mit tun könnte:
crossvalind('LeaveMOut', 11, 1);
obwohl eine bessere Methode wäre:
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