درخت تصمیم‌گیری


دسائیج کا درخت (Decision Tree)

اس فصلی میں، ہم آپ کو دکھائیں گے کہ کس طرح 'دسائیج کا درخت' بنایا جاتا ہے۔ دسائیج کا درخت ایک پریزنٹیشن گریفک ہے جو آپ کو پچھلے تجربات کی بنیاد پر فیصلہ کما میں مدد کرتا ہے。

اس مثال میں، ایک شخص اس کو جانا کہ وہ کمدی پروگرام میں شرکت کرنا چاہئے یا نہیں کا فیصلہ کرنے کی کوشش کرے گا。

خوشبختانه، شخصیت نمونه ما هر بار که برنامه کمدی در شہر کا اہتمام کیا جاتا تھا، رجسٹریشن کرتا تھا، اور کمدی اداکاروں کے بارے میں معلومات رجسٹریشن کرتا تھا، اور اس نے اس نے کیا تھا یا نہیں جانا تھا، اس کا رجسٹریشن کرتا تھا。

عمر مہارت Rank Nationality Go
36 10 9 UK NO
42 12 4 USA NO
23 4 6 N NO
52 4 4 USA NO
43 21 8 USA YES
44 14 5 UK NO
66 3 7 N YES
35 14 9 UK YES
52 13 7 N YES
35 5 9 N YES
24 3 5 USA NO
18 3 7 UK YES
45 9 9 UK YES

حالا، بر اساس این مجموعه داده، Python می‌تواند درخت تصمیم را ایجاد کند، این درخت تصمیم می‌تواند برای تصمیم‌گیری در مورد اینکه آیا ارزش شرکت در هر اجرای جدیدی دارد یا خیر، استفاده شود.

روش کار

ابتدا، ماژول‌های مورد نیاز را وارد کنید و داده‌ها را با استفاده از pandas بخوانید:

مثال

داده‌ها را بخوانید و چاپ کنید:

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg
df = pandas.read_csv("shows.csv")
print(df)

اجرای مثال

برای ساخت درخت تصمیم، تمام داده‌ها باید عددی باشند.

ما باید ستون‌های غیر数值ی 'Nationality' و 'Go' را به عددی تبدیل کنیم.

Pandas یک map() این روش، که یک دیکشنری می‌پذیرد، شامل اطلاعات مربوط به نحوه تبدیل مقادیر است.

{'UK': 0, 'USA': 1, 'N': 2}

این به معنای تبدیل مقادیر 'UK' به 0، 'USA' به 1 و 'N' به 2 است.

مثال

مقادیر زبانی را به عددی تبدیل کنید:

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)
print(df)

اجرای مثال

سپس، باید ویژگی‌ها و ستون هدف را از هم جدا کنیم.

ستون ویژگی‌ها ستونی است که از آن تلاش می‌کنیم پیش‌بینی کنیم، ستون هدف استونی است که دارای مقادیری است که تلاش می‌کنیم آن‌ها را پیش‌بینی کنیم.

مثال

X است ستون ویژگی‌ها، y است ستون هدف:

features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)

اجرای مثال

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

مثال

ایک دکشنا درخت بنائیں، اس کو تصویر میں بچائیں اور اس کو نمائش کریں:

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')
img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()

اجرای مثال

نتائج کا تفسیر

دکشنا درخت آپ کی پچھلے فیصلوں کا استعمال کرتا ہے تاکہ آپ کمدین کی کمپیوٹر کی مدد سے دیکھنے کا امکانات کا اندازہ لگا سکتا ہے.

دکشنا درخت کے مختلف جوانب کو پڑھیں:


Rank

Rank <= 6.5 کہ درجہ 6.5 سے نیچے کے کمدین دوسرے طریقوں کی دنبال میں آنے والے کے لئے ہیں True کوسو (دور کی جانب)، بقیہ دوسرے طریقوں کے مطابق ہیں False کوسو (دور کی جانب)。

gini = 0.497 مظنوعی کا تقسیم کا معیار، جو ہمیشہ 0.0 سے 0.5 کے درمیان کا عدد ہوتا ہے، جس میں 0.0 سب نمونوں کا نتیجہ ایک ساتھ ہی رہتا ہے، اور 0.5 تقسیم پوری طرح وسط میں ہوتی ہے。

samples = 13 مظنوعی کا اس مرحلے میں اب 13 کمدین باقی ہیں، کیونکہ یہ پہلا مرحلہ ہے، لہذا وہ سب کمدین ہیں。

value = [6, 7] مظنوعی میں 13 کمدین میں سے 6 کمدین کو "NO" ملے گا، اور 7 کمدین کو "GO" ملے گا。

Gini

مظنوعی کا تقسیم طریقے بہت سے ہیں، ہم اس درس میں GINI طریقہ استعمال کرتے ہیں。

Gini کو مندرجہ ذیل فرمول کا استعمال کیا جاتا ہے:

Gini = 1 - (x/n)2 - (y/n)2

جس میں، x کا معنی اپنے جواب کی تعداد ("GO")، n نمونوں کی تعداد، y منفی جواب کی تعداد ("NO") ہے، اس کا حساب نہیں کیا جاتا، اس کا حساب مندرجہ ذیل فرمول کے ذریعے کیا جاتا ہے:

1 - (7 / 13)2 - (6 / 13)2 = 0.497


آئندہ قدم میں دو مربع شامل ہیں، ایک مربع کمدینوں کے لئے، جس کا 'Rank' 6.5 یا نیچے ہے، اور باقی ایک مربع میں。

True - 5 کمدین یہاں ختم ہوجاتے ہیں:

gini = 0.0 مظنوعی کا نتیجہ تمام نمونوں کا نتیجہ ایک ساتھ ہی رہتا ہے。

samples = 5 مظنوعی کے علاقے میں اب 5 سینکسی کمدین باقی ہیں (5 کا درجہ 6.5 یا نیچے کے کمدین ہیں)。

value = [5, 0] به معناى اين كه 5 كسي "NO" خواهد گرفت و 0 كسي "GO" خواهد گرفت.

False - هشت نمايشه‌كار تئاتر ادامه مى‌دهند:

Nationality (مليت)

Nationality <= 0.5 به معناى اين كه نمايشه‌كارهايى كه ارزش ملي آنها كمتر از 0.5 است، از شاخه چپ پيروى خواهند كرد (به معناى همه كسانى كه از بريتانيا هستند)، بقيه از شاخه راست.

gini = 0.219 يعني حدود 22٪ از نمونه‌ها به يك جهت حركت خواهند كرد.

samples = 8 به معناى اين كه در اين شاخه هنوز هشت نمايشه‌كار كمدى باقي مانده است (هشت نمايشه‌كار كمدى با رتبه بالاتر از 6.5).

value = [1, 7] به معناى اين كه در بين هشت نمايشه‌كار كمدى، يك كسي "NO" خواهد گرفت و هفت كسي "GO" خواهد گرفت.


True - چهار نمايشه‌كار تئاتر ادامه مى‌دهند:

Age (سن)

Age <= 35.5 به معناى اين كه نمايشه‌كارهايى كه سن آنها 35.5 سال يا كمتر است، از شاخه چپ پيروى خواهند كرد و بقيه از شاخه راست.

gini = 0.375 يعني حدود 37.5٪ از نمونه‌ها به يك جهت حركت خواهند كرد.

samples = 4 به معناى اين كه در اين شاخه هنوز چهار نمايشه‌كار كمدى باقي مانده است (چهار نمايشه‌كار كمدى از بريتانيا).

value = [1, 3] به معناى اين كه در بين چهار نمايشه‌كار كمدى، يك كسي "NO" خواهد گرفت و سه كسي "GO" خواهد گرفت.

False - چهار نمايشه‌كار كمدى به اينجا كار كردند:

gini = 0.0 نشان‌دهنده این است که همه نمونه‌ها نتایج مشابهی دارند.

samples = 4 به معناى اين كه در اين شاخه هنوز چهار نمايشه‌كار كمدى باقي مانده است (چهار نمايشه‌كار كمدى از بريتانيا).

value = [0, 4] به معناى اين كه در بين چهار نمايشه‌كار كمدى، 0 كسي "NO" خواهد گرفت و 4 كسي "GO" خواهد گرفت.


True - 2 نمايشه‌كار كمدى دراين كار كردند:

gini = 0.0 نشان‌دهنده این است که همه نمونه‌ها نتایج مشابهی دارند.

samples = 2 به معناى اين كه در اين شاخه هنوز 2 نمايشه‌كار كمدى باقي مانده است (2 نمايشه‌كار كمدى با سن 35.5 سال يا جوانتر).

value = [0, 2] به معناى اين كه در بين دو نمايشه‌كار كمدى، 0 كسي "NO" خواهد گرفت و 2 كسي "GO" خواهد گرفت.

False - 2 نمايشه‌كار تئاتر ادامه مى‌دهند:

Experience (تجربه)

Experience <= 9.5 به معناى اين كه نمايشه‌كارهايى كه تجربه 9.5 سال يا بيشتر دارند، از شاخه چپ پيروى خواهند كرد و بقيه از شاخه راست.

gini = 0.5 به معناى اين كه 50٪ از نمونه‌ها به يك جهت حركت خواهند كرد.

samples = 2 به معناى اين كه در اين شاخه هنوز 2 نمايشه‌كار كمدى باقي مانده است (2 نمايشه‌كار كمدى با سن بيش از 35.5).

value = [1, 1] به معناى اين كه در بين دو نمايشه‌كار كمدى، 1 كسي "NO" خواهد گرفت و 1 كسي "GO" خواهد گرفت.


True - 1 نمايشه‌كار كمدى دراين كار كرد:

gini = 0.0 نشان‌دهنده این است که همه نمونه‌ها نتایج مشابهی دارند.

samples = 1 نشان‌دهنده این است که در این شاخه هنرپیشه کمدی دیگری باقی مانده است (یکی از آنها هنرپیشه‌ای با تجربه 9.5 سال یا کمتر است).

value = [0, 1] نشان‌دهنده این است که 0 نشان‌دهنده "NO" و 1 نشان‌دهنده "GO" است.

False - هنرپیشه کمدی 1 تا اینجا آمده است:

gini = 0.0 نشان‌دهنده این است که همه نمونه‌ها نتایج مشابهی دارند.

samples = 1 نشان‌دهنده این است که در این شاخه هنرپیشه کمدی دیگری باقی مانده است (یکی از آنها هنرپیشه‌ای با تجربه بیش از 9.5 سال است).

value = [1, 0] 1 نشان‌دهنده "NO" و 0 نشان‌دهنده "GO" است.

مقادیر پیش‌بینی شده

ما می‌توانیم از درخت تصمیم‌گیری برای پیش‌بینی مقادیر جدید استفاده کنیم.

مثلاً: آیا باید برنامه‌ای را که توسط یک هنرپیشه کمدی 40 ساله با 10 سال تجربه اجرا می‌شود و رتبه کمدی 7 دارد، ببینم؟

مثال

استفاده predict() روش‌هایی برای پیش‌بینی مقادیر جدید:

print(dtree.predict([[40, 10, 7, 1]]))

اجرای مثال

مثال

اگر درجه کمدی 6 باشد، پاسخ چیست؟

print(dtree.predict([[40, 10, 6, 1]]))

اجرای مثال

نتایج متفاوت

اگر به اندازه کافی بار اجرا شود، حتی اگر داده‌های شما مشابه باشد، درخت تصمیم‌گیری نتایج متفاوتی به شما ارائه می‌دهد.

این به این دلیل است که درخت تصمیم‌گیری نمی‌تواند به ما پاسخ 100% قطعی بدهد. آن بر اساس احتمالات نتایج است و پاسخ‌ها می‌تواند متفاوت باشد.