Train/Test Split একটি গুরুত্বপূর্ণ ধাপ যেটি মেশিন লার্নিং প্রক্রিয়াতে ব্যবহৃত হয়, যাতে ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা হয়। ট্রেনিং সেটে মডেলটি প্রশিক্ষিত হয় এবং টেস্ট সেটে মডেলটির পারফরম্যান্স যাচাই করা হয়।
Scikit-learn এ train_test_split() ফাংশন ব্যবহার করে খুব সহজেই ডেটা বিভাজন করা যায়। এটি ডেটাকে স্বতঃস্ফূর্তভাবে ট্রেনিং এবং টেস্ট সেটে ভাগ করে, যা মডেল ট্রেনিং এবং মূল্যায়নে সহায়ক।
1. Train/Test Split এর প্রয়োজনীয়তা
ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করার কারণ হল:
- Overfitting: যদি আপনি পুরো ডেটা ব্যবহার করেন মডেল ট্রেনিং এবং মূল্যায়নের জন্য, তাহলে মডেলটি পুরো ডেটা সিজন হয়ে যেতে পারে, যা ওভারফিটিং (Overfitting) সৃষ্টি করতে পারে।
- Generalization: ডেটা বিভাজন নিশ্চিত করে যে, মডেলটি শুধুমাত্র ট্রেনিং ডেটার উপর নির্ভর না করে নতুন, অজানা ডেটাতে সঠিকভাবে কাজ করতে পারে।
- Model Validation: টেস্ট সেটের উপর মডেল মূল্যায়ন করে এর পারফরম্যান্স যাচাই করা যায়, যাতে আপনি জানেন মডেলটি বাস্তব ক্ষেত্রে কেমন পারফর্ম করবে।
2. train_test_split() ফাংশন ব্যবহার
Scikit-learn এর train_test_split() ফাংশন ব্যবহার করে ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা যায়। এর মাধ্যমে আপনি ডেটার নির্দিষ্ট একটি শতাংশ টেস্ট সেট হিসেবে আলাদা করতে পারেন।
Syntax:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
X: ফিচার বা ইনপুট ডেটাy: লক্ষ্য বা আউটপুট ভ্যারিয়েবলtest_size: টেস্ট সেটের আকার (এটি সাধারণত 0.2 বা 20% এর মতো থাকে, কিন্তু এটি আপনার প্রয়োজন অনুযায়ী পরিবর্তন করা যেতে পারে)random_state: ফলস্বরূপ ডেটার বিভাজন একই থাকবে (যদি আপনি পুনরায় কোডটি চালান)।
উদাহরণ:
import pandas as pd
from sklearn.model_selection import train_test_split
# একটি উদাহরণ ডেটাসেট তৈরি করা
data = {'feature1': [1, 2, 3, 4, 5],
'feature2': [5, 4, 3, 2, 1],
'target': [0, 1, 0, 1, 0]}
df = pd.DataFrame(data)
# X এবং y আলাদা করা
X = df[['feature1', 'feature2']] # ফিচার
y = df['target'] # লক্ষ্য
# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ট্রেনিং এবং টেস্ট সেট প্রিন্ট করা
print("X_train:\n", X_train)
print("X_test:\n", X_test)
print("y_train:\n", y_train)
print("y_test:\n", y_test)
আউটপুট:
X_train:
feature1 feature2
4 5 1
3 4 2
1 2 4
X_test:
feature1 feature2
2 3 3
0 1 5
y_train:
4 0
3 1
1 1
Name: target, dtype: int64
y_test:
2 0
0 0
Name: target, dtype: int64
এখানে:
test_size=0.2মানে ২০% ডেটা টেস্ট সেট হিসেবে ভাগ করা হবে এবং ৮০% ডেটা ট্রেনিং সেট হিসেবে ব্যবহার করা হবে।random_state=42মানে ডেটার বিভাজন একটি নির্দিষ্ট নিয়মে করা হবে, তাই কোড পুনরায় চালালে একই বিভাজন পাবেন।
3. ডেটা বিভাজন এবং লজিস্টিক রিগ্রেশন মডেল
ধরা যাক, এখন আমরা লজিস্টিক রিগ্রেশন মডেল তৈরি করতে চাই। আগে ডেটা ভাগ করতে হবে, তারপর মডেলটি ট্রেনিং এবং টেস্ট সেটে মূল্যায়ন করা হবে।
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# লজিস্টিক রিগ্রেশন মডেল তৈরি করা
model = LogisticRegression()
# মডেল ট্রেনিং
model.fit(X_train, y_train)
# টেস্ট সেটের উপর প্রেডিকশন করা
y_pred = model.predict(X_test)
# মডেলের পারফরম্যান্স মূল্যায়ন
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100}%")
এখানে:
model.fit(X_train, y_train): ট্রেনিং সেটে মডেল প্রশিক্ষণ দেওয়া হয়।model.predict(X_test): টেস্ট সেটে প্রেডিকশন করা হয়।accuracy_score(y_test, y_pred): প্রকৃত আউটপুট এবং প্রেডিকটেড আউটপুটের ভিত্তিতে মডেলের সঠিকতা (accuracy) পরিমাপ করা হয়।
4. Additional Tips:
- Stratified Split: যদি আপনার লক্ষ্য ভ্যারিয়েবলটি অসমভাবে বিভক্ত থাকে (যেমন: 90% শ্রেণী 1 এবং 10% শ্রেণী 2), তবে আপনি Stratified Split ব্যবহার করতে পারেন যাতে প্রতিটি শ্রেণী ট্রেনিং এবং টেস্ট সেটে সঠিক অনুপাতে থাকে।
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
- Cross-Validation: আপনি যদি মডেলের পারফরম্যান্স আরও ভালোভাবে যাচাই করতে চান, তবে K-Fold Cross-Validation ব্যবহার করতে পারেন। এতে আপনার ডেটাকে একাধিক ভাগে ভাগ করা হবে এবং মডেলটি প্রতিটি ভাগে পরীক্ষিত হবে।
from sklearn.model_selection import cross_val_score
# ক্রস ভ্যালিডেশন
scores = cross_val_score(model, X, y, cv=5) # 5-Fold Cross Validation
print("Cross-validation scores:", scores)
সারাংশ
- Train/Test Split: ডেটাকে প্রশিক্ষণ এবং পরীক্ষার জন্য ভাগ করে, যাতে মডেলের পারফরম্যান্স ভালোভাবে যাচাই করা যায়।
train_test_split(): Scikit-learn এর একটি শক্তিশালী ফাংশন, যা ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করতে সাহায্য করে।- মডেল মূল্যায়ন: মডেলটি প্রশিক্ষণের পর টেস্ট সেটে মূল্যায়ন করা হয় এবং accuracy, cross-validation স্কোর ইত্যাদি ব্যবহার করে ফলাফল বিশ্লেষণ করা হয়।
এটি একটি অত্যন্ত গুরুত্বপূর্ণ ধাপ যেটি মেশিন লার্নিং প্রক্রিয়ার নির্ভুলতা নিশ্চিত করতে সাহায্য করে।
Read more