৮.১. কি শিখলাম আমরা?

সত্যিকারের প্রজেক্ট নিয়ে কাজ করতে গিয়ে প্রায় সবকিছু দেখাতে পেরেছি আপনাদের। এটা ঠিক - মেশিন লার্নিং শিখতে যেই “সাতটা স্টেপ” লাগে তার প্রায় সবগুলোই স্পর্শ করেছি কোন না কোন পর্যায়ে। অনেকে বলবেন ৩ অথবা ৫ ধাপ - তবে আমার মতে শেখার জন্য দরকার ৭ ধাপ। একটু ভেতরে ঢুকে। একটা জিনিস বলে রাখা ভালো। আমাদের অনেক কাজ মানে ষ্টেপের ভেতরের কাজ চলেছে পাশাপাশি। এটা না হলে ওটা হবে না সেরকম ডিপেন্ডেন্সি থাকলেও সেটা কমিয়ে নিয়ে এসেছি এখানে। এক ষ্টেপের কাজ যে অন্য স্টেপে হয়নি সেটাও বলা যাবে না শক্ত করে। শেখানোর জন্য সেজন্য ব্যাপারগুলোকে রেখেছি কিছুটা ছাড়া ছাড়া অবস্থায়। আমাদের হিসেবে সোজা। শিখতে হবে আগে। সেটার আর যাই করেন - শেখাতে দয়া দাক্ষিণ্য করতে নেই। তাহলে ঠকবেন দিন শেষে।

১. ডাটা কালেকশন

ডাটা পেয়েছি আমরা ‘ক্যাগল’ সাইট থেকে। আলাদা করে ট্রেনিং আর টেস্ট ডাটাসেট। প্রতিটা ডাটা আপনারা দেখেছেন মাইক্রোসফট এক্সেলে। ধারণা পেয়েছেন প্রতিটা “অ্যাট্রিবিউট” নিয়ে।

২. ডাটা প্রিপারেশন

এটা একটা বিশাল পর্ব। আগেও বলেছি ব্যাপারটা নিয়ে। দেখা গেছে পুরো মেশিন লার্নিংএর ৭৫-৮০% সময় চলে যায় এই জায়গায়। আচ্ছা, ডাটার 'প্রি-প্রসেসিং'এ কি কি আসে? ১. ডাটাকে ঠিকমতো হাতে পাওয়া (আমাদের দেশে তো ‘ডাটা’ই পাওয়া যায়না ঠিকমতো) ২. যে ডাটাগুলো “মিসিং” আছে - সেগুলোকে নতুন করে তৈরি করা। মনে আছে আমাদের “বয়স” ভ্যারিয়েবল থেকে শুরু করে আরো বেশ কিছু ভ্যারিয়েবলে ডাটা মিসিং ছিলো আমাদের দেয়া দুটো ডাটাসেটে? সেগুলোকে নতুন করে তৈরি করে দিয়েছি “ডিসিশন ট্রি” আর গড় মান দিয়ে। "রিকার্সিভ পার্টিশনিং" মেথডও ব্যবহার করা হয়েছে বিভিন্ন জায়গায় ডাটাকে নতুন করে তৈরি করতে। ৩. পাশাপাশি ডাটাকে বিভিন্ন সাবসেটে ভাগ করে দেখেছি এর ভেতরের তথ্য। ৪. ওই ডাটাগুলোকে ‘ভ্যিজুয়ালাইজ’ করে ডিস্ট্রিবিউশনটা দেখা যায় ঠিকমতো। ক্যাগলে দেয়া ভ্যারিয়েবলগুলোর বাইরে তৈরি করেছি অনেকগুলো দরকারি ভ্যারিয়েবল - ‘ফিচার ইঞ্জিনিয়ারিং’ দিয়ে। যে যাই বলুক এটা একটা বড় ধাপ। এখানেই বেড়েছে আমাদের ‘অ্যাক্যুরেসি’।

৩. মডেল বাঁছাই করা

আমাদের মডেল হিসেবে শেষমেশ এসেছে ‘র‌্যান্ডম ফরেস্ট’ - যা কাজ করেছে বেশ ভালোভাবে। এখানে “ডিসিশন ট্রি”গুলোর ভেতরে বিভিন্ন ‘ফিচারসেট’ নিয়ে কাজ করেছি আমরা। মডেলের বিভিন্ন “হাইপার-প্যারামিটার” মানে মডেলকে ঠিকমতো টিউন করতে বেশ কিছু জিনিস নিয়েও কাজ করেছি আমরা। এর অনেক কাজ দেখতে পারবেন সপ্তম প্রেডিকশন চ্যাপ্টারে।

৪. ট্রেনিং

মডেলকে ট্রেনিং করিয়েছি আমাদের তৃতীয় প্রেডিকশন চ্যাপ্টার থেকে। একবার ট্রেনিং আর টেস্ট ডাটাসেট দুটোকে যোগ করেছিলাম কাজের মধ্যে সমন্বয়হীনতা দূর করতে। মিসিং ডাটাগুলোও ভর্তি করেছি সেটার সুযোগ নিয়ে। কাজ শেষে ভাগ করে দিয়েছি আগের মতো করে। ট্রেইন ডাটাসেটের জিনিসগুলোকে বের করেছি বিভিন্ন পরিসংখ্যানের জিনিস দিয়ে।

৫. ইভ্যালুয়েশন

মডেলকে ট্রেনিং করানোটা যতোটা ঝামেলা ছিলো সেটাকে ঠিক করে আনানো গেছে অনেকবার ক্যাগলে সাবমিট করে। একটা জিনিস বলে রাখা ভালো - ক্যাগলের কাছে কিন্তু আছে পুরো উত্তর সেট। সেখানে দেখেছি - ‘অ্যাক্যুরেসি’ এসেছে আস্তে আস্তে। প্রতিটা ভ্যারিয়েবলগুলোকে আলাদা করে টিউন করে করে। ইভ্যালুয়েশন করতে হয় একদম অচেনা ডাটা দিয়ে। সেকারণে আমরা মেলাইনি আমাদের ডাটাসেটগুলো শুরুতে। আমাদের মডেলও কিন্তু দেখেনি টেস্ট ডাটাসেট।

৬. প্যারামিটার টিউনিং

ইভ্যালুয়েশনের পাশাপাশি আমাদের প্যারামিটারগুলোকে টিউনিং করেছি দরকার মতো। মনে হতে পারে যেভাবে দরকার সেভাবে হয়নি, তবে অনেকটুকু টিউনিং করেছি আমাদের ফীচার ইঞ্জিনিয়ারিংএ। পাশাপাশি মডেল টিউনিং এ। ‘ডিসিশন ট্রি’তে ইচ্ছেমতো পাল্টেছি আমাদের বিভিন্ন আর্গুমেন্ট মানে প্যারামিটার। আমরা যদিও আলাপ করিনি ‘লার্নিং রেট’ নিয়ে তবে - সেটাই সবকিছু নয়। শুরুর জন্য আমরা বেশি ঝামেলা করিনি এখানে।

৭. প্রেডিকশন

সাত সাতটা প্রেডিকশন করেছি আমরা, ঠিক বলেছি তো? এখানেই আমাদের স্বার্থকতা। বাকিটা নিয়ে যাবেন আপনারা।