منحنيات التعلّم
جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 33 من 58.
هل ستجعل البيانات الإضافية نموذجك أفضل؟ يُظهر منحنى التعلّم ذلك: دقة الاختبار مع زيادة حجم مجموعة التدريب. هنا، شجرة عميقة على بيانات ذات قمرين:
تحفظ الشجرة كل مجموعة التدريب، ومع ذلك يعلّمها كل صف إضافي شيئًا حقيقيًا. وتستفيد النماذج المرنة أكثر من البيانات.
درّب على أول 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")هل ما زال يرتفع عند الحافة اليمنى؟ ستساعدك المزيد من البيانات.
التحدي
متوسطهل ستساعد تسجيلات أكثر على التمييز بين نوعَي البوم؟ يقسّم الإعداد الأولي 600 نداء ويجهّز النموذجين والمخطط.
- لكل
nفيsizes، درّب كلا النموذجين على أولnصفوف تدريب؛ واحتفظ بدقّتيهما على الاختبار. - اطبع مقدار التحسّن لكل نموذج، أي النتيجة الأخيرة ناقص الأولى، مع 3 منازل عشرية.
- ارسم كليهما مقابل
sizes، معmarker="o"، وسمِّهماlogisticوtree، وأضف وسيلة إيضاح.
تطبع بومات من غابة أخرى:
Logistic gains 0.053 from more data
Tree gains 0.160 from more dataوترسم هذا المخطط. ثم يصف Coddy مخططك.
جرّب بنفسك
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")
# اكتب شيفرتك أدناه
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التعلّم الخاضع للإشراف
تدرّب بنفسك: مترجم Python عبر الإنترنت