Belki bu şekilde düşünebilirsiniz. Diyelim ki 'A' sınıfında 90 ve 'B' sınıfında 100 olan 100 örnek içeren bir veri kümeniz var. Bu çok dengesiz tasarımda normal randomize gruplar yaparsanız, 'B' sınıfından az sayıda (veya EVEN NONE!) Model oluşturmaya başlayabilirsiniz. Diğer sınıfın çok az veya hatta hiç olmadığı yerlerde veri konusunda eğitilmiş bir model oluşturuyorsanız, daha nadir olan grubu etkili bir şekilde tahmin etmesini nasıl beklersiniz? Tabakalı çapraz doğrulama, randomizasyona izin verir, ancak aynı zamanda bu dengesiz veri setlerinin her iki sınıfın da birinden oluşmasını sağlar.
Tabakalı CV'yi daha 'dengeli' veri kümeleriyle kullanma hakkındaki endişelerinizi azaltmak için, R kodunu kullanan bir örneğe bakalım.
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
Gördüğünüz gibi, dengeli bir veri setinde katlar rastgele tesadüflerle benzer bir dağılıma sahip olacaktır. Bu nedenle tabakalı CV bu koşullarda basit bir güvence önlemidir. Bununla birlikte, varyansı ele almak için her katlamanın dağılımlarına bakmanız gerekir. Bazı durumlarda (50-50'den başlayarak bile) 30-70'lik bölünmüş rastgele şanslara sahip olabilirsiniz (yukarıdaki kodu çalıştırabilir ve bunun gerçekten olduğunu görebilirsiniz!). Bu, daha kötü performans gösteren bir modele yol açabilir, çünkü onu doğru şekilde tahmin etmek için yeterli bir sınıfa sahip olmadığından, genel CV değişkenliğini arttırır. Bu, dağıtımda çok aşırı farklılıklara sahip olma ihtimalinizin yüksek olduğu 'sınırlı' örneklere sahip olduğunuzda açıkça daha önemlidir.
Şimdi çok büyük veri kümelerinde tabakalaşma gerekli olmayabilir, çünkü katlamalar hala en azından 'nadir' sınıfının iyi bir oranını içerecek kadar büyük olacaktır. Ancak, benim kişisel verilerim ne olursa olsun verileriniz ne olursa olsun , numuneleriniz dengesizse , gerçekten hiçbir hesaplama kaybı ve katmanlaşmadan çekilmek için gerçek bir sebep yoktur.