Arefin Anwar

ডিসিসন ট্রি (Decision Tree) একটি মেশিন লার্নিং অ্যালগরিদম যা ডেটা থেকে সহজেই সিদ্ধান্ত নিতে শেখে। এটি এক ধরনের চার্টের মতো, যেখানে প্রতিটি গাছের শাখা একটি প্রশ্ন বা শর্তের উপর নির্ভর করে এবং প্রতিটি পাতা (যাকে নড-ও বলা হয়) একটি সিদ্ধান্ত বা ফলাফল নির্দেশ করে। চল একটু বুঝে নেওয়া যাক!

ভাবো, তুমি একটি ফলের দোকানে আছো এবং জানতে চাচ্ছো কোনটি আপেল আর কোনটি কমলা।

  • প্রথমে একটি প্রশ্ন করো: ফলটির রং কি লাল?
    • যদি “হ্যাঁ” হয়, তাহলে এটি আপেল হতে পারে।
    • যদি “না” হয়, তাহলে এটি কমলার দিকে যাবে।
  • এরপর আরেকটি প্রশ্ন হতে পারে: ফলটির গায়ে কি নরম দাগ আছে?
    • এইভাবে, প্রশ্নের পর প্রশ্ন করে তুমি ফলাফলে পৌঁছে যাবে।

চল আরেকটা উদাহরন দেখি, ভাবো, তুমি একটি পোষা প্রাণীর দোকানে আছো এবং জানতে চাচ্ছো একটি প্রাণী কুকুর না বিড়াল।

১ম প্রশ্ন: প্রাণীটি কি দৌড়াতে পছন্দ করে?

  • যদি “হ্যাঁ” হয়, তাহলে এটি কুকুর হতে পারে।
  • যদি “না” হয়, তাহলে এটি বিড়াল হতে পারে।

২য় প্রশ্ন: প্রাণীটির কি লম্বা লেজ আছে?

  • যদি “হ্যাঁ” হয়, তাহলে এটি বিড়াল হতে পারে।
  • যদি “না” হয়, তাহলে এটি কুকুর হতে পারে।

৩য় প্রশ্ন: প্রাণীটি কি উচ্চস্বরে ঘেউ ঘেউ করে?

  • যদি “হ্যাঁ” হয়, তাহলে এটি নিশ্চিতভাবে কুকুর।
  • যদি “না” হয়, তাহলে এটি বিড়াল।

৪র্থ প্রশ্ন: প্রাণীটি কি মাংস খেতে বেশি পছন্দ করে?

  • যদি “হ্যাঁ” হয়, তাহলে এটি কুকুর হতে পারে।
  • যদি “না” হয়, তাহলে এটি বিড়াল হতে পারে।

৫ম প্রশ্ন: প্রাণীটি কি কখনো কাত হয়ে পায়ের নীচে ঘুরে?

  • যদি “হ্যাঁ” হয়, তাহলে এটি বিড়াল।
  • যদি “না” হয়, তাহলে এটি কুকুর।

এভাবে, পাঁচটি প্রশ্নের মাধ্যমে তুমি কুকুর আর বিড়ালকে আলাদা করতে পারবে।

ডিসিসন ট্রি মূলত এই “হ্যাঁ/না” প্রশ্নগুলোকে অথবা কোন গাণিতিক শর্ত ব্যাবহার করে গাছের শাখার পাতাr মতো সাজিয়ে কোনকিছু প্রেডিক্ট করে।

একটু ডিসিশন ট্রি এর পিছনের কিছু জিনিস বুঝা যাক। এখন যেগুলা বুঝানো হচ্ছে টা সবি লাইব্রেরি ফাংশন এর মাধ্যমে ব্যবহার করা যায় মাত্র 2-3 লাইন কোড লিখে সো, ডোন্ট ওয়ারি!!

এন্ট্রপি (Entropy) হল ডিসিসন ট্রির মূল মাপকাঠি, যা ডেটার এলোমেলোতা বা বিশৃঙ্খলতার একটি পরিমাপ। সহজভাবে বললে, এন্ট্রপি বুঝতে সাহায্য করে একটি ডেটাসেট কতটা সুনির্দিষ্ট বা অনিশ্চিত। যদি ডেটার সব অংশ একই রকম হয়, যেমন একটি বাক্সে শুধুমাত্র আপেল থাকে, তাহলে এন্ট্রপি হবে ০, কারণ এখানে কোনো অনিশ্চয়তা নেই। অন্যদিকে, যদি বাক্সে ৫০% আপেল আর ৫০% কমলা থাকে, তাহলে এন্ট্রপি বেশি হবে, কারণ এখানে কোন ফলটি কী তা নিয়ে বিভ্রান্তি তৈরি হয়। ডিসিসন ট্রি এন্ট্রপির সাহায্যে এমন প্রশ্ন তৈরি করে যেগুলো ডেটাকে বিভিন্ন অংশে ভাগ করে বিশৃঙ্খলতা কমায় এবং একটি নির্দিষ্ট প্যাটার্ন খুঁজে বের করে। এভাবেই এন্ট্রপি ডিসিসন ট্রির শর্ত তৈরি এবং সিদ্ধান্ত গ্রহণের মূল ভিত্তি হিসেবে কাজ করে। 

একটা বাস্তব উদাহরণ শুনা যাক: একটি বাক্সে ১০টি আপেল আর ১০টি কমলা থাকলে সেটি খুব এলোমেলো (উচ্চ এন্ট্রপি)। কিন্তু যদি ২০টি আপেল থাকে, তাহলে সেটি এলোমেলো নয় (নিম্ন এন্ট্রপি)। ডিসিসন ট্রি এমনভাবে শর্ত তৈরি করে যাতে এন্ট্রপি কমে এবং গাছটি ডেটাকে সঠিকভাবে ভাগ করতে পারে।

নানা ফিচার এর এন্ট্রপির উপর নির্ভর করেই ট্রি তৈরি হয়, যেটিতে একুরেসি বেশি সেটই শেষ পর্যন্ত আমদের মডেল।

ডিসিসন ট্রি বেশি গভীর হলে এটি অপ্রয়োজনীয় শাখা তৈরি করে, যাকে ওভারফিটিং বলে। এজন্য প্রুনিং (Pruning) বা ছাঁটাই ব্যবহার করা হয়। এটি অপ্রয়োজনীয় শাখাগুলো কেটে দেয়, যাতে মডেল সহজ হয় এবং নতুন ডেটার সাথে ভালোভাবে কাজ করে।

ডিসিসন ট্রি Python-এর স্কাই-লার্ন (Scikit-learn) লাইব্রেরি ব্যবহার করে বাস্তবায়ন করা হয়। নিচে স্কিকিট-লার্ন ব্যবহার করে ডিসিশন ট্রি তৈরির একটি সহজ কোড দেখানো হয়েছে। এখানে আমরা আইরিস ডেটাসেট ব্যবহার করব, যা ফুলের প্রজাতি সনাক্ত করতে ব্যবহৃত হয়। প্রথমে ডেটাসেট লোড করা হয়, তারপর তা ট্রেনিং এবং টেস্ট সেটে ভাগ (একটু পরেই তা ব্যাখ্যা করছি) করা হয়। এরপর ডিসিশন ট্রি ক্লাসিফায়ার দিয়ে মডেল ট্রেন করানো হয়। মডেলের সঠিকতা যাচাই এবং টেস্ট ডেটা দিয়ে প্রেডিকশন করার পাশাপাশি ডিসিশন ট্রি ভিজুয়ালাইজও করা হয়েছে।

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# ধাপ ১: ডেটাসেট লোড
data = load_iris()
X = data.data  # ফিচার (ফুলের বৈশিষ্ট্য)
y = data.target  # লেবেল (ফুলের প্রজাতি)
# ধাপ ২: ডেটাসেট ভাগ করা (ট্রেনিং এবং টেস্ট সেটে)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# ধাপ ৩: ডিসিশন ট্রি মডেল তৈরি এবং ট্রেনিং
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
# ধাপ ৪: মডেলের সঠিকতা যাচাই
accuracy = model.score(X_test, y_test)
print(f"মডেলের একুরেসি: {accuracy*100:.2f}%")
# ধাপ ৫: ডিসিশন ট্রি ভিজুয়ালাইজ
plt.figure(figsize=(12, 8))
plot_tree(model, feature_names=data.feature_names, class_names=data.target_names, filled=True)
plt.show()

ডিসিসন ট্রি এমন একটি মডেল যা প্রশ্ন করে ডেটা বিশ্লেষণ করে। এন্ট্রপি কমিয়ে এটি ডেটার প্যাটার্ন বের করে। আর অপ্রয়োজনীয় শাখা ছেঁটে এটিকে কার্যকর রাখা হয়। বাস্তব জীবনে সমস্যার সমাধানে এটি একটি শক্তিশালী হাতিয়ার।