قيِّم عقدةً بطريقتين، وزِن انقسامًا، ثم راقب البحث الجشِع يفشل في المِنصّة، وتوقَّع — قبل أن تقرأ من لوحتَي عدم النقاء والبحث — Gini وentropy لعقدة محدّدة، وinformation gain لانقسام نظيف، ولماذا تعجِز شجرةٌ عمقها واحد عن فصل XOR إطلاقًا.
تنمو شجرة القرار بأن تسأل، عند كل عقدة، أيُّ قطعٍ ثنائيٍّ واحد (نعم/لا) يُنقّي الجانبين أكثر. ولتفعل ذلك تحتاج رقمًا لمدى اختلاط العقدة: Gini وentropy مقياسان لعدم النقاء، كلاهما صفرٌ على العقدة النقية وأكبرُ ما يكون على عقدة 50/50. وinformation gain لانقسامٍ هو مقدار هبوط عدم النقاء الذي يشتريه، موزونًا بحجم الأبناء — ولأنّ البحث لا يُبقي إلّا أفضل قطعٍ واحد في كل خطوة فهو جشِع، وهذا بالضبط سبب هزيمة XOR له.
افتح المِنصّة. الخطوات الثلاث الأولى حساباتٌ يدوية تتحقّق منها في لوحتَي عدم النقاء والبحث — اترك مجموعة البيانات على blobs لها. أمّا الخطوة الأخيرة فتضبط مجموعة البيانات على XOR والعمق على 1 لترى البحث الجشِع يعود خاوي الوفاض. استخدم معيار Gini طوال الوقت.
Criterion -> Gini Dataset -> blobs (XOR for the last step)
Max depth -> 4 Min samples -> 2 Seed -> 7
تُظهر لوحة عدم النقاء G = 1 - ∑ p_k² وH = -∑ p_k log₂ p_k لكل عقدة؛ وتَرسم لوحة البحث information gain لكل قطعٍ مُرشَّح وتُعلِّم القمّة التي تختارها الشجرة.
خذ عقدةً تضمّ 3 نقاط من فئة و1 من الأخرى. عدم نقاء Gini هو 1 - ∑ p_k²، وهنا p = (3/4, 1/4). توقَّع Gini، ثم تأكّد منه في لوحة عدم النقاء.
Gini = 1 - ((3/4)² + (1/4)²) = 1 - (9/16 + 1/16) = 0.375. وهي دون سقف 0.5 لعقدة 50/50، لأنّ عقدة 3:1 تميل أصلًا نحو فئة واحدة.
الآن قيِّم عقدة 3 إلى 1 نفسها بـentropy، -∑ p_k log₂ p_k — المقياس الآخر لعدم النقاء، بالبِت. بدِّل المعيار إلى entropy واقرأ لوحة عدم النقاء. توقَّع القيمة أولًا، ثم اقرأها.
entropy = -(3/4)log₂(3/4) - (1/4)log₂(1/4) = 0.8113 بِت. لاحِظ أنّها أعلى بكثير من قيمة Gini البالغة 0.375: فـentropy أحدُّ قمّةً، ولذا يتّفق المقياسان على أيّ انقسام هو الأفضل أكثرَ بكثير من اتّفاقهما على رقم عدم النقاء نفسه.
تأمّل عقدةً أبًا 50/50 [4, 4] يقسمها قطعٌ واحد قسمةً تامّة إلى ابنَين نقيَّين، [4, 0] و[0, 4]. الكسب هو عدم نقاء الأب ناقص عدم نقاء الأبناء موزونًا بالحجم. بـGini يكون الأب 0.5 وكلا الابنَين 0. توقَّع gain، ثم اقرأ قمّة لوحة البحث.
gain = 0.5 - (1/2)(0) - (1/2)(0) = 0.5 — يُزال كامل عدم نقاء الأب، وهو أكبر كسبٍ ممكن هنا. هذه هي القمّة التي يتسلّقها البحث الجشِع والقطع الذي يُبقيه.
اضبط مجموعة البيانات على XOR وMax depth على 1، وراقب لوحة البحث. في XOR ذي الأركان الأربعة، تتشارك الأركان المتقابلة الفئة نفسها، فلا يفصل أيُّ قطعٍ محاذٍ للمحاور شيئًا — وكسبُ كل مُرشَّح يساوي 0 عمليًّا. توقَّع دقة تدريب شجرةٍ عمقها 1، ثم اقرأها.
لا تُجري الشجرة أيّ انقسام (ورقةٌ واحدة) وتتنبّأ بالأغلبية، فتكون دقة التدريب 0.5 بالضبط — أي خط أساس رمي العملة. البحث الجشِع، إذ ينظر خطوةً واحدة فقط إلى الأمام، لا يرى أبدًا أنّ قطعَين اثنين يحلّانها. ذلك هو فخّ الجشع؛ ومزيدٌ من العمق على XOR أنعم هو ما يُفلِت منه.
كل ما سبق ينتظرك في المِنصّة. أنمِ الشجرة مستوًى تلو الآخر وراقب Gini وentropy لكل عقدة يهبطان، ومرِّر لوحة البحث لترى أيّ قطعٍ يفوز بأكبر كسب، وبدِّل مجموعات البيانات لتجد أين يتعثّر البحث الجشِع المحاذي للمحاور.
- قيَّمتَ عقدة 3 إلى 1 بـGini = 0.375
- قيَّمتَ العقدة نفسها بـentropy = 0.8113 بِت — أحدُّ قمّةً من Gini
- وجدتَ information gain = 0.5 لانقسام نظيف، إذ يُزال كامل عدم نقاء الأب
- رأيتَ شجرةً عمقها 1 عالقةً عند دقة 0.5 على XOR — فخّ الجشع
- كل قيمة توقّعتها هي حساب عدم النقاء والكسب الخاص بالعرض نفسه، لا صورة تقريبية