درخت تصمیم

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

## مثال‌ها
چپ|بندانگشتی|409px|سابقا نمودارهای درختی به صورت دستنویس بودند.

### مثال۱
در بازی بیست سؤالی، بازیکن باید یک درخت تصمیم در ذهن خود بسازد که به خوبی موارد را از هم جدا کند تا با کمترین سؤال به جواب برسد. در صورتی بازیکن به جواب می‌رسد که درخت ساخته شده بتواند به خوبی موارد را از هم جدا کند.

### مثال ۲
فرض کنید نمرات پارسال یک استاد به همکلاسی‌ها را داریم و می‌خواهیم قبول یا مردود شدن خود را تخمین بزنیم؛ بنابراین یک جدول می‌کشیم که در آن ویژگی‌هایی که همه همکلاسی‌ها دارند و برای ما مشخص هستند را فهرست می‌کنیم؛ ویژگی‌هایی مانند جنسیت، تأهل و اشتغال را می‌آوریم؛ بنابراین چنین نتیجه می‌شود:
* مؤنث => ۹۰ درصد قبول (برگ)
* مذکر => ۵۰ درصد مردود (تعیین‌کننده نیست (از لحاظ آماری همگن است)، پس تصمیم را می‌شکنیم)
* مذکر + اشتغال => ۶۰ درصد مردود (تقریباً همگن)
* مذکر + اشتغال + تأهل => ۸۵ درصد قبول (برگ)
* مذکر + اشتغال + مجرد => ۷۰ درصد مردود (برگ (چون ویژگی دیگری نداریم))

### مثال ۳
در مجموعه داده گل زنبق، می‌خواهم نوع زنبقی را تخمین بزنم که بردار ویژگی آن x است؛ بنابراین در متلب:

```matlab
clear all
load fisheriris ;% بارگیری مجموعه‌داده گل زنبق
iris_tree = fitctree(meas,species); % ایجاد درخت تصمیم
view(iris_tree,'mode','graph') % توضیح نمودار
x=[6 3 1.5 .3]; % زنبق من
disp(predict(iris_tree,x)) % نتیجه تصمیم
```


## کلیات
در آنالیز تصمیم، یک درخت تصمیم به عنوان ابزاری برای به تصویر کشیدن و آنالیز تصمیم، در جایی که مقادیر مورد انتظار از رقابت‌ها متناوباً محاسبه می‌شود، استفاده می‌گردد. یک درخت تصمیم دارای سه نوع گره‌است:
# گره تصمیم: به‌طور معمول با مربع نشان داده می‌شود.
# گره تصادفی: با دایره مشخص می‌شود.
# گره پایانی: با مثلث مشخص می‌شود.
490px|left

## نمودار درخت تصمیم‌گیری
یک درخت تصمیم می‌تواند خیلی فشرده در قالب یک دیاگرام، توجه را بر روی مسئله و رابطه بین رویدادها جلب کند.

مربع نشان دهنده تصمیم‌گیری، بیضی نشان دهنده فعالیت، و لوزی نشان دهنده نتیجه است.

## الگوریتم ساخت درخت تصمیم‌گیری
مجموع داده‌ها را با D
 نمایش می‌دهیم، یعنی D = (x_1, y_1), \cdots, (x_i, y_i), \cdots, (x_n, y_n)، به قسمی که  x_i \in R^d و y_i \in R. درخت تصمیم‌گیری سعی می‌کند به صورت بازگشتی داده‌ها را به قسمی از هم جدا کند که در هر گِرِه متغیرهای مستقلِ y به هم نزدیک شده همسان شوند. هر گِره، زیر مجموعه ای از داده هاست که به صورت بازگشتی ساخته شده‌است. به‌طور دقیق‌تر در گره m
 اگر داده ما Q
 باشد، سعی می‌کنیم یک بُعد از متغیرهایی وابسته را به همراه یک آستانه  انتخاب کنیم و داده‌ها را برحسب این بُعد و آستانه به دو نیم تقسیم کنیم، به قسمی که به‌طور متوسط در هر دو نیم متغیرهای مستقل یا y خیلی به هم نزدیک و همسان شده باشند. این بعد و آستانه را  \theta = (j, t_m)

 می‌نامیم. دامنه j

 برابر است با [1,\cdots, d]
 و t_m
 یک عدد صحیح است. Q
 برحسب \theta = (j, t_m)

 به دو بخش Q_{left}(\theta)
 و  Q_{right}(\theta)
 به شکل پایین تقسیم می‌شود:

\begin{align}
Q_{left}(\theta) =&  \{(x_i, y_i) \in Q \, |\,  x_{i,j} \leq t_m\}\\
Q_{right}(\theta)=& \{(x_i, y_i) \in Q \, |\,  x_{i,j} > t_m\}\\
\end{align}



حال سؤال اینجاست که کدام بُعد از متغیرهای وابسته و چه آستانه‌ای را باید انتخاب کرد. به زبان ریاضی باید آن \theta

یی را انتخاب کرد که ناخالصی داده را کم کند. ناخالصی برحسب نوع مسئله تعریفی متفاوت خواهد داشت، مثلاً اگر مسئله یک دسته‌بندی دوگانه است، ناخالصی می‌تواند آنتراپی داده باشد، کمترین ناخالصی زمانی است که هم Q_{right}(\theta)
 و هم  Q_{left}(\theta)
 از یک دسته داشته باشند، یعنی در هر کدام از این دو گِرِه دو نوع دسته وجود نداشته باشد. برای رگرسیون این ناخالصی می‌تواند واریانس متغیر وابسته باشد. از آنجا که مقدار داده در Q_{left}(\theta)
 و  Q_{right}(\theta)
 با هم متفاوت است، میانگینی وزن‌دار از هر دو ناخالصی را به شکل پایین محاسبه می‌کنیم. در این معادله N_m = |Q|
، n_{left} = |Q_{left}(\theta)|
 و  n_{right} = |Q_{right}(\theta)|
:

G(Q, \theta) = \frac{n_{left}}{N_m} H(Q_{left}(\theta))
+ \frac{n_{right}}{N_m} H(Q_{right}(\theta))


هدف در اینجا پیدا کردن آن \theta

 یی است که ناخالصی را کمینه کند، یعنی \theta^* = \operatorname{argmin}_\theta  G(Q, \theta)

. حال همین کار را به صورت بازگشتی برای Q_{left}(\theta)
 و  Q_{right}(\theta)
 انجام می‌دهیم. بعضی از گره‌ها را باید به برگ تبدیل کنیم. معیاری که برای تبدیل یک گره به برگ از آن استفاده می‌کنیم، می‌تواند مقداری حداقلی برای N_m
 (تعداد داده در یک گره) یا عمق درخت باشد. به قسمی که اگر با دو نیم کردن گِره یکی از معیارها عوض شود، گِره را به دو نیم نکرده آن را تبدیل به یک برگ می‌کنیم. معمولاً این دو پارامتر باعث تنظیم مدل (Regularization) می‌شوند. در ابتدای کار گره شامل تمام داده‌ها می‌شود یعنی  Q=D.

### مسئله دسته‌بندی
اگر مسئله ما دسته‌بندی باشد و y_i \in [1,\cdots, K]
 باشد تابع ناخالصی برای گره Q
 می‌تواند یکی از موارد پایین باشد، در این معادله‌ها p_{mk} = 1/ N_m \sum_{(x_i, y_i) \in Q} I(y_i = k)

:

ناخالصی گینی: H(Q) = \sum_k p_{mk} (1 - p_{mk})



ناخالصی آنتروپی:  H(Q) = - \sum_k p_{mk} \log(p_{mk})



ناخالصی خطا: H(Q) = 1 - \max(p_{mk})


### مسئله رگرسیون
در مسئله رگرسیون ناخالصی می‌تواند یکی از موارد پایین باشد:

میانگین خطای مربعات:

\begin{align}\begin{aligned}\bar{y}_m = \frac{1}{N_m} \sum_{i \in N_m} y_i\\H(Q) = \frac{1}{N_m} \sum_{i \in N_m} (y_i - \bar{y}_m)^2\end{aligned}\end{align}



میانگین خطای قدر مطلق:

\begin{align}\begin{aligned}\bar{y}_m = \frac{1}{N_m} \sum_{i \in N_m} y_i\\H(Q) = \frac{1}{N_m} \sum_{i \in N_m} |y_i - \bar{y}_m|\end{aligned}\end{align}


## مزایا
در میان ابزارهای پشتیبانی تصمیم، درخت تصمیم و دیاگرام تصمیم دارای مزایای زیر هستند:

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

# مشکل استفاده از درخت‌های تصمیم آن است که به صورت نمایی با بزرگ شدن مسئله بزرگ می‌شوند.
# اکثر درخت‌های تصمیم تنها از یک ویژگی برای شاخه زدن در گره‌ها استفاده می‌کنند در صورتی که ممکن است ویژگی‌ها دارای توزیع توأم باشند.
# ساخت درخت تصمیم در برنامه‌های داده کاوی، حافظه زیادی را مصرف می‌کند زیرا برای هر گره باید معیار کارایی برای ویژگی‌های مختلف را ذخیره کند تا بتواند بهترین ویژگی را انتخاب کند.

## جستارهای وابسته
* تقویت گرادیان
* جدول تصمیم
* پیچیدگی درخت تصمیم
* آنالیز تصمیم
* درخت
* گراف تصمیم
* شبکه تصمیم
* زنجیره مارکف
* دیاگرام تصمیم
* آدابوست

## منابع

* Decision Tree Analysis mindtools.com
* Decision Analysis open course at George Mason University
* Extensive Decision Tree tutorials and examples