Vielleicht können Sie sich das so vorstellen. Angenommen, Sie haben einen Datensatz mit 100 Stichproben, 90 in Klasse 'A' und 10 in Klasse 'B'. In diesem sehr unausgeglichenen Design können Sie, wenn Sie normale zufällige Gruppen bilden, auf sehr wenigen (oder NIEMALS NIEMALS!) Modellen der Klasse 'B' aufbauen. Wenn Sie ein Modell erstellen, das auf Daten trainiert wird, bei denen es so wenige oder gar keine Daten der anderen Klasse gibt, wie können Sie dann davon ausgehen, dass es die seltenere Gruppe effektiv vorhersagt? Die geschichtete Kreuzvalidierung ermöglicht eine Randomisierung, stellt jedoch auch sicher, dass diese unausgeglichenen Datensätze einige beider Klassen aufweisen.
Schauen wir uns ein Beispiel mit R-Code an, um Bedenken hinsichtlich der Verwendung eines geschichteten Lebenslaufs mit ausgewogeneren Datenmengen zu zerstreuen.
require(mlbench)
require(caret)
require(cvTools)
# using the Sonar dataset (208 samples)
data(Sonar)
# see the distribution of classes are very well balanced
prop.table(table(Sonar$Class))
> prop.table(table(Sonar$Class))
M R
0.5336538 0.4663462
# stratified
# set seed for consistency
# caret::createFolds does stratified folds by default
set.seed(123)
strat <- createFolds(Sonar$Class, k=10)
# non-stratified using cvTools
set.seed(123)
folds <- cvFolds(nrow(Sonar), K=10, type="random")
df <- data.frame(fold = folds$which, index = folds$subsets)
non_strat <- lapply(split(df, df$fold), FUN=function(x) x$index)
# calculate the average class distribution of the folds
strat_dist <- colMeans(do.call("rbind", lapply(strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
non_strat_dist <- colMeans(do.call("rbind", lapply(non_strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
strat_dist
> strat_dist
M R
0.5338312 0.4661688
non_strat_dist
> non_strat_dist
M R
0.5328571 0.4671429
Wie Sie sehen können, haben in einem Datensatz, der gut ausbalanciert ist, die Falten zufällig eine ähnliche Verteilung. Ein geschichteter Lebenslauf ist daher unter diesen Umständen lediglich eine Gewährleistungsmaßnahme. Um die Varianz anzugehen, müssten Sie jedoch die Verteilungen jeder Falte betrachten. Unter bestimmten Umständen (sogar ab 50-50) können Sie Foldings mit zufälligen Teilungen von 30-70 haben (Sie können den obigen Code ausführen und sehen, dass dies tatsächlich passiert!). Dies könnte zu einem schlechteren Modell führen, da es nicht genug von einer Klasse hatte, um es genau vorherzusagen, wodurch die Gesamt-CV-Varianz erhöht wird. Dies ist offensichtlich wichtiger, wenn Sie über "begrenzte" Stichproben verfügen, bei denen Sie mit größerer Wahrscheinlichkeit extreme Unterschiede in der Verteilung haben.
Bei sehr großen Datenmengen ist eine Schichtung möglicherweise nicht erforderlich, da die Falten groß genug sind, um wahrscheinlich immer noch mindestens einen guten Anteil der „selteneren“ Klasse zu enthalten. Es gibt jedoch wirklich keinen Rechenverlust und keinen wirklichen Grund, auf eine Schichtung zu verzichten, wenn Ihre Stichproben unausgewogen sind, egal wie viele Daten Sie meiner Meinung nach haben.