> For the complete documentation index, see [llms.txt](https://raqueeb.gitbook.io/scikit-learn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://raqueeb.gitbook.io/scikit-learn/iris-dataset/eveluation.md).

# মডেল ইভাল্যুয়েশনের ধারণা

মডেল তৈরি করার আগে এই কথা কেন?

মডেল ঠিকমতো কাজ না করলে মডেল করে লাভ কী?

মডেল ইভ্য়ালুয়েশন করতে চাইলে -

১. আমাদের কাছে থাকা ডাটা থেকে অথবা, ২. নতুন ডাটা যোগাড় করে

এখন আমাদের একটা মেশিন লার্নিং মডেল তৈরি করার পালা। এই মডেলটা পুরানো ডাটা থেকে শিখে নতুন ডাটার ওপর ফুলের প্রজাতি বের করার চেষ্টা করবে। প্রথম কথা হচ্ছে, আমাদের হাতের কাছে নতুন ডাটা আছে কি? নেই। আমাদের কাছে ওই ১৫০টাই ডাটা আছে। বাড়তি ডাটা পেতে চাইলে আমাদেরকে এখন নতুন করে মাঠে নামতে হবে। তার আগে কি মডেল তৈরি করা সম্ভব? আর সম্ভব হলেও সেই মডেলটা ঠিকমতো কাজ করছে কিনা সেটা জানবো কিভাবে? আমাদের মডেলটা যে বিশ্বাসযোগ্য সেটা প্রমাণ না করলে এই মডেলের গ্রহণযোগ্যতা তৈরি হবে না।

১. মডেল তৈরি করা সম্ভব ২. মডেলকে ভাগ করে কিছু ডাটা দিয়ে ট্রেনিং করানো যাবে ৩. বাকি ডাটা থেকে ‘লেবেল’ ফেলে দিয়ে সেটা থেকে অ্যাক্যুরেসি বের করা সম্ভব

মনে আছে আমার আগের বইয়ের টাইটানিক প্রজেক্ট এর কথা? সেখানে ক্যাগল কিন্তু আমাদেরকে আলাদা করে ‘টেস্ট’ এবং ‘ট্রেনিং’ ডাটা সেট দিয়েছিল। \[বইটা পুরোটাই অনলাইনে আছে] সেখানে আমরা ট্রেনিং ডাটা দিয়ে মডেল তৈরি করার পর টেস্ট ডাটা দিয়ে পরীক্ষা করেছিলাম। যেহেতু, টেস্ট ডাটাসেটের উত্তর ক্যাগলের কাছে ছিল, সে কারণে তার অ্যাক্যুরেসি পাওয়া গেছে ক্যাগলে সাবমিট করার পর পরই। সেটাও তো সম্ভব নয় এখানে। যদি না আমাদের ১৫০টা রেকর্ডকে দুই ভাগে ভাগ করি।

সমস্যা হচ্ছে - ১৫০টা ডাটা ট্রেনিং এর জন্য ব্যবহার করলে এই একই ডাটা ব্যবহার করতে পারব না আমাদের মডেলকে ‘ইভালুয়েট’ করার জন্য। আচ্ছা, আপনি বলুন, গতবারের প্রশ্নপত্র দিয়ে আমাদেরকে কখনো পরীক্ষা দিতে দেয়া হয়েছে কিনা? এটা হয়নি কারণ আমরা আগের বছরের প্রশ্নগুলো সলভ করেছিলাম আগে। মডেলের ভাষায় একে বলা হয় ‘ওভারফিটিং’। যেই ডাটাসেট দিয়ে মডেল তৈরি করা হয়, সেটা দিয়ে ‘এভালুয়েট’ করলে মডেল আগের ডাটাকে পুঙ্খানুপুঙ্খভাবে মনে রাখবে। আমি হলে তাই করতাম। ফলাফল, ১০০ তে ১০০। আমরা তো সেটা চাইবো না। আগের প্রশ্নের উত্তর সে যদি মনে রেখে উত্তর দেয় তাহলে তো সেই মডেলটা ‘জেনারেলাইজড’ হলো না। মডেলটা শুধুমাত্র এই ডাটার জন্য প্রযোজ্য। মানে এই মডেল সব ডাটার জন্য কাজ করবে না। আমাদেরকে এমন একটা মডেল তৈরি করতে হবে যা নতুন ডাটার জন্য (যে ডাটা আগে সে দেখেনি) কাজ করবে।

মডেলের পারফরম্যান্স ‘এভালুয়েট’ করার জন্য আমাদের সেই রকম নতুন ডাটার দরকার যার ‘লেবেল’ আছে। মানে প্রশ্নের সাথে উত্তর দেয়া আছে। প্রশ্নের সাথে উত্তর দেয়া না থাকলে পরীক্ষক কিভাবে একজনকে এভালুয়েট করবে? আগে আলাপ করেছি - সেটা তখনই সম্ভব যখন আমাদের কাছের ১৫০টা ডাটাকে আলাদা করে ফেলব দুটো ভাগে। ট্রেনিং সেট এবং টেস্ট সেট। ১৫০টা ডাটার এক অংশ ব্যবহার করব মডেল তৈরীর জন্য। সেটা হবে আমাদের ট্রেনিং সেট। বাকি অংশটা আমরা কাজে লাগাবো মডেলকে আলাদাভাবে এভালুয়েট করার জন্য। অনেক তত্ত্ব কথা হলো। এবার কাজের পালা।

## প্রস্তাবনা

{% hint style="info" %}
দুটো কাজ করতে পারি বোঝার সুবিধার জন্য।

১. আমাদের ট্রেনিং করাতে পারি পুরো ডাটাসেটের (১৫০টা রেকর্ড) ওপর। সেটাকে এভালুয়েট করতে ব্যবহার করব এই পুরানো ডাটাসেট। বাস্তব ক্ষেত্রে এই ব্যাপারটি একদম মানা। মানে যেই ডাটাসেট দিয়ে ট্রেনিং করাব সেটা দিয়ে আবার এভালুয়েট করাব না।

২. নিয়ম অনুযায়ী পুরো ডাটাসেটকে ট্রেনিং এবং টেস্ট ডাটাসেটে ভাগ করে কাজ করব। আমাদের এখানে ১৫০টা রেকর্ড আছে। এখন যদি এই রেকর্ডকে ভাগ করে ৭৫% ডেটাকে ট্রেনিং আর ২৫% ডেটাকে টেস্ট ডেটাসেটে ভাগ করি তাহলে আমাদের কাজ হয়ে যায়। ৭৫% হচ্ছে ১১২টা রেকর্ড। ২৫% হচ্ছে ৩৮টা রেকর্ড। হাতেকলমে বিস্তারিত দেখুন  " মডেলের কার্যকারীতা (ইভ্যালুয়েশন)" অধ্যায়ে।&#x20;
{% endhint %}
