Menu
CoddyTech
flag Ar iconالعربيةdown icon

قصور التكيّف وفرطه

جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 32 من 58.

لقد واجهت أكبر فخ في تعلّم الآلة: حُفِظ k = 1 والأشجار العميقة. يسمّي هذا الفصل هذا الفخ وينتهي بمخططات كهذا:

دقة التدريب والتحقق لشجرة حسب العمق: ترتفع دقة التدريب نحو 1.0، وتبلغ دقة التحقق ذروتها عند العمق 3 ثم تنخفض. يشير خط متقطع إلى العمق المختار، ونجمة حمراء إلى نتيجة الاختبار الوحيدة، 0.82

الفخ: 15 نبتة ريحان، رُويت بطرق مختلفة، وثلاثة منحنيات ملائمة لمحصولها:

محاصيل الأوراق لـ15 نبتة تدريب كنقاط رمادية و5 نباتات اختبار كمربعات سوداء، مقابل كمية الماء اليومية. خط أزرق مستقيم لا يلائم الانتفاخ، ومنحنى أخضر من الدرجة 3 يتبعه، ومنحنى أحمر من الدرجة 12 يتأرجح بشدة بين النقاط

الدرجة 1 بسيطة أكثر من اللازم: نقص التكيّف. الدرجة 12 تمرّ عبر كل نقطة تدريب، متأرجحةً بينها: فرط التكيّف، أي الحفظ لا التعلّم.

تعطي np.polyval(coefs, x) ارتفاعات المنحنى. قيم RMSE للتدريب والاختبار، بالغرامات:

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

يطبع:

1 156 138
3 15 19
12 9 173

علامة فرط التكيّف: خطأ تدريب صغير، وخطأ اختبار كبير.

challenge icon

التحدي

متوسط

تمثّل مزرعة رياح قدرة توربين واحد استنادًا إلى سرعة الرياح. يقسم البرنامج المبدئي قراءاته الـ24 ويقرأ max_degree.

  1. لكل درجة من 1 إلى max_degree، لائِم منحنى على صفوف التدريب؛ واطبع RMSE للتدريب والاختبار بوحدة kW كاملة.
  2. اطبع أول درجة يكون عندها خطأ الاختبار أكبر من ضعف خطأ التدريب، أو No overfitting up to degree وmax_degree.

لتوربين آخر ومع 7:

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

جرّب بنفسك

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# لا تغيّر الأسطر أدناه: سرعة الرياح (m/s) وقدرة توربين رياح واحد (kW)
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت