সম্ভবত আপনি এটি এইভাবে চিন্তা করতে পারেন। ধরা যাক আপনার কাছে এমন একটি ডেটাসেট রয়েছে যেখানে 100 টি নমুনা রয়েছে, ক্লাস 'এ' 90 এবং ক্লাস 'বি' তে 10 রয়েছে। এই খুব ভারসাম্যহীন ডিজাইনে আপনি যদি সাধারণ এলোমেলোভাবে করা গোষ্ঠীগুলি করেন তবে আপনি 'বি' শ্রেণি থেকে অল্প সংখ্যক (বা ইভেন নন!) দিয়ে বিল্ডিং মডেলগুলি তৈরি করতে পারেন। আপনি যদি এমন কোনও মডেল তৈরি করছেন যা অন্যান্য ক্লাসের যেখানে খুব অল্প, বা এমনকী কিছু নেই এমন ডেটা সম্পর্কে প্রশিক্ষিত আছে আপনি কীভাবে এটি বিরল দলের কার্যকরভাবে পূর্বাভাসের আশা করতে পারেন? স্তরযুক্ত ক্রস-বৈধকরণ র্যান্ডমাইজেশনের জন্য অনুমতি দেয় তবে এই ভারসাম্যহীন ডেটাসেটগুলিকে উভয় শ্রেণীর কিছু রয়েছে তাও নিশ্চিত করে।
আরও 'সুষম' ডেটাসেটের সাহায্যে স্ট্র্যাটেড সিভি ব্যবহারের বিষয়ে উদ্বেগ প্রশমিত করতে, আসুন আর কোড ব্যবহার করে একটি উদাহরণ দেখুন।
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
আপনি দেখতে পাচ্ছেন যে কোনও ডেটাসেটে যা ভালভাবে ভারসাম্যযুক্ত তাতে ভাঁজগুলি এলোমেলো সুযোগের মাধ্যমে একই রকম বিতরণ করবে। সুতরাং স্তরিত সিভি হ'ল এই পরিস্থিতিতে কেবল একটি আশ্বাসের ব্যবস্থা। তবে, বৈচিত্রটি সম্বোধন করতে আপনার প্রতিটি ভাঁজগুলির বিতরণটি দেখতে হবে। কিছু পরিস্থিতিতে (এমনকি 50-50 থেকে শুরু করে) আপনার এলোমেলো সুযোগ দ্বারা 30-70 বিভাজনযুক্ত ভাঁজ থাকতে পারে (আপনি উপরের কোডটি চালাতে পারেন এবং এটি আসলে সুখী দেখতে পারেন!)। এটি আরও খারাপ পারফর্মিং মডেলের দিকে নিয়ে যেতে পারে কারণ এর কাছে সঠিকভাবে পূর্বাভাস দেওয়ার মতো পর্যাপ্ত পরিমাণে এক শ্রেণীরও ছিল না যার ফলে সামগ্রিক সিভি বৈকল্পিকতা বৃদ্ধি পায়। আপনার 'সীমিত' নমুনাগুলি থাকাকালীন আপনার বিতরণে খুব চরম পার্থক্য হওয়ার সম্ভাবনা বেশি থাকলে এটি স্পষ্টতই বেশি গুরুত্বপূর্ণ।
এখন খুব বড় ডেটাসেটের সাহায্যে স্ট্র্যাটিফিকেশন প্রয়োজন হতে পারে না কারণ ভাঁজগুলি যথেষ্ট পরিমাণে 'বিরল' শ্রেণীর কমপক্ষে একটি ভাল অনুপাত থাকতে পারে be তবে, আপনার ব্যক্তিগত মতামত আপনার কাছে যতটা ডেটা থাকুক না কেন আপনার নমুনাগুলি ভারসাম্যহীন না হলে সত্যিই কোনও গণনামূলক ক্ষতি এবং স্তরবদ্ধতা ত্যাগের সত্যিকারের কারণ নেই।