التحقق من صحة k-fold في python (خطوة بخطوة)
لتقييم أداء نموذج ما على مجموعة بيانات، نحتاج إلى قياس مدى مطابقة التنبؤات التي قدمها النموذج مع البيانات المرصودة.
تُعرف الطريقة شائعة الاستخدام للقيام بذلك باسم التحقق المتقاطع k-fold ، والذي يستخدم الطريقة التالية:
1. قم بتقسيم مجموعة البيانات عشوائيًا إلى مجموعات k ، أو “طيات”، ذات حجم متساوٍ تقريبًا.
2. اختر إحدى الطيات كمجموعة ضبط النفس. اضبط القالب على طيات k-1 المتبقية. حساب اختبار MSE على الملاحظات في الطبقة التي تم شدها.
3. كرر هذه العملية عدة مرات، في كل مرة باستخدام مجموعة مختلفة كمجموعة الاستبعاد.
4. احسب اختبار MSE الإجمالي كمتوسط لاختبار k MSEs.
يقدم هذا البرنامج التعليمي مثالاً خطوة بخطوة لكيفية إجراء التحقق المتقاطع k-fold لنموذج معين في Python.
الخطوة 1: تحميل المكتبات الضرورية
أولاً، سنقوم بتحميل الوظائف والمكتبات اللازمة لهذا المثال:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd
الخطوة 2: إنشاء البيانات
بعد ذلك، سنقوم بإنشاء إطار بيانات الباندا الذي يحتوي على متغيرين متوقعين، x1 و x2 ، ومتغير استجابة واحد y.
df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})
الخطوة 3: إجراء التحقق من صحة K-Fold
بعد ذلك، سنلائم نموذج الانحدار الخطي المتعدد لمجموعة البيانات وننفذ LOOCV لتقييم أداء النموذج.
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
cv=cv, n_jobs=-1)
#view mean absolute error
mean(absolute(scores))
3.6141267491803646
من النتيجة يمكننا أن نرى أن متوسط الخطأ المطلق (MAE) كان 3.614 . أي أن متوسط الخطأ المطلق بين التنبؤ النموذجي والبيانات المرصودة فعلياً هو 3.614.
بشكل عام، كلما انخفض MAE، كلما كان النموذج قادرًا على التنبؤ بالملاحظات الفعلية بشكل أفضل.
مقياس آخر شائع الاستخدام لتقييم أداء النموذج هو جذر متوسط مربع الخطأ (RMSE). يوضح التعليمة البرمجية التالية كيفية حساب هذا المقياس باستخدام LOOCV:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
cv=cv, n_jobs=-1)
#view RMSE
sqrt(mean(absolute(scores)))
4.284373111711816
من النتيجة يمكننا أن نرى أن جذر متوسط مربع الخطأ (RMSE) كان 4.284 .
كلما انخفض RMSE، كلما كانت قدرة النموذج على التنبؤ بالملاحظات الفعلية أفضل.
من الناحية العملية، نحن عادةً نلائم عدة نماذج مختلفة ونقارن RMSE أو MAE لكل نموذج لتحديد النموذج الذي ينتج أقل معدلات خطأ في الاختبار وبالتالي فهو النموذج الأفضل للاستخدام.
لاحظ أيضًا أنه في هذا المثال اخترنا استخدام k=5 طيات، ولكن يمكنك اختيار أي عدد من الطيات التي تريدها.
من الناحية العملية، نختار عادةً ما بين 5 إلى 10 طبقات، حيث يثبت أن هذا هو العدد الأمثل للطبقات التي تنتج معدلات خطأ موثوقة في الاختبار.
يمكنك العثور على الوثائق الكاملة لوظيفة KFold() الخاصة بـ sklearn هنا .
مصادر إضافية
مقدمة للتحقق من صحة K-Fold
دليل كامل للانحدار الخطي في بايثون
التحقق من صحة المغادرة لمرة واحدة في بيثون