ক্রস-ভ্যালিডেশন (Cross-Validation)
ভাবুন তো, একটি ম্যাজিক বা জাদুর শো-এর জন্য কিছু জাদুকর রিহার্সেল (rehearsal) করছে। তারা নিজেদের মধ্যে খুব সৎ একটি প্রতিক্রিয়া বা ফিডব্যাক (feedback) চায়, কিন্তু প্রতিদিন বাইরে থেকে কোনো বিচারক নিয়ে আসা তাদের পক্ষে সম্ভব নয়। তাই তারা একটি চমৎকার বুদ্ধি বের করলো: প্রতিটি রিহার্সেলে, তাদের মধ্য থেকে একজন কেবল বসে বসে দেখবে, আর বাকিরা জাদুর কৌশল দেখাবে। সোমবারে হয়তো একজন দেখবে, মঙ্গলবারে আরেকজন, আর বুধবারে ভিন্ন আরেকজন।
এভাবে পুরো সপ্তাহ শেষে, সবাই অন্তত একবার দর্শক হিসেবে এবং বাকি সময়গুলো মূলত জাদুকর হিসেবে পারফর্ম করতে পারবে। এর ফলে তারা বিভিন্ন দৃষ্টিভঙ্গি থেকে একে অপরের কৌশল নিয়ে অনেক ভালো ফিডব্যাক পাবে এবং এখানে কারও একার মতামতই সবকিছুর ওপর প্রভাব ফেলতে পারবে না।
সংক্ষেপে ক্রস-ভ্যালিডেশন (cross-validation) জিনিসটি মূলত ঠিক এমনভাবেই কাজ করে। এক্ষেত্রে আপনার মডেলটিকে কেবল ডেটার একটি অংশের ওপর টেস্ট বা পরীক্ষা না করে, আপনি মূলত এটিকে কয়েকটি অংশে ভাগ করে টেস্ট করেন, যাতে প্রতিটি ডেটা পয়েন্টই কোনো না কোনো সময় টেস্ট সেটে (test set) যাওয়ার সুযোগ পায়।
একটি সিঙ্গেল বা সাধারণ ট্রেনিট/টেস্ট স্প্লিট (single train/test split)-এর সমস্যা
আপনি যখন আপনার ডেটাকে ৮০/২০ (80/20)-এ ভাগ করেন, তখন আপনি মূলত বিশ্বাস করে নেন যে আপনি যে ২০% বেছে নিয়েছেন তা সম্পূর্ণ ডেটার প্রতিনিধিত্ব (representative) করবে। কিন্তু যদি দুর্ভাগ্যবশত সবচেয়ে সহজ উদাহরণগুলো টেস্ট সেটে গিয়ে পড়ে? তাহলে হয়তো আপনার মডেলটিকে দেখে অনেক দারুণ মনে হবে — কিন্তু এটি আসলে সম্পূর্ণ মিথ্যে একটি ফলাফল দেবে। আবার যদি সবচেয়ে কঠিন উদাহরণগুলো টেস্ট সেটে চলে যায়? তখন আপনার মডেলটি আসলেই ভালো হওয়া সত্ত্বেও সেটিকে দেখে একেবারে বাজে মনে হবে।
তাই একটি সিঙ্গেল স্প্লিট হলো অনেকটা কেবল একজন মানুষকে আপনার রেস্টুরেন্ট নিয়ে রিভিউ বা মতামত দিতে বলার মতো। তিনি হয়তো এটি খুব পছন্দ করতে পারেন, আবার খুব অপছন্দও করতে পারেন — অর্থাৎ একজনের মতামতের ওপর আসলে ভরসা করা যায় না।
কে-ফোল্ড ক্রস-ভ্যালিডেশন (K-Fold Cross-Validation)
এর সমাধান হলো এটি। আপনার ডেটাকে k সংখ্যক সমান অংশে (যাদেরকে ফোল্ড বা fold বলা হয়) ভাগ করুন। এরপর:
- ফোল্ড ১-কে টেস্ট সেট হিসেবে ব্যবহার করুন, আর ফোল্ড ২-৫-এ ট্রেইন করুন
- ফোল্ড ২-কে টেস্ট সেট হিসেবে ব্যবহার করুন, আর ফোল্ড ১, ৩-৫-এ ট্রেইন করুন
- ফোল্ড ৩-কে টেস্ট সেট হিসেবে ব্যবহার করুন, আর ফোল্ড ১-২, ৪-৫-এ ট্রেইন করুন
- ...এভাবে প্রতিটি ফোল্ড একবার টেস্ট সেট হিসেবে কাজ না করা পর্যন্ত চলতে থাকুন
এখন আপনার কাছে k সংখ্যক আলাদা অ্যাকুরেসি স্কোর (accuracy scores) থাকবে। সবগুলোর গড় বা এভারেজ বের করুন, এবং এটি আপনার মডেলের পারফরম্যান্স সম্পর্কে অনেক বেশি নির্ভরযোগ্য বা রিলায়েবল (reliable) একটি ধারণা বা অনুমান দিতে পারবে।
অ্যাকশনে কে-ফোল্ড ক্রস-ভ্যালিডেশন (K-Fold Cross-Validation in Action)
ক্রস-ভ্যালিডেশনের ধরন (Flavors of cross-validation)
- ৫-ফোল্ড বা ১০-ফোল্ড সিভি (5-Fold or 10-Fold CV) — এটি সবচেয়ে সাধারণ। এতে সময় এবং নির্ভরযোগ্যতার মধ্যে খুব ভালো একটি ব্যালেন্স বা ভারসাম্য থাকে।
- লিভ-ওয়ান-আউট বা LOO (Leave-One-Out) — এখানে প্রতিটি স্যাম্পল নিজেই একেকটি ফোল্ড হিসেবে কাজ করে। এটি সবচেয়ে নিখুঁত ফলাফল দিলেও এটি অনেক বড় ডেটাসেটের জন্য মারাত্মক ধীরগতির (আপনাকে n সংখ্যক আলাদা আলাদা মডেল ট্রেইন করতে হয়!)।
- স্ট্র্যাটিফাইড কে-ফোল্ড (Stratified K-Fold) — এটি নিশ্চিত করে যে প্রতিটি ফোল্ডে যেন ক্লাসগুলোর অনুপাত একই থাকে। আপনার ডেটা যদি ইমব্যালেন্সড বা ভারসাম্যহীন হয় (যেমন: ৯৫% স্ক্যাম নয়, ৫% স্ক্যাম-এর মতো), তবে এটি ব্যবহার করা খুবই জরুরি।
কখন এটি ব্যবহার করবেন?
যখন আপনি মডেলগুলোর তুলনা (comparing models) করছেন বা হাইপারপ্যারামিটার টিউন (tuning hyperparameters) করছেন, তখন ক্রস-ভ্যালিডেশন (cross-validation) ব্যবহার করা খুবই জরুরি। যদি একটি সাধারণ বা সিঙ্গেল স্প্লিটের ক্ষেত্রে মডেল এ (Model A) ৯২% এবং মডেল বি (Model B) ৯১% পায়, তবে ওইটুকু পার্থক্য মূলত কোনো নয়েজের কারণেও হতে পারে। কিন্তু ৫টি ভিন্ন ভিন্ন ফোল্ডের সবকটিতেই যদি মডেল এ (Model A) ক্রমাগত মডেল বি-কে (Model B) হারিয়ে দেয়, তবে আপনি অনেক বেশি নিশ্চিত হতে পারবেন যে সত্যিই মডেল এ ভালো পারফর্ম করছে।
Key Metrics
ছোট কুইজ
পড়া চালিয়ে যান