# কে ফোল্ড ক্রস ভ্যালেইডেশন

কে ফোল্ড ক্রস ভ্যালেইডেশন সম্পর্কে আলোচনায় যাবার আগে আমরা একটি ছোট্ট উদাহরণ সম্পর্কে আলোচনা করবো। নিচের উদাহরণটি লক্ষ্য করুন, ধরুন একটি ক্লাসে ১০ জন শিক্ষার্থী রয়েছে এবং আপনার কাছে তাদের ওজনের ডেটাসেট রয়েছে , এখান থেকে আপনি র‍্যান্ডমলি ৪ জনের স্যাম্পল বাছাই করতে চান। প্রথম বার আপনি ৪ জনকে র‍্যান্ডমলি সিলেক্ট করলেন এবং ১ম স্যাম্পলের জন্য তাদের গড় ওজন পাওয়া গেল ৫৩.২৫ কেজি। আপনি আবার চার জনকে র‍্যান্ডমলি সিলেক্ট করলেন এবং ২য় স্যাম্পলের জন্য তাদের গড় ওজন পাওয়া গেল ৬৯ কেজি। আপনি আবারও চার জনকে র‍্যান্ডমলি সিলেক্ট করলেন, ৩য় স্যাম্পলের জন্য তাদের গড় ওজন পাওয়া গেল ৫৫.৫ কেজি।

![](/files/-M9OZfQpjgASGYjcjVqI)

উপরের উদাহরনে আমরা দেখতে পেলাম তিনটি স্যাম্পলে গড় ওজন তিন ধরনের পাওয়া যাচ্ছে, অর্থাৎ ডেটাসেট একই থাকলেও ভিন্ন ভিন্ন র‍্যান্ডম স্যাম্পলের জন্য ফলাফলে পার্থক্য আসতে পারে।

কে ফোল্ড ক্রস ভ্যালেইডেশন হচ্ছে একটি বিশেষ পদ্ধতি যার মাধ্যমে একই ডেটাসেটের একাধিক সাবসেট তৈরি করে মেশিন লার্নিং মডেল তৈরি করা হয়, এরফলে ভিন্ন ভিন্ন সাবসেটের জন্য মডেলের প্রিডিকশন অ্যাকুরেসিও আলাদা আলাদা হয়। মনে করুন আমারা একটি ডেটাসেটের জন্য ৫ টি সাবসেট তৈরি করবো, প্রতিটি সাবসেটে থাকা ডেটার সাইজ সমান। এই সাবসেট সমূহকে বলা হয় ফোল্ড। অর্থাৎ আমরা আমাদের ডেটাসেটকে ৫ টি সমান ফোল্ডে ভাগ করলাম।  ফোল্ডের সংখ্যাকে ‘কে’ দ্বারা প্রকাশ করা হয়। আমাদের এই উদাহরণের জন্য ‘কে’-এর মান ৫।

![ছবি - ক্রস ভ্যালেইডেশন ](/files/-M9O_F1VIp3zJwIOTucP)

এবার চারটি ফোল্ডকে ট্রেইনিং সেট এবং একটি ফোল্ডকে টেস্ট সেট হিসাবে ব্যবহার করে সাধারনত আমরা মডেল তৈরি করে থাকি। কে ফোল্ড ক্রস ভ্যালেইডেশনের ক্ষেত্রে ১ম বারের পরেও আরও কয়েকবার একই পদ্ধতির পুনরাবৃত্তি করা হয়।  ‘কে’-এর সমান সংখ্যকবার আলাদা আলাদা ফোল্ড ব্যবহার করে ট্রেইনিং ও টেস্টিং সেটের মাধ্যমে মডেল তৈরি করা হয়। প্রথমবার যে ফোল্ডটিকে টেস্ট সেট হিসাবে ব্যবহার করা হয়, ২য় বার আর সেটিকে টেস্ট সেটে ব্যবহার করা হয়না, বরং সেটিকে ট্রেইনিং সেটে যুক্ত করে ট্রেইনিং সেটের আরেকটি ফোল্ডকে টেস্ট সেটে ব্যবহার করা। এভাবে ‘কে’ সংখ্যক বার একই পদ্ধতির পুনরাবৃত্তি করা হয়। এর ফলে প্রতিবারেই ট্রেইনিং এবং টেস্ট সেটের ডেটায় ভিন্নতা থাকে এবং ফলাফল হিসাবে প্রতিটি মডেলেই প্রিডিকশন অ্যাকুরেসিতে কিছুটা পার্থক্য থাকতে পারে।

কে ফোল্ড ক্রস ভ্যালেইডেশনের মাধ্যমে আমরা বুঝতে পারি কোন মডেল ভিন্ন ভিন্ন ডেটার ক্ষেত্রে তার অ্যাকুরেসি পারফরম্যান্সে কতখানি পরিবর্তিত হয় এবং সার্বিক ভাবে ভিন্ন ভিন্ন ডেটার ক্ষেত্রে অ্যাভারেজ অ্যাকুরেসি কত।

**কে ফোল্ড ক্রস ভ্যালেইডেশনের কিছু বৈশিষ্ট্য,**&#x20;

* ভিন্ন ভিন্ন ফোল্ডের ক্ষেত্রে আলাদা আলাদা পারফরম্যান্স পাওয়া যায়, ফলে মডেলটি ওভারঅল কতখানি ভালো কাজ করবে সেটি জানা যায়।
* কে ফোল্ড ক্রস ভ্যালেইডেশনের মাধ্যমে ওভারফিটিং দূর করা সম্ভব।
* সিকোয়েন্সিয়াল ডেটার ক্ষেত্রে এই মডেল কার্যকরী নয়।&#x20;
* ট্রেইনিং টাইম বেশী লাগে এবং অধিক কম্পিউটেশনাল রিসোর্স ব্যবহার করে।&#x20;

**পাইথনে কে ফোল্ড ক্রস ভ্যালেইডেশন**

আমরা চাইলে যেকোনো অ্যালগরিদমের উপরেই কে ফোল্ড ক্রস ভ্যালেইডেশনে পদ্ধতি প্রয়োগ করে দেখতে পারি এবং একইসাথে একাধিক অ্যালগরিদমের উপরেই কে ফোল্ড ক্রস ভ্যালেইডেশনে পদ্ধতি প্রয়োগ করে দেখতে ডেটাসেটের জন্য কোন পদ্ধতিটি ভালো কাজ করবে। কে ফোল্ড ক্রস ভ্যালেইডেশনের জন্য আমরা ক্যান্সার সারভাইভ্যাল  Haberman’s ডেটাসেটটি ব্যবহার করবো, ইতোমধ্যে লজিস্টিক রিগ্রেশনঃ বাইনোমিয়াল অধ্যায়ে এই ডেটাসেট সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে তাই এখানে আর নতুন করে ডেটাসেটের বর্ণনা দেয়া হচ্ছে না।&#x20;

প্রথমেই  আমরা প্রয়োজনীয় লাইব্রেরী ইমপোর্ট  এবং ডেটাসেট লোড করে নিচ্ছি,&#x20;

```
import pandas as pd
from sklearn.model_selection import cross_validate
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix,accuracy_score
from sklearn import svm
from sklearn.model_selection import train_test_split

url='https://raw.githubusercontent.com/fazlyrabbi77/Cancer-Prediction-Logistic-Regression/master/haberman.csv'
df = pd.read_csv(url)
df.head()
```

টার্গেট ভ্যারিয়েবল এবং ফিচার ভ্যারিয়েবলস সেট করে নেব,

```
features=['age','operation_year','axil_nodes']
X=df[features]
df['status']=df['status'].map({1:0, 2:1})
y=df.status
```

ট্রেইনিং ও টেস্টের জন্য ডেটাসেটকে স্প্লিট করে নিচ্ছি ( মডেল তৈরি করার জন্য, ভ্যালেইডেশনের জন্য সম্পূর্ণ  ডেটাসেটকেই ব্যবহার করা হবে )

```
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=4)
```

এবার প্রথমেই সাপোর্ট ভেক্টর মেশিন মডেল তৈরি করে নিচ্ছি এবং মডেলটি  ১০ টি ফোল্ডের মাধ্যমে ক্রস ভ্যালেইডেট করবো। নিচের ছবিতে আমরা দেখতে পাচ্ছি ১০ ফোল্ডের জন্য আলাদা আলাদা অ্যাকুরেসি স্কোর এবং তাদের গড় অ্যাকুরেসি স্কোর, যার মান ০.৭৩১৯ বা ৭৩.১৯%।&#x20;

```
svm_ml = svm.SVC(kernel='linear').fit(X_train, y_train)

cv_svm = cross_validate(svm_ml, X, y, cv=10)
print(cv_svm['test_score'])
print(cv_svm['test_score'].mean())
```

![](/files/-M9OhysWPYVeqdeEzRp7)

আমরা চাইলে এই স্কোরের মাধ্যমে একটি ডেটাফ্রেম তৈরি করতে পারি,

```
score_df_svm=pd.DataFrame(cv_svm)
score_df_svm
```

![](/files/-M9mYjvt3GGimH0uS0vG)

স্কোরগুলো প্লট করলে আমরা সহজেই ভিজুয়ালাইজ করতে পারি ভিন্ন ভিন্ন ফোল্ডের জন্য অ্যাকুরেসি কেমন ছিল।&#x20;

```
ax = score_df_svm.test_score.plot.bar()
```

![](/files/-M9mYvy8sFrzQRCohEeG)

কে ফোল্ড ক্রস ভ্যালেইডেশনে পদ্ধতি যেহেতু একাধিক অ্যালগরিদমের উপর প্রয়োগ করা যায় তাই আমরা লজিস্টিক রিগ্রেশন মডেলেও এই পদ্ধতির প্রয়োগ করে দেখতে চাই লজিস্টিক রিগ্রেশনের ক্ষেত্রে ক্রস ভ্যালেইডেশনের পারফম্যান্স কেমন হয়।

```
logreg = LogisticRegression()
logreg.fit(X_train, y_train)

cv_logit = cross_validate(logreg, X, y, cv=10)
print(cv_logit['test_score'])
print(cv_logit['test_score'].mean())
```

![](/files/-M9Oibr4sYEDAe6d-p2H)

লজিস্টিক রিগ্রেশনের ক্ষত্রে ১০ টি ফোল্ডের অ্যাভারেজ স্কোর ০.৭৪৫০ বা ৭৪.৫% । অর্থাৎ আমরা বুঝতে পারছি সাপোর্ট ভেক্টর মেশিনের তুলনায় লজিস্টিক রিগ্রেশনের পারফরম্যান্স সামান্য বেশী।&#x20;

![](/files/-M9cqlSxrn4lrZ87MIDz)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://datasinsightsbd.gitbook.io/dsbook/supervised-ml/k-fold.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
