درخت تصمیمگیری
- صفحه قبلی تمرین/تست
- صفحه بعدی ورود به MySQL

دسائیج کا درخت (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% قطعی بدهد. آن بر اساس احتمالات نتایج است و پاسخها میتواند متفاوت باشد.
- صفحه قبلی تمرین/تست
- صفحه بعدی ورود به MySQL