التحقق من صحة k-fold في r (خطوة بخطوة)
لتقييم أداء نموذج ما على مجموعة بيانات، نحتاج إلى قياس مدى مطابقة التنبؤات التي قدمها النموذج مع البيانات المرصودة.
تُعرف الطريقة شائعة الاستخدام للقيام بذلك باسم التحقق المتقاطع k-fold ، والذي يستخدم الطريقة التالية:
1. قم بتقسيم مجموعة البيانات عشوائيًا إلى مجموعات k ، أو “طيات”، ذات حجم متساوٍ تقريبًا.
2. اختر إحدى الطيات كمجموعة ضبط النفس. اضبط القالب على طيات k-1 المتبقية. حساب اختبار MSE على الملاحظات في الطبقة التي تم شدها.
3. كرر هذه العملية عدة مرات، في كل مرة باستخدام مجموعة مختلفة كمجموعة الاستبعاد.
4. احسب اختبار MSE الإجمالي كمتوسط لاختبار k MSEs.
أسهل طريقة لإجراء التحقق من صحة k-fold في R هي استخدام الدالة TrainControl() من مكتبة علامة الإقحام في R.
يقدم هذا البرنامج التعليمي مثالاً سريعًا لكيفية استخدام هذه الوظيفة لإجراء التحقق المتبادل من k-fold لنموذج معين في R.
مثال: التحقق من صحة K-Fold في R
لنفترض أن لدينا مجموعة البيانات التالية في R:
#create data frame df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23), x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9), x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5)) #view data frame df y x1 x2 6 2 14 8 5 12 12 4 12 14 3 13 14 4 7 15 6 8 17 7 7 22 5 4 24 8 6 23 9 5
يوضح التعليمة البرمجية التالية كيفية ملاءمة نموذج الانحدار الخطي المتعدد لمجموعة البيانات هذه في R وإجراء التحقق من الصحة عبر k-fold مع k = 5 مرات لتقييم أداء النموذج:
library (caret) #specify the cross-validation method ctrl <- trainControl(method = " cv ", number = 5) #fit a regression model and use k-fold CV to evaluate performance model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl) #view summary of k-fold CV print(model) Linear Regression 10 samples 2 predictors No pre-processing Resampling: Cross-Validated (5 fold) Summary of sample sizes: 8, 8, 8, 8, 8 Resampling results: RMSE Rsquared MAE 3.018979 1 2.882348 Tuning parameter 'intercept' was held constant at a value of TRUE
وإليك كيفية تفسير النتيجة:
- لم تتم المعالجة المسبقة. أي أننا لم نقم بقياس البيانات بأي شكل من الأشكال قبل ملاءمة النماذج.
- كانت طريقة إعادة التشكيل التي استخدمناها لتقييم النموذج هي التحقق المتبادل بخمسة أضعاف.
- وكان حجم العينة لكل مجموعة تدريبية 8.
- RMSE: جذر متوسط مربع الخطأ. يقيس هذا متوسط الفرق بين التنبؤات التي قدمها النموذج والملاحظات الفعلية. كلما انخفض مؤشر RMSE، زادت دقة النموذج في التنبؤ بالملاحظات الفعلية.
- Rsquared: هذا مقياس للارتباط بين التنبؤات التي قدمها النموذج والملاحظات الفعلية. كلما ارتفع مربع R، زادت دقة النموذج في التنبؤ بالملاحظات الفعلية.
- MAE: متوسط الخطأ المطلق. هذا هو متوسط الفرق المطلق بين التنبؤات التي قدمها النموذج والملاحظات الفعلية. كلما انخفض MAE، زادت دقة النموذج في التنبؤ بالملاحظات الفعلية.
كل قياس من القياسات الثلاثة المقدمة في النتيجة (RMSE وR-squared وMAE) يعطينا فكرة عن أداء النموذج على البيانات غير المنشورة.
من الناحية العملية، نحن عادةً نلائم عدة نماذج مختلفة ونقارن المقاييس الثلاثة التي توفرها النتائج المعروضة هنا لتحديد النموذج الذي ينتج أقل معدلات خطأ في الاختبار وبالتالي فهو أفضل نموذج للاستخدام.
يمكننا استخدام الكود التالي لفحص ملاءمة النموذج النهائي:
#view final model
model$finalModel
Call:
lm(formula = .outcome ~ ., data = dat)
Coefficients:
(Intercept) x1 x2
21.2672 0.7803 -1.1253
النموذج النهائي يصبح كما يلي:
ص = 21.2672 + 0.7803*(× 1 ) – 1.12538(× 2 )
يمكننا استخدام الكود التالي لعرض تنبؤات النموذج لكل طية:
#view predictions for each fold
model$resample
RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5
لاحظ أنه في هذا المثال اخترنا استخدام k=5 طيات، ولكن يمكنك اختيار أي عدد من الطيات التي تريدها. من الناحية العملية، نختار عادةً ما بين 5 إلى 10 طبقات، حيث يثبت أن هذا هو العدد الأمثل للطبقات التي تنتج معدلات خطأ موثوقة في الاختبار.