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

منحنيات التعلّم

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

هل ستجعل البيانات الإضافية نموذجك أفضل؟ يُظهر منحنى التعلّم ذلك: دقة الاختبار مع زيادة حجم مجموعة التدريب. هنا، شجرة عميقة على بيانات ذات قمرين:

الدقة مقابل عدد صفوف التدريب من 25 إلى 800. يظل خط التدريب عند 1.0 طوال الوقت؛ ويرتفع خط الاختبار من 0.80 إلى 0.94

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

درّب على أول n صفوف تدريب، ثم قيّم على صفوف الاختبار نفسها في كل مرة:

sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
    tree = DecisionTreeClassifier(random_state=0)
    tree.fit(X_train[:n], y_train[:n])
    test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")

هل ما زال يرتفع عند الحافة اليمنى؟ ستساعدك المزيد من البيانات.

challenge icon

التحدي

متوسط

هل ستساعد تسجيلات أكثر على التمييز بين نوعَي البوم؟ يقسّم الإعداد الأولي 600 نداء ويجهّز النموذجين والمخطط.

  1. لكل n في sizes، درّب كلا النموذجين على أول n صفوف تدريب؛ واحتفظ بدقّتيهما على الاختبار.
  2. اطبع مقدار التحسّن لكل نموذج، أي النتيجة الأخيرة ناقص الأولى، مع 3 منازل عشرية.
  3. ارسم كليهما مقابل sizes، مع marker="o"، وسمِّهما logistic وtree، وأضف وسيلة إيضاح.

تطبع بومات من غابة أخرى:

Logistic gains 0.053 from more data
Tree gains 0.160 from more data

وترسم هذا المخطط. ثم يصف Coddy مخططك.

نداءات البوم: منحنيات التعلّم. يرتفع الخط اللوجستي من 0.64 إلى نحو 0.69 ثم يستوي؛ ويصعد خط الشجرة بثبات من 0.67 إلى 0.83

جرّب بنفسك

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

# لا تغيّر الأسطر أدناه: 600 نداء للبوم، وطبقة الصوت (Hz) والمدة (s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# النوع 1، البومة السمراء، تصدر نداءات أطول بالنسبة إلى طبقة صوتها؛ بعض الملاحظات الميدانية خاطئة
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)

sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)

fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")

# اكتب شيفرتك أدناه
quiz iconاختبر نفسك

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

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

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