كيفية إجراء التعبئة في r (خطوة بخطوة)


عندما نقوم بإنشاء شجرة قرار لمجموعة بيانات معينة، فإننا نستخدم فقط مجموعة بيانات تدريب واحدة لبناء النموذج.

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

تُعرف إحدى الطرق التي يمكننا استخدامها لتقليل التباين في شجرة قرار واحدة باسم التعبئة ، والتي تسمى أحيانًا تجميع التمهيد .

تعمل عملية التعبئة على النحو التالي:

1. خذ عينات تمهيدية من مجموعة البيانات الأصلية.

2. قم بإنشاء شجرة قرارات لكل عينة تمهيدية.

3. متوسط التوقعات من كل شجرة للحصول على النموذج النهائي.

من خلال بناء المئات أو حتى الآلاف من أشجار القرار الفردية وأخذ متوسط التنبؤات لجميع الأشجار، غالبًا ما ننتهي بنموذج حقيبة مُجهز ينتج معدل خطأ في الاختبار أقل بكثير مقارنة بشجرة قرار واحدة.

يقدم هذا البرنامج التعليمي مثالاً خطوة بخطوة حول كيفية إنشاء نموذج مُعبأ في R.

الخطوة 1: تحميل الحزم اللازمة

أولاً، سنقوم بتحميل الحزم اللازمة لهذا المثال:

 library (dplyr) #for data wrangling
library (e1071) #for calculating variable importance
library (caret) #for general model fitting
library (rpart) #for fitting decision trees
library (ipred) #for fitting bagged decision trees

الخطوة 2: قم بتركيب النموذج المعبأ في الحقيبة

في هذا المثال، سوف نستخدم مجموعة بيانات R مدمجة تسمى جودة الهواء والتي تحتوي على قياسات لجودة الهواء في مدينة نيويورك على مدار 153 يومًا فرديًا.

 #view structure of air quality dataset
str(airquality)

'data.frame': 153 obs. of 6 variables:
 $ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
 $Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
 $Month: int 5 5 5 5 5 5 5 5 5 5 ...
 $Day: int 1 2 3 4 5 6 7 8 9 10 ...

يوضح التعليمة البرمجية التالية كيفية ملاءمة نموذج معبأ في R باستخدام وظيفة التعبئة () من مكتبة ipred .

 #make this example reproducible
set.seed(1)

#fit the bagged model
bag <- bagging(
  formula = Ozone ~ .,
  data = airquality,
  nbagg = 150 ,   
  coob = TRUE ,
  control = rpart. control (minsplit = 2 , cp = 0 )
)

#display fitted bagged model
bag

Bagging regression trees with 150 bootstrap replications 

Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, 
    coob = TRUE, control = rpart.control(minsplit = 2, cp = 0))

Out-of-bag estimate of root mean squared error: 17.4973

لاحظ أننا اخترنا استخدام 150 عينة تم تمهيدها لبناء النموذج الذي تم تعبئته في الكيس وحددنا أن coob هو TRUE للحصول على الخطأ المقدر خارج الحقيبة.

استخدمنا أيضًا المواصفات التالية في الدالة rpart.control() :

  • minsplit = 2: هذا يخبر النموذج بأنه يتطلب ملاحظتين فقط في العقدة للتقسيم.
  • ج = 0 . هذه هي معلمة التعقيد. من خلال تعيينه على 0، لا نطلب من النموذج أن يكون قادرًا على تحسين الملاءمة العامة بأي شكل من الأشكال من أجل إجراء التقسيم.

بشكل أساسي، تسمح هاتان الوسيطتان للأشجار الفردية بالنمو عميقًا للغاية، مما يؤدي إلى أشجار ذات تباين عالٍ ولكن انحياز منخفض. بعد ذلك، عندما نقوم بتطبيق التعبئة، نكون قادرين على تقليل تباين النموذج النهائي مع الحفاظ على التحيز منخفضًا.

من نتائج النموذج، يمكننا أن نرى أن RMSE المقدر خارج الحقيبة هو 17.4973 . وهذا هو متوسط الفرق بين القيمة المتوقعة للأوزون والقيمة الفعلية المرصودة.

الخطوة 3: تصور أهمية المتنبئين

على الرغم من أن النماذج المجهزة تميل إلى تقديم تنبؤات أكثر دقة من أشجار القرار الفردية، إلا أنه من الصعب تفسير وتصور نتائج النماذج المجهزة.

ومع ذلك، يمكننا تصور أهمية متغيرات التوقع عن طريق حساب التخفيض الإجمالي في RSS (مجموع المربعات المتبقية) بسبب التوزيع على متنبئ معين، متوسطًا على جميع الأشجار. كلما كانت القيمة أكبر، كلما كان المتنبئ أكثر أهمية.

يوضح الكود التالي كيفية إنشاء مخطط ذو أهمية متغيرة لنموذج الحقيبة المجهزة، باستخدام الدالة varImp() من مكتبة علامة الإقحام :

 #calculate variable importance
VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag))

#sort variable importance descending
VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),]

#visualize variable importance with horizontal bar plot
barplot(VI_plot$Overall,
        names.arg= rownames (VI_plot),
        horiz= TRUE ,
        col=' steelblue ',
        xlab=' Variable Importance ')

الرسم البياني للأهمية المتغيرة في R

يمكننا أن نرى أن Solar.R هو المتغير الأكثر أهمية في النموذج بينما الشهر هو الأقل أهمية.

الخطوة 4: استخدم النموذج لعمل تنبؤات

وأخيرًا، يمكننا استخدام نموذج الحقيبة المجهزة للتنبؤ بالملاحظات الجديدة.

 #define new observation
new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5)

#use fitted bagged model to predict Ozone value of new observation
predict(bag, newdata=new)

24.4866666666667

وبناء على قيم المتغيرات المتنبئة، يتوقع نموذج الحقيبة المجهزة أن قيمة الأوزون ستكون 24487 في هذا اليوم بالذات.

يمكن العثور على رمز R الكامل المستخدم في هذا المثال هنا .

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *