دروس بايثون

بايثون هوم مقدمة بايثون ابدأ بايثون بناء جملة بايثون تعليقات بايثون متغيرات بايثون أنواع بيانات بايثون أرقام بايثون صب بايثون سلاسل بايثون بايثون منطقية مشغلي بايثون قوائم بايثون Python Tuples مجموعات بايثون قواميس بايثون بيثون إذا ... آخر بايثون أثناء التكرار بايثون للحلقات وظائف بايثون بيثون لامدا صفائف بايثون فئات / كائنات بايثون وراثة بايثون تكرارات بايثون نطاق بايثون وحدات بايثون تواريخ بايثون الرياضيات بايثون Python JSON لغة Python RegEx Python PIP بايثون جرب ... ماعدا مدخلات مستخدم بايثون تنسيق سلسلة Python

التعامل مع الملف

التعامل مع ملف بايثون ملفات قراءة بايثون Python كتابة / إنشاء ملفات بايثون حذف الملفات

وحدات بايثون

برنامج NumPy التعليمي تجول الباندا البرنامج التعليمي Scipy

بيثون ماتبلوتليب

مقدمة ماتبلوتليب ابدأ Matplotlib Matplotlib Pyplot ماتبلوتليب بالتآمر علامات Matplotlib خط ماتبلوتليب تسميات Matplotlib شبكة Matplotlib المؤامرات الفرعية Matplotlib مبعثر Matplotlib قضبان ماتبلوتليب الرسوم البيانية Matplotlib المخططات الدائرية Matplotlib

التعلم الالي

ابدء يعني وضع متوسط الانحراف المعياري النسبة المئوية توزيع البيانات توزيع البيانات العادي مؤامرة مبعثر الانحدارالخطي الانحدار متعدد الحدود الانحدار المتعدد حجم تدريب / اختبار شجرة القرار

Python MySQL

ابدأ MySQL MySQL إنشاء قاعدة بيانات إنشاء جدول MySQL إدراج MySQL حدد MySQL MySQL أين ترتيب MySQL حسب حذف MySQL جدول إسقاط MySQL تحديث MySQL حد MySQL انضم إلى MySQL

Python MongoDB

ابدأ MongoDB MongoDB إنشاء قاعدة بيانات MongoDB إنشاء مجموعة إدراج MongoDB البحث عن MongoDB استعلام MongoDB نوع MongoDB MongoDB يحذف مجموعة MongoDB Drop تحديث MongoDB حد MongoDB

مرجع بايثون

نظرة عامة على بايثون وظائف بايثون المضمنة طرق سلسلة بايثون طرق قائمة بايثون طرق قاموس بايثون طرق Python Tuple طرق تعيين بايثون طرق ملف بايثون كلمات بايثون استثناءات بايثون مسرد بايثون

مرجع الوحدة

وحدة عشوائية وحدة الطلبات وحدة الإحصاء وحدة الرياضيات وحدة cMath

كيف بايثون

إزالة قائمة التكرارات عكس سلسلة أضف عددين

أمثلة بايثون

أمثلة بايثون مترجم بايثون تمارين بايثون مسابقة بايثون شهادة بايثون

التعلم الآلي - شجرة القرار



شجرة القرار

في هذا الفصل سوف نوضح لك كيفية عمل "شجرة قرارات". شجرة القرار هي مخطط انسيابي ، ويمكن أن تساعدك في اتخاذ القرارات بناءً على الخبرة السابقة.

في المثال ، سيحاول الشخص أن يقرر ما إذا كان يجب عليه / عليها الذهاب إلى عرض كوميدي أم لا.

لحسن الحظ ، قام شخص مثالنا بالتسجيل في كل مرة كان هناك عرض كوميدي في المدينة ، وقام بتسجيل بعض المعلومات حول الممثل الكوميدي ، كما تم تسجيله إذا ذهب أم لا.

عمر خبرة مرتبة جنسية يذهب
36 10 9 المملكة المتحدة رقم
42 12 4 الولايات المتحدة الأمريكية رقم
23 4 6 ن رقم
52 4 4 الولايات المتحدة الأمريكية رقم
43 21 8 الولايات المتحدة الأمريكية نعم
44 14 5 المملكة المتحدة رقم
66 3 7 ن نعم
35 14 9 المملكة المتحدة نعم
52 13 7 ن نعم
35 5 9 ن نعم
24 3 5 الولايات المتحدة الأمريكية رقم
18 3 7 المملكة المتحدة نعم
45 9 9 المملكة المتحدة نعم

الآن ، بناءً على مجموعة البيانات هذه ، يمكن لـ Python إنشاء شجرة قرار يمكن استخدامها لتحديد ما إذا كانت أي عروض جديدة تستحق الحضور.



كيف يعمل؟

أولاً ، قم باستيراد الوحدات التي تحتاجها ، واقرأ مجموعة البيانات باستخدام الباندا:

مثال

قراءة وطباعة مجموعة البيانات:

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)

لصنع شجرة قرار ، يجب أن تكون جميع البيانات رقمية.

علينا تحويل العمودين غير العدديين "الجنسية" و "الذهاب" إلى قيم عددية.

لدى 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 <= 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 على "لا" ، وسيحصل 7 على "GO".

جيني

هناك طرق عديدة لتقسيم العينات ، نستخدم طريقة GINI في هذا البرنامج التعليمي.

تستخدم طريقة جيني هذه الصيغة:

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

أين xهو عدد الإجابات الإيجابية ("GO") ، nوعدد العينات ، yوعدد الإجابات السلبية ("NO") ، مما يعطينا هذا الحساب:

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

تحتوي الخطوة التالية على صندوقين ، صندوق واحد للممثلين الكوميديين الحاصلين على "رتبة" 6.5 أو أقل ، ومربع واحد بالباقي.

صحيح - ينتهي 5 كوميديين هنا:

gini = 0.0يعني أن جميع العينات حصلت على نفس النتيجة.

samples = 5يعني أن هناك 5 فنانين كوميديين بقوا في هذا الفرع (5 فنانين كوميديين بدرجة 6.5 أو أقل).

value = [5, 0]يعني أن الرقم 5 سيحصل على "NO" و 0 سيحصل على "GO".

خطأ - 8 فنانين كوميديين يتابعون:

جنسية

Nationality <= 0.5يعني أن الكوميديين الذين تقل قيمة الجنسية لديهم عن 0.5 سيتبعون السهم الموجود على اليسار (مما يعني كل شخص من المملكة المتحدة) ، وسيتبع البقية السهم إلى اليمين.

gini = 0.219يعني أن حوالي 22٪ من العينات ستذهب في اتجاه واحد.

samples = 8يعني أن هناك 8 فنانين كوميديين بقوا في هذا الفرع (8 كوميديين بدرجة أعلى من 6.5).

value = [1, 7]يعني أنه من بين هؤلاء الكوميديين الثمانية ، سيحصل 1 على "لا" و 7 سيحصل على "GO".




صحيح - يتابع 4 كوميديين:

عمر

Age <= 35.5يعني أن الكوميديين في سن 35.5 أو أقل سيتبعون السهم إلى اليسار ، وسيتبع الباقون السهم إلى اليمين.

gini = 0.375يعني أن حوالي 37.5٪ من العينات ستذهب في اتجاه واحد.

samples = 4يعني أن هناك 4 فنانين كوميديين بقوا في هذا الفرع (4 كوميديين من المملكة المتحدة).

value = [1, 3]يعني أن من بين هؤلاء الكوميديين الأربعة ، 1 سيحصل على "لا" و 3 سيحصل على "GO".

خطأ - ينتهي 4 فنانين كوميديين هنا:

gini = 0.0يعني أن جميع العينات حصلت على نفس النتيجة.

samples = 4يعني أن هناك 4 فنانين كوميديين بقوا في هذا الفرع (4 كوميديين ليسوا من المملكة المتحدة).

value = [0, 4]يعني أنه من بين هؤلاء الكوميديين الأربعة ، سيحصل 0 على "لا" وسيحصل 4 على "GO".




صحيح - ينتهي اثنان من الكوميديين هنا:

gini = 0.0يعني أن جميع العينات حصلت على نفس النتيجة.

samples = 2يعني أن هناك فنانين كوميديين متبقين في هذا الفرع (ممثلان كوميديان في سن 35.5 أو أقل).

value = [0, 2] يعني أنه من بين هذين الكوميديين ، سيحصل 0 على "NO" وسيحصل 2 على "GO".

خطأ - يستمر اثنان من الكوميديين:

خبرة

Experience <= 9.5 يعني أن الكوميديين الذين لديهم 9.5 سنوات من الخبرة ، أو أقل ، سيتبعون السهم إلى اليسار ، والباقي سيتبعون السهم إلى اليمين.

gini = 0.5 يعني أن 50٪ من العينات ستذهب في اتجاه واحد.

samples = 2 يعني أن هناك فنانين كوميديين متبقين في هذا الفرع (ممثلان كوميديان أكبر من 35.5 عامًا).

value = [1, 1] يعني أنه من بين هذين الكوميديين ، سيحصل 1 على "لا" والآخر سيحصل على "GO".




صحيح - ينتهي ممثل كوميدي واحد هنا:

gini = 0.0يعني أن جميع العينات حصلت على نفس النتيجة.

samples = 1 يعني أنه لا يزال هناك ممثل كوميدي واحد في هذا الفرع (ممثل كوميدي واحد لديه خبرة 9.5 سنوات أو أقل).

value = [0, 1] يعني أن 0 سيحصل على "NO" وسيحصل 1 على "GO".

خطأ - ينتهي ممثل كوميدي واحد هنا:

gini = 0.0يعني أن جميع العينات حصلت على نفس النتيجة.

samples = 1يعني أنه لا يزال هناك ممثل كوميدي واحد في هذا الفرع (ممثل كوميدي واحد يتمتع بخبرة تزيد عن 9.5 سنوات).

value = [1, 0]يعني أن 1 سيحصل على "NO" و 0 سيحصل على "GO".


توقع القيم

يمكننا استخدام شجرة القرار للتنبؤ بالقيم الجديدة.

مثال: هل يجب أن أذهب لمشاهدة عرض بطولة فنان كوميدي أمريكي يبلغ من العمر 40 عامًا ، ولديه 10 سنوات من الخبرة ، وترتيب كوميدي في المرتبة 7؟

مثال

استخدم طريقة التنبؤ () للتنبؤ بالقيم الجديدة:

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

مثال

ماذا سيكون الجواب لو كانت مرتبة الكوميديا ​​6؟

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


نتائج مختلفة

سترى أن شجرة القرار تمنحك نتائج مختلفة إذا قمت بتشغيلها مرات كافية ، حتى إذا قمت بإطعامها بنفس البيانات.

وذلك لأن شجرة القرار لا تعطينا إجابة مؤكدة بنسبة 100٪. يعتمد على احتمال وجود نتيجة ، وستختلف الإجابة.