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

مقارنة النماذج بإنصاف

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

مقارنة النماذج باستخدام تقسيم واحد أشبه برمية عملة: فقد يحالف الحظ أحدها بمجموعة اختبار مناسبة. أعطِ كل نموذج الطيات الخمس نفسها بدلًا من ذلك. بالنسبة إلى 150 ورقة نقدية، حقيقية أو مزيفة:

درجات الطيات الخمس لكل نموذج كنقاط، مع خط أسود عند متوسط كل نموذج. تقع نقاط k-NN متقاربة حول 0.867؛ وتتوزع نقاط الانحدار اللوجستي من 0.73 إلى 0.93 حول 0.873؛ ويتأخر نموذج الشجرة عند 0.807

يتعادل k-NN والانحدار اللوجستي ضمن نطاق التذبذب لديهما، ويكون k-NN أكثر استقرارًا. وتتأخر الشجرة.

يقوم المُقسِّم KFold بخلط الصفوف مرة واحدة، ويمنح كل نموذج الطيات نفسها:

from sklearn.model_selection import KFold

folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
    scores = cross_val_score(model, X, y, cv=folds)
    print(f"{scores.mean():.3f} {scores.std():.3f}")

يطبع الأرقام في المخطط:

0.867 0.042
0.873 0.074
0.807 0.077

اختر أعلى متوسط؛ وعندما تكون المتوسطات متقاربة، اختر أصغر انحراف معياري.

challenge icon

التحدي

متوسط

يتنبأ موقع للطهي بالزوار الذين يطبخون وصفةً يفتحونها. يقيّم البرنامج التمهيدي ثلاثة نماذج في تقسيم واحد، ويفوز نموذج الشجرة. تحقّق من ذلك بطريقة عادلة؛ فالبرنامج يقرأ عدد الطيات.

  1. أنشئ KFold بهذا العدد من التقسيمات، مع shuffle=True وrandom_state=0.
  2. أجرِ تحققًا متقاطعًا لكل نموذج باستخدام تلك الطيات؛ واطبع المتوسط والانحراف المعياري، مع 3 منازل عشرية.
  3. اطبع النموذج صاحب أعلى متوسط.

لزوار آخرين و5:

One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logistic

جرّب بنفسك

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

n_folds = int(input())

# لا تغيّر الأسطر أدناه: 300 زائر، و6 عادات تصفّح؛ التصنيف 1 يعني أنهم حضّروا الوصفة
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
                           flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
          DecisionTreeClassifier(max_depth=4, random_state=0)]

# تقسيم واحد يحدّد الفائز
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
    model.fit(X_train, y_train)
    single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")

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

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

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

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