কম্পিউটার টিউটোরিয়াল

পাইথনে ডিসিশন ট্রি ব্যবহার করে ক্লাসিফায়ার কীভাবে তৈরি করবেন?


ডিসিশন ট্রি র‍্যান্ডম ফরেস্ট অ্যালগরিদমের মৌলিক উপাদান। এটি মেশিন লার্নিং-এ সবচেয়ে জনপ্রিয় অ্যালগরিদমের একটি এবং ক্লাসিফিকেশনের জন্য ব্যবহৃত হয়। এগুলো অত্যন্ত জনপ্রিয় কারণ এগুলো বোঝা সহজ। ডিসিশন ট্রি যা সিদ্ধান্ত দেয়, সেটি ব্যাখ্যা করতে পারে কেন একটি নির্দিষ্ট ভবিষ্যদ্বাণী করা হয়েছে। এর মানে প্রক্রিয়ার ইনপুট-আউটপুট ব্যবহারকারীকে স্পষ্ট থাকে। এগুলো ব্যাগিং, র‍্যান্ডম ফরেস্ট, এবং গ্রেডিয়েন্ট বूस্টিং-এর মতো ансам্বল মেথডের ফাউন্ডেশনও। এটিকে CART (Classification And Regression Trees) ও বলা হয়। এটি একটি বাইনারি ট্রি হিসেবে কল্পনা করা যায় (ডেটা স্ট্রাকচার ও অ্যালগরিদমে যা পড়া হয়)।

ট্রির প্রতিটি নোড একটি ইনপুট ভেরিয়েবল প্রকাশ করে, এবং লিফ নোডها (টার্মিনাল নোড) আউটপুট ভেরিয়েবল ধারণ করে। এই লিফ নোডগুলো ব্যবহার করে নোডে ভবিষ্যদ্বাণী করা হয়। ডিসিশন ট্রি তৈরি করার সময় মৌলিক ধারণা হলো দেওয়া স্পেসকে একাধিক সেকশনে ভাগ করা। সকল মানগুলো রেখে ভিন্ন-भিন্ন স্প্লিট চেষ্টা করা হয় যাতে কম খরচ ও সেরা ভবিষ্যদ্বাণী মান পাওয়া যায়। এই মানগুলো লোভী পদ্ধতিতে (greedy manner) বেছে নেওয়া হয়।

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

প্রতিটি ডিসিশন ট্রি একটি রুট দিয়ে শুরু হয়, যেখানে প্রথম স্প্লিট হয়। নোডها কার্যকরভাবে সংজ্ঞায়িত করার জন্য একটি দক্ষ পদ্ধতি প্রয়োজন। এখানেই জিনি ভ্যালু (Gini value) কাজে লাগে। জিনি অসমতা মাপার সবচেয়ে সাধারণ মাপদণ্ড। অসমতা বলতে টার্গেট ক্লাস (আউটপুট) বোঝায়, যেটি একটি নোডের প্রতিটি সাবসেটের হতে পারে।

অতএব, প্রতিটি স্প্লিটের পর জিনি ভ্যালু/অসমতা মান হিসাব করা হয়। জিনি ভ্যালুর ভিত্তিতে ইনফরমেশন গেইন সংজ্ঞায়িত করা হয়।

DecisionTreeClassifier মাল্টিক্লাস ক্লাসিফিকেশন করতে ব্যবহৃত হয়। এর সিনট্যাক্স নিচে দেওয়া হলো:

class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', ...)

উদাহরণ নিচে দেওয়া হলো:

উদাহরণ

from sklearn import tree
from sklearn.model_selection import train_test_split

my_data = [
    [16, 19], [17, 32], [13, 3], [14, 5], [141, 28],
    [13, 34], [186, 2], [126, 25], [176, 28], [131, 32],
    [166, 6], [128, 32], [79, 110], [12, 38], [19, 91],
    [71, 136], [116, 25], [17, 200], [15, 25], [14, 32], [13, 35]
]
target_vals = [
    'Man', 'Woman', 'Man', 'Woman', 'Woman', 'Man', 'Woman',
    'Woman', 'Woman', 'Woman', 'Woman', 'Man', 'Man', 'Man',
    'Woman', 'Woman', 'Woman', 'Woman', 'Man', 'Woman', 'Woman'
]
data_feature_names = ['Feature_1', 'Feature_2']

X_train, X_test, y_train, y_test = train_test_split(
    my_data, target_vals, test_size=0.2, random_state=1
)

clf = tree.DecisionTreeClassifier()
print("ডিসিশন ট্রি ক্লাসিফায়ার কল করা হয়েছে")
DTclf = clf.fit(my_data, target_vals)
prediction = DTclf.predict([[135, 29]])
print("ভবিষ্যদ্বাণী করা মান:")
print(prediction)

আউটপুট

ডিসিশন ট্রি ক্লাসিফায়ার কল করা হয়েছে
ভবিষ্যদ্বাণী করা মান: ['Woman']

ব্যাখ্যা

  • প্রয়োজনীয় প্যাকেজগুলো এনভায়রনমেন্টে ইম্পোর্ট করা হয়েছে।
  • কোডটি ফিচার ভ্যালুয়ের ভিত্তিতে টার্গেট ভ্যালু ক্লাসিফাই করতে ব্যবহৃত হয়।
  • ফিচার ভেক্টর ও টার্গেট মান সংজ্ঞায়িত করা হয়েছে।
  • train_test_split ফাংশন দিয়ে ডেটা ট্রেনিং ও টেস্টিং সেটে ভাগ করা হয়েছে।
  • DecisionTreeClassifier কল করা হয়েছে এবং ডেটা মডেলে ফিট করা হয়েছে।
  • predict ফাংশন ব্যবহার করে ফিচার মানগুলোর জন্য ভবিষ্যদ্বাণী করা হয়েছে।
  • আউটপুট কনসোলে প্রদর্শন করা হয়েছে।
  1. পাইথনে Bokeh ব্যবহার করে বার প্লট ভিজ্যুয়ালাইজ করার পদ্ধতি

  2. পাইথনে Bokeh ব্যবহার করে প্যাচ প্লট (Patch Plot) জেনারেট করার পদ্ধতি

  3. পাইথনে Bokeh ব্যবহার করে সাইনাসয়েডাল ভেত (Sinusoidal Wave) জেনারেট করার পদ্ধতি

  4. Python-এ Matplotlib ব্যবহার করে হিস্টোগ্রাম কীভাবে তৈরি করা যায়?