بسم الله والحمد لله والصلاة والسلام على رسول الله
أهلا وسهلا بكم في محاضرتنا المستمرّة... في
محاضراتنا المستمرّة في مساق الـ data mining وما زلنا
نتكلم في باب الـ classification، وبالتحديد سنتكلم
اليوم على decision tree induction. كنا في المحاضرات
السابقة، أو المحاضرة الأخيرة، أضفنا شغلة جديدة. كنا
نتكلم على الـ Naive Bayes. كانت فعليًا
هي واحدة من الـ probabilistic approach المستخدمة
في الـ machine learning من أجل الـ classification.
وقلنا إنّه يلزمنا أن نقوم بحساب لمجموعة من
probabilities. أنا عندي الـ instance اللي بدي...
اللي هي الـ unseen instance اللي أنا بدي أعمل لها
classification بناءً على... وبالتالي الـ class
الطبعة للـ instance هذه الموجودة عندي تساوي
maximum probability للـ probabilities of the class.
في احتمالية أن تكون الـ instance هذه مع الـ class
المعين. ولما رجعنا بالتفصيل، قلت أنا فعليًا بحاجة
أن آخذ هذه الـ data set، وأذهب لأنشئ الجدول هذا بحيث أنني
أذهب، حسبت الـ probability لكل element أو لكل
classes الموجودة عندي. ومن ثم انتقلنا في الخطوة
التي بعدها، أخذت الـ attributes التي من المفترض
التي من المفترض أن يكون لديها nominal attributes، أخذت
distinct values، وعملت حساب لكل واحدة منهم، وانتبهوا
دائمًا، وانتبهوا دائمًا أنني فعليًا هنا قاعد بأشتغل على
أن الـ probability نفسها، يعني الآن عدد الـ yes في الـ
data، اللي عندي هنا 4 على 10. ومن ثم مع كل route
أو كل attribute تحت الـ yes سيكون 4، وكل مجموع
العناصر تحت كل no سيكون 6، وهكذا. وهذا مفتاح
النجاح، للعناصر الموجودة. ولما جئنا نُصنّف الـ
sunny والـ mild والـ high، قلنا حسبت الـ
probability للـ yes التي كانت 4 على 10 في الـ
probability للـ sunny على الـ yes، وقلنا هذا الجدول
الأساس في الموضوع، هي sunny و yes، هيها 4 على 10
مضروبة في العنصر الثاني، كانت mild، الـ probability
تبعت الـ mild، يعني بين قوسين هي الـ yes هذه مضروبة
في هذه في الـ mild في الـ high، وهذه العناصر كانت
تمثّل الـ probability. فأنا حسبت الـ probability للـ
different classes الموجودة عندي، وأخذت الـ
maximum probability، على أن هذه هي الأكثر احتمالية
في موضوع أن هذا العنصر أو هذه الـ instance تنتمي للـ
class الموجودة عندها. الآن اليوم إن شاء الله
سنتنتقل إلى الموضوع الجديد، وهو موضوع الـ
decision tree في التعامل أو كـ different classifier.
الـ decision tree هي واحدة من الـ classifiers المهمة
جدا، المستخدمة في موضوع الـ classification، وأهميتها
أنّي أمكنني أن أرسم الشجرة، وبالتالي يصير تفسير
الـ model الموجود عندي، أو فهم الـ model الذي عندي
أكثر من غيره. على سبيل المثال، قلنا في الـ
classifier الماضي، وهو naive Bayes، أنني فعليًا
عند الـ classifier هذا، مهم أو جيد، لأنه أنا أقدر
أفسر لماذا النتيجة طلعت معي هكذا، بناءً على
الاحتمالات الموجودة. في الـ decision tree كذلك، في
decision tree هي عبارة عن أنني فعليًا أُبني
decision tree. أيها السادة، لما أنا بأتكلم على
decision tree، تذكروا، دعونا نتذكر بسرعة الـ
binary search tree. لا أريد أكثر من ذلك. الـ binary
search tree كانت عناصرها أنّ كل node على
الأكثر لديها two child، صحيح؟ هذه هي الـ binary tree.
وكان فيه rule يحكمها، الـ rule أنني في الـ binary
search tree، أنّ كل القيم التي على اليمين هنا ستكون
أكبر من الـ element، وكل القيم التي موجودة عندها هنا
ستكون أصغر. طيب، القيم المتساوية؟ مالها وجود، المكررة
مالها وجود. وبالتالي الـ element مع كل node، الـ node
التي عندها القيم الموجودة هنا ستكون أصغر من القيم
التي موجودة هنا، وهذه طبيعتها ستكون أصغر من القيم
التي موجودة عندها. بمعنى آخر، أنّ الـ structure تبع الـ
decision tree، أنا بالفعل أعرفها، هي عبارة عن
مجموعة من الـ nodes والـ connection أو الـ connected
أو الـ graph with no circuit، زي ما كنا نسميها في الـ
discrete mathematics، أشبه بالـ flow chart، زي ما
قلنا سابقًا. في عندي الـ internal node، واللي أنا
فعليًا هي الـ value تبعها... ستمثل الـ value تبع الـ
attribute التي سأحمل عليها الفحص، سأسأل: كم الـ GPA
أكبر أو تساوي كذا، أذهب يمينًا، أقل أو false، أذهب يسارًا.
وهكذا. فهذه الـ internal node، التي هي عادة non-leaf،
تحدد الـ test تبع الـ attribute، الـ branch يمثل الـ
outcome، وصولًا للـ leaf الموجودة عندي، والـ leaf
node تمثّل الـ class، وطبعًا لازم كل شجرة يكون لها
root node. تعالوا نشوف الـ data set البسيطة التي
موجودة عندنا. هذه الـ data set مكوّنة من 14 row، الـ
Age والـ income والـ student والـ credit rating والـ
class تبعي. وطبعًا، أيها السادة، لما نحن نذهب
باتجاه الـ binary class، يعني two classes، الأمر الذي
أسهل، لأجل استيعاب ماذا يحدث، لأنه لما تصبح عندي
ثلاثة، ستتشعب الأمور قليلًا في الحساب، لكنّها
عبارة عن تكرار لما سبق. الآن أنا... عندي مجموعة
من الطلاب، أو بيانات مجموعة من الناس الذين اشتروا
حاسبات. والـ data set كانت قديمة، في الـ 2000، وكان
يسأل: هل هذا الشخص مؤهّل، أو ممكن، مع احتمال أن يشتري
جهازًا أم لا، بناءً على حالته. الـ age، لاحظوا الـ age، أنا
أتكلم على discrete أو categorial data. الـ income،
high و low و medium. طالب أم غير طالب، yes أو no. والـ
credit rating، عادي أو معتدل أو excellent.
بالنسبة للمتوسط الراتب تبعه، وفي الآخر الـ class
الموجودة عندهم. الآن، لما أنا بدي أبني tree، الـ
tree ستأخذ بالشكل هذا. دعونا، لأجل أن نأخذ على
السريع، نأخذ الـ role أولًا، لأجل أن نتذكر، ونشوف كيف بدي
أتناول الـ tree، أو كيف تعمل كـ classifier. yes،
high، no، fair.
الـ target تبعي؟ لا، هذا أول row. بس أنا، لأجل أن أغيّر،
بدي أحط هنا yes، لأجل أن تصبح هذه الـ data أشبه بالـ
unseen، وأشوف بالـ classification تبعها كيف بدها
تكون. الآن، زي ما قلنا، لدينا الـ age، الـ income،
student،
وفي الآخر التي هي الـ credit
rate. حاجة على decision tree. الـ decision tree أو الـ
model، لما تم بناؤه، جاء يقول: أهم element في
القرار عندي، الـ age. وسنتعرّف كمان لحظات، إن شاء الله
تعالى، كيف نحن اخترنا الـ age. لماذا لم تكن
student، أو لـ credit rating، التي هي الـ attributes
الأخرى؟ ولاحظوا أنّ عندي، بالكامل، عندي
attribute غائب، وهو موضوع الـ income في الـ
decision tree الموجودة عندي. يعني هو كأنه يقول
الـ income هنا ليس له تأثير كثير على الـ decision
أو على القرار الموجود عندي. طيب، كيف هذا الكلام
صار؟ سنراه قليلًا، لماذا؟ في دلالة أخرى هنا، يأتي
يقول إنّ الـ income الأقل تأثيرًا، أو ليس له تأثير، يعني
بإمكاني أن أشيله، أو أستغني عنه. بجمع البيانات الأخرى
ستكون أسهل. الآن، الـ age: youth, middle age، و senior.
في عندي تفرعات أخرى؟ لا، هؤلاء الـ three discrete
values الموجودة عندي بالـ age، تمام؟ حسب الـ rule
عندنا هنا، هي الـ age. إذا أنا سألته age، يعني خلاص كل
branch السابق هذه ليس لي دخل بها. إذا كان هو
student، غالبًا سيشتري، ولن أبحث عن المزيد، لن
تحتاجني. تعالوا، طلع معي هنا.
وهذا الطالب سيكون يشتري كمبيوتر، لماذا؟ لأنّ إذا
كان هو في الـ middle age، أو في الـ youth، صغير أو شاب
يافع وطالب في نفس الوقت، يعني طالب جامعة، فغالبًا
هذا سيحتاج كمبيوتر، ومن ثم سيذهب ليشتريه. لو أنا بدي
أعود إلى الـ data set الموجودة عندي هنا، youth و
student و fair، yes. youth، student، و fair،
لأجل أن تلاحظوا أنّ هذين هما اللذان كانا أكثر
تأثيرًا في حالة الـ elements الموجودة. وهكذا، لو
كان still age في الـ middle age، مباشرة سيكون يشتري
الـ attribute، لو كان senior،
والـ income rate الذي عنده fair، غالبًا لن يشتريه.
وهكذا تصبح موضوع الـ decision أو موضوع الـ
classification. يعني الـ leaves التي عندي في الـ node
أو عفواً في الـ... في الـ trees، الـ leaf nodes تمثّل
الـ classes التي أنا أبحث عنها. وطبعًا عمق
الشجرة وحجمها مرتبط بعدد الـ attributes وحجم الـ
data set الموجودة عندي.
الآن، الـ algorithm المستخدم مع الـ decision tree،
وهو الـ basic algorithm، نسميه C4.5. وهذا يعمل
في مبدأ الـ top-down recursive divide and conquer.
الآن، الناس الذين أخذوا خوارزميات، حتمًا مرّ عليهم مصطلح
divide and conquer. الفكرة في الـ algorithm هذا، أنّ
المشكلة الكبيرة نجزّئها، ونستطيع السيطرة عليها. يعني
بنجزئها، نحل جزء جزء من الـ data set الموجودة عندك
هنا، وسنرى قليلًا. وهذا المبدأ هو مبدأ الـ
greedy، طبعًا. ومن ثم الـ algorithm هذا أخذ الـ greedy
algorithm. ماذا يعني greedy؟ يعني الطماع. فكرته، بكل
بساطة، أنني أنظر إلى best solution في الـ current
stage، لا أهتم على المدى البعيد، ماذا سيحدث عندي؟
سأبدأ مع كل examples، سآخذ مع الـ data الـ attributes
لكل الـ data set، وأذهب لأجل أن أوجد، أو أجد من
خلالها الـ root. الآن، كل الـ data set التي عندي هنا
must be categorical. الآن في الـ C4.5، كل الـ
attribute لازم تكون categorical. طيب، أنا ما عنديش، أنا
عندي continuous value، سأقوم بعمل discretization، ولكل
بإمكاني أن أُعطيها label، وأعتمد، أشتغل على الـ label الموجودة
عندك هنا. يعني لما تأتي مثلاً الـ age، نقول والله
youth من 16 مثلاً إلى 22، youth. الـ
age، أقول مثلاً من 23 إلى 35، senior.
وبالتالي أنا أقدر أشتغل... بما أنّ الـ algorithm يريد
مني discrete أو nominal data، فأقدر أعمل
discretization، أعمل binning، وبعد ذلك أذهب، أضع
label لكل bin أو لكل interval في الـ continuous
attribute الموجودة عندهم. وعلى الرغم من ذلك، سأتكلم
كذلك قليلًا، بشكل بسيط، في موضوع، فعليًا كيف أمكنني
أفحص لو كان عندي continuous. في algorithms مختلفة.
طيب.
ممتاز. معناته أنا فعليًا سآخذ الـ data set، وأبدأ أمرر
على كل attribute وعلى كل الـ rows، وأُجزّئ العناصر 175 00:12:0
student فكانت هي الـ student الـ student هدفي yes و
no بناء عليه، الـ data set بتنجي سيملة two data sets
كمان مرة واحدة مع الـ yes و واحدة مع الـ no، و بنقل
طبعا بما أنه أنا student yes و no بروح بدور صارت
هدولة بينتموا لدولة class و هدولة كل partition بينتموا لـ
الـ class معناته أنا وجفت، طيب فحصت الـ .. عفوا، فحصت
الـ age و فحصت الـ student و فحصت الـ income و في
الآخر، لاجيت أن أنا فعليا ما فيش عندي attributes
فخلصنا، فهذه الـ condition أو stopping conditions
اللي أنا ممكن أوقف عليها طالما الـ data ستة بقت
كبيرة و فيها شغل، الـ decision tree بياخد مني وقت طويل في
موضوع القرار اللي موجود هنا، كمان مرة بلخص بشكل
سريع، متى أنا ممكن أوقف، أظل أبحث، مين اللي بيحدد الـ
depth تبعت letter E، الـ depth تبعت letter E تحدد
تبع الـ dimensionality تبع الـ data set، عدد الـ
attributes و عدد الـ rows، الآن متى بدي أوقف؟ لما
تكون كل الـ sample في الـ given node تنتمي لنفس الـ
class، يعني لما أنا اخترت الـ attribute و روحت أعمل
split، لاجيت واحدة من الـ partitions اللي موجودة
بتنتمي لنفس الـ class، خلاص، هاد ابني، ما فيش فيها شغل
لإن هاد الـ decision تبعتها مباشرة، لإنها بتنتمي
لنفس الـ class، معناته خلاص وصلت لـ leave node، الـ
leave node تبعتي، الـ leave node، الـ leave، لما الخيار
التاني، أنه لما بكون فعليا أنا عملت splitting للـ
data set على كل الـ attributes و خلصت الـ attributes
تبعتي، برضه ما عنديش شغل، و there is no sample left
ما بقاش عندي ولا حاجة في الـ data set عشان أجسمها
على مستوى الرأس، تعالوا نروح مع بعض من خلال نشوف الـ
information gain و هي الأكثر و الأشهر استخداما، و
الـ Gain Index، هنتكلم على الـ information gain بكل
بساطة، الـ information gain بتعتمد على الـ
probability، مش إحنا قلنا قبل شوية موضوع الـ
splitting أو الفصل في الـ attributes بيعتمد اعتمادا
كله على فعليا العناصر اللي موجودة، على احتمال
يقول لنا إما heuristic rules أو statistical
measurement، لما بتكلم على probability معناته أنا
جاي بتكلم على احتمالات، الـ statistics إلى آخره
بقول، افترض أن الـ P I هي عبارة عن الـ probability
of an arbitrary tuple في الـ data الـ 6 تبعتي
تبعتي تبعتي تبعتي تبعتي تبعتي تبعتي تبعتي تبعتي
تبعتي تبعتي تبعتي تبعتي تبعتي تبعتي تبع
الـ Probability للـ CD، الـ CI على الـ D، على كل
Probability تبع الـ data set اللي موجودة، بكل بساطة
أنا في عندي تلت عمليات حسابية هعملها عشان آخد الـ
decision و أحدد من الـ test node اللي موجود عندي
الأولى، هسميها الـ expected information أو الـ
entropy، وهي لكل الـ data set اللي موجودة عندي هنا
شو يعني؟ الآن مطلوب مني أن أحسب الـ information أو
الـ entropy للـ classes اللي موجودة في الـ data set
لكل الـ data set، وهنا بنجو سين، وكأني بده يقول لي
احسب احتمالية، أو احسب الـ probability لكل class في
الـ data set، عدد مرات ظهور الـ class في الـ data set
اللي موجودة عندي هنا، وبعد هيك بروح أطبق عليهم
العملية، يعني أنا لو كنت على سبيل المثال، الـ data 6
تبعتي فيها عشر elements، أربعة منهم yes وستة منهم no
أنا
في عيني بتكلم على binary classification yes or no
أربعة yes وستة no، الـ information gained للـ data 6
تبعتي كلها هي عبارة عن مجموع ناقص
مضروبة فيه الـ probability تبعت الـ data الأولى
احتمال الـ class الأول 4 على 10 مضروبة في log الـ 4
على 10 للأساس 2، زائد
6 على 10 مضروبة في الـ logarithm 6 على 10، الـ
logarithm، الـ binary logarithm، وهكذا، ليش القيمة
هتداني إشارة سالبة؟ لأن الـ logarithm تبعت الـ binary
بتاعة الكسل هتطلع عندي سالب، وإذا بتذكروا، في عندي
log الـ X على الـ Y تساوي log X ناقص log Y، وبما أن الـ
Y عندي أكبر من الـ X فستكون القيمة اللي عندي سالبة
عشان أنا أخلص منها، أخلص منها، فكانت القيمة اللي
عندي هنا هتطلع قيم موجبة، واضح الأمور إن شاء الله
يا جماعة الخير، الآن يعني أول شغلة فعليا أنا هسويها
هروح أحسب الـ probability لكل class أو بين جثين
هحسب الـ entropy، هي عبارة عن حاصل .. عبارة عن مجموع
حاصل ضرب الـ probability لكل class في الـ logarithm
أو الـ binary log لـ الـ probability لـ الـ class اللي
موجود عندي، و زي ما بقوله بالـ .. بالـ .. بالـ ..
بالمثال يتضح، كمان شوية هنتقل للمثال
بالتفصيل إن شاء الله تعالى، الخطوة اللي بعد هيك بدي
أروح لكل attribute A، أحاول فعليا أجسم الـ data set
لمجموعة من الـ partitions، جداش عدد الـ V هذه، أو جداش
عدد الـ partitions، بعدد الـ distinct values اللي
موجودة عندي في الـ attribute، يعني الـ age كان في
عندي تلاتة، three values، يث و middle age و
senior، ففعليا الـ attribute الـ age هي
الـ Attribute الـ Age، يث و Middle Age و senior
هي الـ three distinct values، ففعليا بناء على الـ
attribute هذا، هجسم الـ data set تبعتي كلها لـ three
.. لـ three subsets، لـ three partitions، مع كل واحدة
من الـ values اللي موجودة عندي هنا، عشان أنا فعليا
أروح أحسب الـ information للـ attribute اللي موجودة
عندها، إيش الـ information للـ attribute؟ الـ
information للـ attribute يساوي الـ summation، احتمال
الـ element اللي عندي، أو الـ class اللي موجودة عندي
هنا للـ attribute، فيه الـ information تبعت الـ subset
اللي موجودة، يعني بين جسيم الـ subset الجديدة، أنا
هشتغل عليها، و أحسبها، الـ intro b السابقة، بعد ما
أحسب الـ information للـ attribute، الـ gain، الانحياز
لـ الـ element اللي موجود عندي هنا، أو التحصيل اللي
ممكن نسميه التحصيل الـ a، هي عبارة عن الـ
information للـ D الأولى، ناقص الـ information أو الـ
entropy تبعت الـ attribute اللي عندي، الـ entropy
تبعت الـ attribute اللي عندي، يعني أنا فعليا هاخد
هاي و هايهطرحهم من بعض، بس ما تنسوش أن فعليا هذه
هي نفسها اللي فوق، بس على different subset أو على
different data set أو بين جسين، على subset set تبعا
للـ values اللي جسمتها، للـ partition اللي جسمتها ليها
الـ attribute اللي عندنا، تعالوا نروح هنا و نشوف
المثال اللي موجود عندنا، قلنا في الخطوة رقم واحد، في
الخطوة رقم واحد، قلنا أنا اتفقنا أن أنا فعليا هروح
أحسب الـ information gain أو الـ entropy لكل الـ data
set، ممتاز، عشان أحسب الـ entropy لكل الـ data set
بنذكر، قلنا هو عبارة عن الـ summation، سالب واحد في
الـ summation في probability للـ I في log لـ الـ P I
الـ probability للـ I، وإيش قلنا؟ هاي الـ class، والـ I
بيتساوى من واحد لعدد الـ classes اللي موجودة
حسب الـ data set اللي موجودة عندها، حسب الـ data set
اللي موجودة عندها، أنا في عندي two different
classes، only two different classes only، اللي هم
yes و no، حجم الـ data set كله جداش يا جماعة الخير؟ 14
عدد الـ yes 9، معناته الـ probability تبعتها 9 على 14
الـ Probability للـ Yes 9 على 14، طب عدد الـ No
بجيتها 5، 5 على 14، هي الاحتمالية تبعتها 5 على 14
وبالهيك أنا حصلت على أول خطوة، اللي هي عرفت الـ
probability تبعت لـ classes اللي موجودة عندي، اللي
هي الـ probability للـ yes و الـ probability للـ no
الخطوة التالية اللي المفروض أن أنا أشتغل عليها
الآن، أن أنا بدي أروح أحسب الـ information أو الـ
entropy تبعتي، بالمعادلة التالية، الـ information
هنرمزلها للـ I للـ data set تبعتي، تساوي تساوي
I، تسعة وكما خمسة، تسعة وخمسة، هدول هم الأربعة عشر
تبعوتي يا جماعة الخير، الآن، هي القانون تبع الـ
information، هيه بيلزمني فيها أن أعرف الـ
probability للـ yes و الـ probability للـ no، وهذا
الكلام يساوي، ما قص مضروبة فيه كام class؟ and two
class، هيهم هدول، لو كانوا تلاتة هيكونوا تلاتة، لو
أربعة هيكونوا أربعة، إلى آخره، مع كل واحدة فيهم، الآن
تسعة على أربعة عشر، هي تبعت الـ class الأول اللي
بين جثين، إحنا قلنا الـ yes مضروبة في الـ binary
logarithm للتسعة على أربعة عشر، مجموعة لهم مجموعة
الخمسة تبعتها، الخمسة تبعت الـ no، خمسة على أربعة عشر
مضروبة في الـ logarithm، الـ binary logarithm، الخمسة
على أربعة عشر، هذا الـ gain تبعت كل الـ data set
توزيعت الـ data set عندي على two classes، تذكر كمان
مرة واحدة، اتنين، تلاتة، أربعة، خمسة no، خمسة من أربعة
عشر، معناته عندي تسعة yes، والآن قولنا، هي قانونهم
قانون الـ information أو الـ gain، عفوا، الـ entropy للـ
data set هي عبارة عن سالب واحد مضروبة في مجموع لـ
probability لكل class مضروبة في الـ log لـ log لـ
probability لكل class، فأنا هنا حسبت المعادلة اللي
موجودة عندي، هتظهر من خلال
سلايد هنا، وهذه
قيمتها 0.94 أو أربعة وتسعين من مية، هذه
ثابتة هتكون لكل الـ data set، لكل training set اللي
أنا ببني عليها الـ model، ممتاز، أنا مشيت أول خطوة في
الحل، الخطوة التالية أن أنا فعليا بدي أروح، أي اتنين
أبدأ أحسب الـ information لكل attribute موجود في الـ
data set، لكل attribute؟ صحيح، فهأخد أحسب الـ intro
بالإن أو الـ information gain للـ age، وأحسب الـ
information Gain للـ income، للـ student، للـ credit
rating، وهكذا، خليني أنا أبدأ معاكم وأذكركم أن
أنا فعليا بحسب الـ information gain للـ attribute
تبع على الـ data set اللي موجودة عندها، لأن الـ
summation على عدد الـ partitions، الـ summation، الـ V
زي ما قلنا قبل شوية، هيها، اللي هي عدد الـ partitions
اللي عندها، number of partitions، حجم
الـ partition للـ data set، عدد عناصر الـ partition
على عدد عناصر الـ data set، ratio، احتمال ولا لأ؟ 393 0
لهاي وهد اللي المفروض تساوي ناقص مضروبة فيه ثلاثة
على خمسة في الـ log أيوة جداش في الـ binary log صحيح
ثلاثة على خمسة زائد اثنين على خمسة في الـ log اثنين على
خمسة هذه الـ intro بالأولى هذه جمعة الخير صفر ليش
ناقص أربعة على خمسة أربعة على خمسة أربعة على خمسة
أربعة على أربعة sorry أربعة على أربعة في الـ log الـ
binary للـ أربعة على أربعة اللي هي واحد صفر زائد صفر
على أربعة في الـ log صفر على أربعة ومن ثم القيمة هذه
هتروح عندي وهذه هي نفس اللي فوق بس مع تغيير الـ
terms اللي موجودة عندها بنفس الحسبة وبالتالي أنا
حسبتها في الجدول فطلعت معايا هيها
خلصت؟ لأ لسه مخلصش بقال علي خطوة واحدة عشان أعرف
أن الـ gain تبعت الـ age جداش بدي أروح أقوله الـ gain
تبعت الـ data set اللي كلها اللي هي جمع الـ i للتسعة
وخمسة حسبناها point تسعة أربعة صفر في الـ slide
السادق هي
لما حسبناها هنا لكل الـ data set الـ gain أو الـ
intro لكل الـ data set حسبت الآن الـ intro لـ الـ age
هيها الآن الخطوة اللي هشتغل عليها أنه بدي أجيب الـ
information gain لكل واحد فيهم طبعا المفروض أنا
ممكن أشتغل الخطوة هاي تباعا أجرّح أقوله مباشرة الآن
الـ information gain للـ age تساوي
أو الـ Gain للـ Age تساوي الـ Entropy لكل الـ data
set ناقص الـ Entropy تبع الـ Age الـ
Gain للـ Age تساوي الـ Entropy للـ data set 0.94 ناقص
الـ Entropy لـ الـ Age اللي موجود عندي 0.694 تساوي طبعا
ممكن تشتغل الخطوة التالية تشتغل مع الـ income بنفس
الـ concept الـ income في عندي برضه .. برضه هنا في
عندي three different values الـ income في عندي
three different values high و medium و low
توزيعتهم بنفس الكيفية وبحسب الـ entropy لـ الـ yes و
الـ no وهكذا هي حسبت الـ entropy لـ الـ ..Informat ..
للـ income الـ intro بي لـ الـ student الـ intro بي لـ
مين لـ الـ credit rating الآن خطوة تالية هروح أحسب
الـ information gain أو الـ gain تبعت الـ age و الـ
gain تبعت هنا في slides مفقودة المفروض أنا شكلي
نسيتها أو ما شابه لأ هي نفس الـ .. okay بس مش مفصلة
فحسبت الـ gain للـ age الـ gain للـ age هي
عبارة عن الـ entropy لكل الـ data 0.694 ناقص الـ
entropy تبعت الـ age اللي هي 0.694 من الألف وهيكون
الفرق بينهم 0.246 من الألف و روحت حسبت الـ income أو الـ
gain للـ income الـ gain للـ student و الـ gain للـ
credit rating لاحظ الـ credit rating أقل ما يمكن
أقل أصغر واحدة من العناصر الموجودة عندي أقل
واحدة مع الـ income مالهاش كان لهاش أقل تأثيرا
الفكرة أن أنا بدي أروح آخذ أو بدي أعمل split على
الـ maximum gain للـ attributes مين
الـ maximum؟ هي لأن 0.246 من 1000 أكبر من أكبر قيمة
موجودة فيهم اللي هي هنا مع الـ student وهذا بتعطيني
إشارة أن ممكن الـ student تكون هي الـ next element
اللي أنحمل عليه splitting لكن مش قضيتي في الآخر
أنا هاي الآن الآن الـ data set هرجع لها الـ
data set الآن هنعملها partitioning هي الـ data set
كيف الـ partition تبعتي؟ بيبقى إنه قال لي أن الـ age
هي هتكون الأساس كل الـ rows المحاطة باللون الأحمر هذه
أو بين قوسين تبعت الـ youth هتمثل
one data set خمسة
rows تمام؟
بعد هيك الـ middle age لحالهم اللي باللون الأزرق
عمالي بأحوط عليهم
هدولة أربعة .. أربعة وضلوا الـ senior العناصر
الباقية يعني بين قوسين أن الـ data set بقى هتنجسم
الآن بعد ما أخدت الـ root أنا هيها بقول الـ age هي
الأساس لأن هي صاحبة الأكبر gain هيها فبدي أجسم الـ
data set بقى للـ three values اللي موجودة عندي يعني
الـ youth و الـ middle age و الـ senior ممتاز
جسمناهم هذه الـ data set اللي موجودة عندي الآن على
السريع شو هروح أساوي هاخد كل data set لأن لاحظ أن
عمود الـ student اختفت
عمود الـ age اختفت ..عمود الـ age اختفت ..الآن كل
واحدة من الـ data set هشتغل عليها بشكل مستقل لحد ما
أحقق واحد من الشروط الثلاثة أما فعليا كل الـ
attributes أو كل الـ symbols تنتمي لنفس الـ class أو
ما ضلش فيه عندي more attributes أنا جسمها أو ما ضلش
فيه عندي rows بعد هيك يعني بين قوسين حاجة هنا الآن
وهشتغل عليها بشكل مستقل هذه الآن new data set
هأحسب لها information لمين؟ هذه كلها خمس عناصر اثنين
وثلاثة هذه الـ information اللي أديه كلها الـ ID
تبعتي I
ثلا .. اثنين للـ yes وثلاثة للـ no وهذا يساوي سالب في
مجموع .. في مجموع أو بلاش نحط المجموع هيها اثنين
على خمسة في الـ log اثنين على خمسة زائد ثلاثة على خمسة
في الـ log ثلاثة على خمسة هذه المعلومات لكل الـ data set
هذه as all ممتاز الآن كم attribute موجود عندي؟
عندي three different attributes عندي الـ income و
عندي الـ age عفوا الـ student و الـ credit rating
هروح أحسب الـ information لمين؟ هروح أبدأ أبني
الجدول الآن للـ attribute الأول مش اتفقنا هيك هشتغل
مع كل جدول على السريع أنا هشتغل بس مع هذه والخطوة
الثانية حاططها للباقية حاططها كواجب الآن
مع العمود الأول الـ income قلت
الـ value تبعت الـ income بعد هيك في عندي الـ yes
وعندي الـ no وعندي الـ intro بلا الـ yes والـ no بناء
على العدد اللي موجود عندي وبالتالي كم value موجود
عندي أنا هنا عندي low و medium و high هي
low
medium و high عد العناصر الموجودة مع بعضنا الآن مع
الـ low عندي قيمة واحدة فقط لمين بتنتمي للـ yes واحد
yes وهنا صفر معناته الـ entropy لواحد وصفر آجي
لـ الـ medium medium عندي اثنين
واحد yes وواحد no معناته entropy لواحد وواحد وضل
في عندي high اثنين وبينتموا لنفس الـ class
معناته صفر واثنين entropy لصفر واثنين وهذا بذكر أن
هذا القانون السابق اللي اعتمدت عليه حصل بحسب الـ
gain الآن أو بحسب الـ information للـ attribute اللي
موجود عندي من خلال الـ summation كمان مرة عدد الـ
data set زي ما قلنا جداش جمعة الخير خمسة الآن
واحد على خمسة في الـ I واحد وصفر زائد هذه الـ
information اثنين على خمسة في الـ I واحد وواحد زائد
اثنين على خمسة اثنين على خمسة صحيح اثنين على خمسة
في الـ I صفر
واثنين بحصل على الـ information gain اللي موجود
عندي هنا بعد هيك بقوله الـ gain تبعت الـ income هتمثل
الـ I اللي عندي فوق ناقص الـ I للـ income اللي
موجودة عندها هأحسبها وبالتالي بأحسب لهذه وبأحسب للـ
العناصر
اللي موجودة عندي تماما للـ student بعيد الكرة و للـ
credit rating وصاحب الـ attribute صاحب أكبر gain
هو اللي حيكون فعليا أنا هأعتمد وين في الـ .. في
الرسمة أو في الـ decision node التالية حسب الحسبة
تبعتي حسبناها سابقا لازم أنتم تكملوها للاخر حسب
الحسبة تبعتي الـ student حصلت أعلى gain الـ student
تبعتي حصلت أعلى gain وبالتالي أنا الآن هنا هأصير
في عندي الـ student هي الـ Internal node الجاية وفيها
two different values هأقسم الـ data set بعد هيك هأقسم
الـ data set تبعا للـ nodes اللي موجودة عندي هيك و
بهيك صارت كل الـ nodes تنتمي لنفس الـ class كل الـ
samples تنتمي لنفس الـ class فهنا بوقف هذه already
كلها تنتمي لنفس الـ class فأنا وقفت هنا ووقفت هنا
هتكون الـ final tree تبعتي طبعا هي الحسبة اللي
عندناها مرة ثانية أنا في الآخر الـ Tree تبعتي أحصل
عليها اللي إحنا شفناها مسبقا المفروض قبل ما يبدأ
بالشغل اللي هي هذه الـ income ما بينتش عندي لأن
فعليا وزنها كان لا يذكر مقارنة بالـ data set ولما
أنا ما ضلش عندي rows أو ما ضلش عندي sample أروح
أجسمها الآن عشان
ما نطولش عليكم بعد ما حسبنا العناصر اللي موجودة
عندها في الـ continuous attributes في حالة الـ
attributes اللي عندك continuous attribute إيش الحل؟
اعمل discretization اعملها categories جسمها لفئات
استخدم الـ binning و أعطي label لكل bin و اشتغل
عليها بتكاشي اشتغل عليك في حل بسيط جدا الحل بيقولك
رتب الـ data set تبعا للـ items اللي موجودة عندك رتب
الـ items تمام فصارت الـ data sorted إن في حال كانت
عندي الـ age عبارة عن number صار عندي خمسة وعشرين و
ثلاثين سبعة وثلاثين أربعين الآن أنت بقى
تيجي تفحص بين كل two nodes يعني هتأخذ
الـ midpoint اللي بين هدول الاثنين أو الأسهل لك
فعلا هي عبارة عن Discretization لكنها Binary
Discretization مع الأرقام أنت إيش المقارنات تبعتك؟
أما هتقول لي أقل إذا قلت أقل من كده فهي أكبر أو
تساوي كده إذا قلت أكبر من أكبر من أو تساوي كده
فهي أقل من كده عكسها تماما فحيكون بشغل عليها مع
binary يعني بين قوسين بصير بأخذ decision هنا بقوله
أقل أو تساوي خمسة وعشرين طب ما هي خمسة وعشرين باجي هنا
أقل أو تساوي ثلاثين معتبر هدول في partitions و
هدول في partitions مع الـ continuous attributes إذا
أنت بدك تشتغل مع الـ continuous values معناته أنت
هيكون في عندك too many partitions لحد ما تصل لـ
best point اللي بتعمل split يعني هأحسب الآن الجسم
كده كانت هنا ولا لما كانوا اثنين وثلاثة ولما
كانوا ثلاثة واثنين وأجرب كلهم وآخذ أعلى gain
فيهم لأن في الآخر أنا بدور على الـ gain لكل الـ data
set تبعتي اللي موجودة عندي هنا الآن هدف الموضوع الـ
splitting للـ continuous values لكن الـ Information
Gain دائما بيحاز للـ attributes أو للـ test اللي
بيكون فيها two أو فيها many outcomes اللي فيها
values كثيرة عشان هي كانت في الأول عندي الـ age
كانت هي أكثر الـ values اللي موجودة جالك ممكن إحنا
نحَل هذه المشكلة ونعتمد أو نحاول نقضي على موضوع
إنحياز الـ values الكثيرة اللي هو موضوع الـ gain
ratio الـ Gain Ratio فكرتها يا جماعة الخير أنه أنا
بدي أروح أحسب الـ split info إحنا سابقا كانت هذه
القيمة موجودة عندنا هي عدد عناصر الـ partition على 619 00:49:52
موجود عندي آخر خطوة أو آخر slide في الموضوع
كيف بدي أستدعيها، الخطوات السابقة في الـ python نفسها؟
from sklearn.tree import DecisionTreeClassifier
النموذج الـ Decision Tree Classifier عملت له fit
قلت له، وهذه الجزئية في السطر هذا، بتبني الشجرة.
الآن الـ
sample test نفسها، لأنها شغالة، نفس الشيء، بدنا نجربها معاكم من
البداية. جربتها مع الـ kenia sniper، وجربتها مع الـ naive
بايز. بروح تعمل الـ test، وهنحدد setosa بكل
تأكيد، وبهيك بنكون إحنا فعلياً انتهينا من موضوع الـ
Decision Tree لمحاضرتنا اليوم. المطلوب منكم
تجربوا يا جماعة الخير، في عندنا different data set
موجودة في الـ slide سابقاً. جربوا الكلام هذا عليها، و
جربوا الكلام هذا عليها، يعني بينتج سيناريو
هذا الكلام مش هتتقنوه من مرة واثنتين وثلاث، الشغل
التاني اللي بدي إياه منكم، بعد تجريب العمل يبدو
تعتبروها كـ assignment عليكم. الآن، يبدو تروح تفكروا
أو تدوروا لي كيف ممكن أنا، إذا كانت هذه عبارة عن الـ
tree، بعد ما أنا عملت لها fit، هل في مجال أرسم الـ tree
بتاعتها بالبايثون؟ اه، في مجال، وهذه متروكة لكم. والسلام
عليكم ورحمة الله وبركاته