زراعة أشجار اتخاذ القرار

مثل جميع نماذج التعلم الآلي المُوجّه، يتم تدريب أشجار القرارات على شرح مجموعة من أمثلة التدريب بشكل أفضل. التدريب الأمثل لشجرة القرار هو مشكلة صعبة NP. لذلك، يتم إجراء التدريب بشكل عام باستخدام إشارات استدلالية، وهي خوارزمية تعلم سهلة الإنشاء تقدم شجرة قرارات غير مثالية، ولكنها قريبة من المثالية.

تعمل معظم الخوارزميات المستخدمة لتدريب أشجار القرارات باستخدام استراتيجية تبدأ الخوارزمية بإنشاء عقدة واحدة (الجذر) وتنمو شجرة القرار بشكل متكرر وجشع.

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

على سبيل المثال، في مجموعة بيانات بطاريق بالمر (المستخدَمة لأمثلة التعليمات البرمجية لاحقًا في هذه الدورة)، يكون طول معظم طيور البطريق "آديلي" و"Chinstrap" (شريطي الذقن) أكبر من 16 ملم، في حين أن معظم طيور البطريق "جنتو" لديها منقار أصغر. لذلك، يقدّم الشرط bill_length_mm ≥ 16 توقعات مثالية تقريبًا لبطاريق "جنتو"، ولكن لا يمكنه التفريق بين "Adelies" (آديلي) و"Chinstraps". من المحتمل أن تختار الخوارزمية هذا الشرط.

حالة واحدة تؤدي إلى ورقتين. الشرط هو 'bill_length_mm >= 16'.
إذا كانت الإجابة "نعم"، يكون رمز الورقة هو "Adelie" (آديلي) أو "Chinstrap" (شريطي الذقن).  إذا لم يكن الأمر كذلك،
فإن الورقة هي "Gentoo".

الشكل 7. الخطوة الأولى في زراعة الشجرة.

 

ثم تتكرر الخوارزمية بشكل متكرر ومستقل في كلتا العُقدتين الفرعيتين. عندما لا يتم العثور على شروط مُرضية، تتحول العقدة إلى ورقة شجر. يتم تحديد تنبؤ ورقة الشجر على أنها قيمة التسمية الأكثر تمثيلاً في الأمثلة.

وتكون الخوارزمية على النحو التالي:

def train_decision_tree(training_examples):
  root = create_root() # Create a decision tree with a single empty root.
  grow_tree(root, training_examples) # Grow the root node.
  return root

def grow_tree(node, examples):
  condition = find_best_condition(examples) # Find the best condition.

  if condition is None:
    # No satisfying conditions were found, therefore the grow of the branch stops.
    set_leaf_prediction(node, examples)
    return

  # Create two childrens for the node.
  positive_child, negative_child = split_node(node, condition)

  # List the training examples used by each children.
  negative_examples = [example for example in examples if not condition(example)]
  positive_examples = [example for example in examples if condition(example)]

  # Continue the growth of the children.
  grow_tree(negative_child, negative_examples)
  grow_tree(positive_child, positive_examples)

لنستعرض خطوات تدريب شجرة قرارات معينة بمزيد من التفاصيل.

الخطوة 1: إنشاء جذر:

عقدة تحمل علامة استفهام.

الخطوة 2: توسيع العقدة رقم 1. تم العثور على الشرط "x1 ≥ 1". يتم إنشاء عقدتين فرعيتين:

يشير ذلك المصطلح إلى عقدة جذرية
 تؤدي إلى عقدتَين غير محدّدتَين.

الخطوة 3: توسيع العقدة رقم 2. لم يتم العثور على شروط مُرضية. لذا، اجعل العقدة في ورقة شجر:

يشير ذلك المصطلح إلى عقدة جذرية تؤدي إلى عقدتَين غير محدّدتَين.

الخطوة 4: توسيع العقدة رقم 3. تم العثور على الشرط "x2 ≥ 0.5". يتم إنشاء عقدتين فرعيتين.

عقدة جذر،
وشرط، وثلاث أوراق.

هناك طرق أخرى لزراعة أشجار القرارات. والبديل الشائع هو تحسين العُقد على مستوى العالم بدلاً من استخدام استراتيجية التقسيم والتغلّب.

رمز YDF
في YDF، تُزرع أشجار القرارات باستخدام خوارزمية "التقسيم والانتصار" الجشع الموصوف أعلاه افتراضيًا. بدلاً من ذلك، يمكنك تفعيل النمو العام باستخدام المعلمة growing_strategy="BEST_FIRST_GLOBAL". اطّلِع على المستندات لمزيد من التفاصيل.

اعتمادًا على عدد ميزات الإدخال ونوعها، يمكن أن يكون عدد الشروط المحتملة لعقدة معيّنة عددًا كبيرًا وغير محدود بشكلٍ عام. على سبيل المثال، وفقًا لشرط الحدّ $\mathrm{feature}_i \geq t$، إنّ مجموع كلّ قيم الحدّ الأدنى المحتملة لـ $t \in \mathbb{R}$ لا تنتهي.

إنّ سلسلة الإجراءات المسؤولة عن العثور على أفضل حالة تُسمّى التقسيم. نظرًا لأنها تحتاج إلى اختبار الكثير من الشروط المحتملة، فإن المقسّمين هم المؤثِّر عند تدريب شجرة القرار.

تعتمد النتيجة التي يتم الحصول عليها إلى أقصى حد من خلال المقسِّم على المهمة. على سبيل المثال:

  • يُستخدم تحصيل المعلومات وGini (كلاهما في وقت لاحق) للتصنيف بشكل شائع.
  • ويشيع استخدام متوسط الخطأ التربيعي مع الانحدار.

هناك العديد من خوارزميات التقسيم، ولكل منها دعم متفاوت لما يلي:

  • نوع الميزات؛ على سبيل المثال، عددية أو فئوية أو نصية
  • المهمة؛ على سبيل المثال، التصنيف الثنائي والتصنيف متعدد الفئات والانحدار
  • نوع الشرط؛ على سبيل المثال، شرط الحدّ الأدنى أو الشرط المحدّد أو شرط مائل
  • معايير التسوية، على سبيل المثال، الفواصل الدقيقة أو التقريبية لشروط الحد الأدنى

بالإضافة إلى ذلك، هناك متغيرات مقسَّمة مكافئة تتضمن مقايضة مختلفة في ما يتعلق باستخدام الذاكرة واستخدام وحدة المعالجة المركزية (CPU) وتوزيع الحوسبة، وما إلى ذلك.

رمز YDF
في YDF، يتم اختيار المُقسِّمات بشكل ضمني من نوع الميزة الذي يتم رصده تلقائيًا (أو المحدد يدويًا) ومعلَمات الفائق والسرعة المقدَّرة لكل مُقسِّم (أثناء التدريب، يُشغِّل YDF نموذجًا صغيرًا للتنبؤ بسرعة كل مُقسّم مُرشّح).