بعد از آشنایی با رگرسیون خطی، اکنون به سراغ یکی دیگر از الگوریتم‌های کاربردی یادگیری نظارت‌شده به نام درخت تصمیم (Decision Tree) می‌رویم. درخت تصمیم به دلیل قابلیت تفسیر بالا و سادگی، یکی از الگوریتم‌های پرکاربرد برای حل مسائل دسته‌بندی و رگرسیون است.

درخت تصمیم (Decision Tree)

1. تعریف درخت تصمیم

  • درخت تصمیم یک مدل گرافیکی است که به ما کمک می‌کند تا با استفاده از تصمیم‌گیری‌های پی‌درپی به نتیجه نهایی برسیم. در این مدل، هر گره نشان‌دهنده‌ی یک ویژگی یا شرط، و هر شاخه یک تصمیم یا نتیجه‌ی ممکن است. گره‌های انتهایی یا برگ‌ها (Leaf Nodes) خروجی نهایی یا دسته‌بندی را نشان می‌دهند.
  • به عنوان مثال، اگر بخواهیم نوع یک میوه را بر اساس ویژگی‌هایی مثل اندازه و رنگ دسته‌بندی کنیم، درخت تصمیم می‌تواند برای ما به این صورت عمل کند: “اگر رنگ میوه قرمز و اندازه آن کوچک است، احتمالاً گیلاس است.”

2. اجزای درخت تصمیم

  • گره ریشه (Root Node): نقطه شروع درخت که معمولاً به صورت بهترین ویژگی یا شرط برای دسته‌بندی داده‌ها انتخاب می‌شود.
  • گره‌های داخلی (Internal Nodes): شرایط یا ویژگی‌هایی که داده‌ها را به دسته‌های مختلف تقسیم می‌کنند.
  • برگ‌ها (Leaves): نتایج نهایی درخت تصمیم، که نشان‌دهنده دسته یا خروجی هستند.

3. معیارهای تقسیم در درخت تصمیم

  • برای ساخت درخت تصمیم، باید ویژگی‌های داده‌ها را بر اساس معیارهایی انتخاب کنیم که بیشترین قدرت دسته‌بندی را داشته باشند. دو معیار رایج برای این کار عبارتند از:
  • آنتروپی و سود اطلاعاتی (Entropy & Information Gain):
    • آنتروپی معیاری برای سنجش عدم قطعیت یا خلوص دسته‌ها است. هر چه داده‌ها در یک دسته بیشتر شبیه هم باشند، آنتروپی کمتر است.
    • سود اطلاعاتی میزان کاهش آنتروپی را پس از تقسیم‌بندی نشان می‌دهد. درخت تصمیم سعی می‌کند ویژگی‌هایی را انتخاب کند که بیشترین سود اطلاعاتی را دارند.
  • شاخص جینی (Gini Index):
    • شاخص جینی معیاری است برای سنجش خلوص داده‌ها در یک دسته. این شاخص بین صفر و یک قرار دارد. مقدار صفر نشان‌دهنده یک دسته خالص است و هرچه مقدار به یک نزدیک‌تر باشد، نشان‌دهنده تنوع بالاتر در دسته‌هاست.

4. مراحل ساخت درخت تصمیم

  • انتخاب ویژگی: انتخاب ویژگی‌ها برای گره‌های داخلی با استفاده از معیارهایی مانند سود اطلاعاتی یا شاخص جینی انجام می‌شود.
  • تقسیم داده‌ها: داده‌ها بر اساس شرایط مختلف به گروه‌های کوچکتر تقسیم می‌شوند.
  • ساخت گره‌های فرزند: برای هر گروه جدید، یک گره فرزند ایجاد شده و فرآیند تکرار می‌شود.
  • توقف درخت: درخت زمانی متوقف می‌شود که یا همه داده‌ها در یک دسته خالص قرار گیرند یا به عمق از پیش تعیین‌شده برسیم.

5. مزایا و معایب درخت تصمیم

  • مزایا:
    • سادگی و قابلیت تفسیر: مدل به راحتی قابل درک و تفسیر است.
    • انعطاف‌پذیری: قابلیت کار با داده‌های عددی و دسته‌ای.
  • معایب:
    • تمایل به بیش‌برازش (Overfitting): درخت‌های تصمیم پیچیده ممکن است بر روی داده‌های آموزشی بیش‌برازش شوند.
    • عدم پایداری: تغییرات کوچک در داده‌ها می‌تواند منجر به تغییرات بزرگ در ساختار درخت شود.

6. پیاده‌سازی درخت تصمیم در پایتون

برای پیاده‌سازی درخت تصمیم، می‌توانیم از کتابخانه Scikit-Learn استفاده کنیم. مثال زیر یک مدل درخت تصمیم ساده برای دسته‌بندی داده‌ها را نشان می‌دهد:

pythonCopy codefrom sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# بارگذاری داده‌ها
data = load_iris()
X, y = data.data, data.target

# تقسیم داده‌ها به آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# تعریف و آموزش مدل درخت تصمیم
model = DecisionTreeClassifier(criterion='gini')  # می‌توان از 'entropy' هم استفاده کرد
model.fit(X_train, y_train)

# پیش‌بینی و ارزیابی مدل
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

در این مثال، از داده‌های مجموعه گل‌های زنبق (Iris Dataset) استفاده کردیم که دارای سه نوع گل زنبق با ویژگی‌هایی مثل طول و عرض گلبرگ است.

فعالیت پیشنهادی:

  • یک مجموعه داده با ویژگی‌های مختلف پیدا کنید (مثلاً از Kaggle) و از الگوریتم درخت تصمیم برای دسته‌بندی آن‌ها استفاده کنید. این کار به شما کمک می‌کند تا مفاهیم انتخاب ویژگی، تقسیم‌بندی، و ساخت مدل دسته‌بندی را به صورت عملی یاد بگیرید.

اگر مایل باشید، می‌توانیم به سراغ الگوریتم‌های پیشرفته‌تری مثل جنگل تصادفی (Random Forest) و ماشین بردار پشتیبان (SVM) برویم.