دروس R العشوائية للغابات مع مثال
ما هي الغابة العشوائية في R؟
تعتمد الغابات العشوائية على فكرة بسيطة: "حكمة الجمهور". يعطي إجمالي نتائج المتنبئين المتعددين تنبؤًا أفضل من أفضل متنبئ فردي. مجموعة من المتنبئين تسمى طاقم. وهكذا تسمى هذه التقنية فرقة التعلم.
في البرنامج التعليمي السابق، تعلمت كيفية الاستخدام أشجار القرار لإجراء التنبؤ الثنائي. لتحسين أسلوبنا، يمكننا تدريب مجموعة من مصنفات شجرة القرار، كل منها في مجموعة فرعية عشوائية مختلفة من مجموعة القطار. للتنبؤ، نحصل فقط على تنبؤات جميع الأشجار الفردية، ثم نتنبأ بالفصل الذي يحصل على أكبر عدد من الأصوات. هذه التقنية تسمى غابة عشوائية.
الخطوة 1) استيراد البيانات
للتأكد من أن لديك نفس مجموعة البيانات كما في البرنامج التعليمي لـ أشجار القرار، يتم تخزين اختبار القطار ومجموعة الاختبار على الإنترنت. يمكنك استيرادها دون إجراء أي تغيير.
library(dplyr)
data_train <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/train.csv")
glimpse(data_train)
data_test <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv")
glimpse(data_test)
الخطوة 2) تدريب النموذج
إحدى طرق تقييم أداء النموذج هي تدريبه على عدد من مجموعات البيانات الأصغر المختلفة وتقييمها على مجموعة الاختبار الأصغر الأخرى. وهذا ما يسمى التحقق من صحة F-fold ميزة. R لديه وظيفة لتقسيم عدد مجموعات البيانات من نفس الحجم تقريبًا بشكل عشوائي. على سبيل المثال، إذا كانت k = 9، فسيتم تقييم النموذج عبر المجلدات التسعة واختباره على مجموعة الاختبار المتبقية. يتم تكرار هذه العملية حتى يتم تقييم كافة المجموعات الفرعية. تُستخدم هذه التقنية على نطاق واسع لاختيار النموذج، خاصة عندما يكون للنموذج معلمات لضبطها.
والآن بعد أن أصبح لدينا طريقة لتقييم نموذجنا، نحتاج إلى معرفة كيفية اختيار المعلمات التي تعمل على تعميم البيانات بشكل أفضل.
تختار الغابة العشوائية مجموعة فرعية عشوائية من الميزات وتبني العديد من أشجار القرار. يقوم النموذج بحساب متوسط جميع تنبؤات أشجار القرارات.
تحتوي الغابة العشوائية على بعض المعلمات التي يمكن تغييرها لتحسين تعميم التنبؤ. سوف تستخدم الدالة RandomForest() لتدريب النموذج.
بناء جملة غابة راندون هو
RandomForest(formula, ntree=n, mtry=FALSE, maxnodes = NULL) Arguments: - Formula: Formula of the fitted model - ntree: number of trees in the forest - mtry: Number of candidates draw to feed the algorithm. By default, it is the square of the number of columns. - maxnodes: Set the maximum amount of terminal nodes in the forest - importance=TRUE: Whether independent variables importance in the random forest be assessed
ملاحظات: يمكن تدريب الغابة العشوائية على المزيد من المعلمات. يمكنك الرجوع إلى المقالة القصيرة لرؤية المعلمات المختلفة.
ضبط النموذج هو عمل شاق للغاية. هناك الكثير من الدمج الممكن بين المعلمات. ليس بالضرورة أن يكون لديك الوقت الكافي لتجربتها جميعًا. البديل الجيد هو السماح للآلة بالعثور على أفضل مجموعة تناسبك. هناك طريقتان متاحتان:
- بحث عشوائي
- شبكة البحث
سوف نقوم بتعريف كلا الطريقتين ولكن خلال البرنامج التعليمي، سوف نقوم بتدريب النموذج باستخدام البحث الشبكي
تعريف بحث الشبكة
طريقة البحث في الشبكة بسيطة، وسيتم تقييم النموذج على جميع المجموعات التي تمررها في الوظيفة، باستخدام التحقق المتبادل.
على سبيل المثال، تريد تجربة النموذج الذي يحتوي على 10، 20، 30 عددًا من الأشجار وسيتم اختبار كل شجرة على عدد من المحاولات يساوي 1، 2، 3، 4، 5. ثم سيقوم الجهاز باختبار 15 نموذجًا مختلفًا:
.mtry ntrees 1 1 10 2 2 10 3 3 10 4 4 10 5 5 10 6 1 20 7 2 20 8 3 20 9 4 20 10 5 20 11 1 30 12 2 30 13 3 30 14 4 30 15 5 30
ستقوم الخوارزمية بتقييم:
RandomForest(formula, ntree=10, mtry=1) RandomForest(formula, ntree=10, mtry=2) RandomForest(formula, ntree=10, mtry=3) RandomForest(formula, ntree=20, mtry=2) ...
في كل مرة، تقوم الغابة العشوائية بإجراء تجارب عبر التحقق من الصحة. أحد عيوب البحث الشبكي هو عدد التجارب. يمكن أن تصبح قابلة للانفجار بسهولة عندما يكون عدد التركيبات مرتفعًا. للتغلب على هذه المشكلة، يمكنك استخدام البحث العشوائي
تعريف البحث العشوائي
الفرق الكبير بين البحث العشوائي والبحث الشبكي هو أن البحث العشوائي لن يقيم كل تركيبة من المعلمات الفائقة في مساحة البحث. بدلاً من ذلك، سيختار التركيبة عشوائيًا في كل تكرار. والميزة هي أنه يقلل من التكلفة الحسابية.
ضبط معلمة التحكم
سوف تتابع على النحو التالي لبناء النموذج وتقييمه:
- قم بتقييم النموذج باستخدام الإعداد الافتراضي
- العثور على أفضل عدد من mtry
- العثور على أفضل عدد من maxnodes
- العثور على أفضل عدد من الأشجار
- تقييم النموذج في مجموعة بيانات الاختبار
قبل أن تبدأ باستكشاف المعلمات، تحتاج إلى تثبيت مكتبتين.
- علامة الإقحام: مكتبة التعلم الآلي R. اذا كنت تمتلك تثبيت R مع ص الأساسية. إنه موجود بالفعل في المكتبة
- الأناكندة أفعى ضخمة: conda install -cr r-caret
- e1071: مكتبة التعلم الآلي R.
- الأناكندة أفعى ضخمة: تثبيت كوندا -cr r-e1071
يمكنك استيرادها مع RandomForest
library(randomForest) library(caret) library(e1071)
الإعدادات الإفتراضية
يتم التحكم في التحقق من صحة K-fold بواسطة وظيفة TrainControl ().
trainControl(method = "cv", number = n, search ="grid") arguments - method = "cv": The method used to resample the dataset. - number = n: Number of folders to create - search = "grid": Use the search grid method. For randomized method, use "grid" Note: You can refer to the vignette to see the other arguments of the function.
يمكنك محاولة تشغيل النموذج باستخدام المعلمات الافتراضية والاطلاع على درجة الدقة.
ملاحظات: سوف تستخدم نفس عناصر التحكم خلال كل البرنامج التعليمي.
# Define the control
trControl <- trainControl(method = "cv",
number = 10,
search = "grid")
سوف تستخدم مكتبة علامة الإقحام لتقييم النموذج الخاص بك. تحتوي المكتبة على وظيفة واحدة تسمى Train() لتقييم جميع العناصر تقريبًا آلة التعلم الخوارزمية. بعبارة أخرى، يمكنك استخدام هذه الوظيفة لتدريب خوارزميات أخرى.
بناء الجملة الأساسي هو:
train(formula, df, method = "rf", metric= "Accuracy", trControl = trainControl(), tuneGrid = NULL) argument - `formula`: Define the formula of the algorithm - `method`: Define which model to train. Note, at the end of the tutorial, there is a list of all the models that can be trained - `metric` = "Accuracy": Define how to select the optimal model - `trControl = trainControl()`: Define the control parameters - `tuneGrid = NULL`: Return a data frame with all the possible combination
لنحاول بناء النموذج بالقيم الافتراضية.
set.seed(1234)
# Run the model
rf_default <- train(survived~.,
data = data_train,
method = "rf",
metric = "Accuracy",
trControl = trControl)
# Print the results
print(rf_default)
شرح الكود
- TrainControl(method=”cv”، number=10، search=”grid”): قم بتقييم النموذج من خلال بحث شبكي مكون من 10 مجلدات
- تدريب(…): تدريب نموذج الغابة العشوائية. يتم اختيار أفضل نموذج مع مقياس الدقة.
الإخراج:
## Random Forest ## ## 836 samples ## 7 predictor ## 2 classes: 'No', 'Yes' ## ## No pre-processing ## Resampling: Cross-Validated (10 fold) ## Summary of sample sizes: 753, 752, 753, 752, 752, 752, ... ## Resampling results across tuning parameters: ## ## mtry Accuracy Kappa ## 2 0.7919248 0.5536486 ## 6 0.7811245 0.5391611 ## 10 0.7572002 0.4939620 ## ## Accuracy was used to select the optimal model using the largest value. ## The final value used for the model was mtry = 2.
تستخدم الخوارزمية 500 شجرة واختبرت ثلاث قيم مختلفة لـ mtry: 2، 6، 10.
القيمة النهائية المستخدمة للنموذج كانت mtry = 2 بدقة 0.78. دعونا نحاول الحصول على درجة أعلى.
الخطوة 2) ابحث عن أفضل mtry
يمكنك اختبار النموذج بقيم mtry من 1 إلى 10
set.seed(1234)
tuneGrid <- expand.grid(.mtry = c(1: 10))
rf_mtry <- train(survived~.,
data = data_train,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = trControl,
importance = TRUE,
nodesize = 14,
ntree = 300)
print(rf_mtry)
شرح الكود
- TuneGrid <-expand.grid(.mtry=c(3:10)): إنشاء متجه بقيمة من 3:10
القيمة النهائية المستخدمة للنموذج كانت mtry = 4.
الإخراج:
## Random Forest ## ## 836 samples ## 7 predictor ## 2 classes: 'No', 'Yes' ## ## No pre-processing ## Resampling: Cross-Validated (10 fold) ## Summary of sample sizes: 753, 752, 753, 752, 752, 752, ... ## Resampling results across tuning parameters: ## ## mtry Accuracy Kappa ## 1 0.7572576 0.4647368 ## 2 0.7979346 0.5662364 ## 3 0.8075158 0.5884815 ## 4 0.8110729 0.5970664 ## 5 0.8074727 0.5900030 ## 6 0.8099111 0.5949342 ## 7 0.8050918 0.5866415 ## 8 0.8050918 0.5855399 ## 9 0.8050631 0.5855035 ## 10 0.7978916 0.5707336 ## ## Accuracy was used to select the optimal model using the largest value. ## The final value used for the model was mtry = 4.
يتم تخزين أفضل قيمة لـ mtry في:
rf_mtry$bestTune$mtry
يمكنك تخزينه واستخدامه عندما تحتاج إلى ضبط المعلمات الأخرى.
max(rf_mtry$results$Accuracy)
الإخراج:
## [1] 0.8110729
best_mtry <- rf_mtry$bestTune$mtry best_mtry
الإخراج:
## [1] 4
الخطوة 3) ابحث عن أفضل العقد القصوى
يجب عليك إنشاء حلقة لتقييم القيم المختلفة لـ maxnodes. في الكود التالي، ستقوم بما يلي:
- انشئ قائمة
- قم بإنشاء متغير بأفضل قيمة للمعلمة mtry؛ إلزامي
- قم بإنشاء الحلقة
- قم بتخزين القيمة الحالية للعقدة القصوى
- لخص النتائج
store_maxnode <- list()
tuneGrid <- expand.grid(.mtry = best_mtry)
for (maxnodes in c(5: 15)) {
set.seed(1234)
rf_maxnode <- train(survived~.,
data = data_train,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = trControl,
importance = TRUE,
nodesize = 14,
maxnodes = maxnodes,
ntree = 300)
current_iteration <- toString(maxnodes)
store_maxnode[[current_iteration]] <- rf_maxnode
}
results_mtry <- resamples(store_maxnode)
summary(results_mtry)
شرح الكود:
- store_maxnode <- list(): سيتم تخزين نتائج النموذج في هذه القائمة
- توسيع.جريد(.mtry=best_mtry): استخدم أفضل قيمة لـ mtry
- for (maxnodes in c(15:25)) { … }: حساب النموذج بقيم maxnodes تبدأ من 15 إلى 25.
- maxnodes=maxnodes: لكل تكرار، maxnodes تساوي القيمة الحالية لmaxnodes. أي 15، 16، 17، ...
- المفتاح <- toString(maxnodes): قم بتخزين قيمة maxnode كمتغير سلسلة.
- store_maxnode[[key]] <- rf_maxnode: احفظ نتيجة النموذج في القائمة.
- resamples(store_maxnode): ترتيب نتائج النموذج
- ملخص (results_mtry): طباعة ملخص كل المجموعة.
الإخراج:
## ## Call: ## summary.resamples(object = results_mtry) ## ## Models: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ## Number of resamples: 10 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 5 0.6785714 0.7529762 0.7903758 0.7799771 0.8168388 0.8433735 0 ## 6 0.6904762 0.7648810 0.7784710 0.7811962 0.8125000 0.8313253 0 ## 7 0.6904762 0.7619048 0.7738095 0.7788009 0.8102410 0.8333333 0 ## 8 0.6904762 0.7627295 0.7844234 0.7847820 0.8184524 0.8433735 0 ## 9 0.7261905 0.7747418 0.8083764 0.7955250 0.8258749 0.8333333 0 ## 10 0.6904762 0.7837780 0.7904475 0.7895869 0.8214286 0.8433735 0 ## 11 0.7023810 0.7791523 0.8024240 0.7943775 0.8184524 0.8433735 0 ## 12 0.7380952 0.7910929 0.8144005 0.8051205 0.8288511 0.8452381 0 ## 13 0.7142857 0.8005952 0.8192771 0.8075158 0.8403614 0.8452381 0 ## 14 0.7380952 0.7941050 0.8203528 0.8098967 0.8403614 0.8452381 0 ## 15 0.7142857 0.8000215 0.8203528 0.8075301 0.8378873 0.8554217 0 ## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 5 0.3297872 0.4640436 0.5459706 0.5270773 0.6068751 0.6717371 0 ## 6 0.3576471 0.4981484 0.5248805 0.5366310 0.6031287 0.6480921 0 ## 7 0.3576471 0.4927448 0.5192771 0.5297159 0.5996437 0.6508314 0 ## 8 0.3576471 0.4848320 0.5408159 0.5427127 0.6200253 0.6717371 0 ## 9 0.4236277 0.5074421 0.5859472 0.5601687 0.6228626 0.6480921 0 ## 10 0.3576471 0.5255698 0.5527057 0.5497490 0.6204819 0.6717371 0 ## 11 0.3794326 0.5235007 0.5783191 0.5600467 0.6126720 0.6717371 0 ## 12 0.4460432 0.5480930 0.5999072 0.5808134 0.6296780 0.6717371 0 ## 13 0.4014252 0.5725752 0.6087279 0.5875305 0.6576219 0.6678832 0 ## 14 0.4460432 0.5585005 0.6117973 0.5911995 0.6590982 0.6717371 0 ## 15 0.4014252 0.5689401 0.6117973 0.5867010 0.6507194 0.6955990 0
القيمة الأخيرة لـ maxnode لها أعلى دقة. يمكنك تجربة قيم أعلى لمعرفة ما إذا كان بإمكانك الحصول على درجة أعلى.
store_maxnode <- list()
tuneGrid <- expand.grid(.mtry = best_mtry)
for (maxnodes in c(20: 30)) {
set.seed(1234)
rf_maxnode <- train(survived~.,
data = data_train,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = trControl,
importance = TRUE,
nodesize = 14,
maxnodes = maxnodes,
ntree = 300)
key <- toString(maxnodes)
store_maxnode[[key]] <- rf_maxnode
}
results_node <- resamples(store_maxnode)
summary(results_node)
الإخراج:
## ## Call: ## summary.resamples(object = results_node) ## ## Models: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ## Number of resamples: 10 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 20 0.7142857 0.7821644 0.8144005 0.8075301 0.8447719 0.8571429 0 ## 21 0.7142857 0.8000215 0.8144005 0.8075014 0.8403614 0.8571429 0 ## 22 0.7023810 0.7941050 0.8263769 0.8099254 0.8328313 0.8690476 0 ## 23 0.7023810 0.7941050 0.8263769 0.8111302 0.8447719 0.8571429 0 ## 24 0.7142857 0.7946429 0.8313253 0.8135112 0.8417599 0.8690476 0 ## 25 0.7142857 0.7916667 0.8313253 0.8099398 0.8408635 0.8690476 0 ## 26 0.7142857 0.7941050 0.8203528 0.8123207 0.8528758 0.8571429 0 ## 27 0.7023810 0.8060456 0.8313253 0.8135112 0.8333333 0.8690476 0 ## 28 0.7261905 0.7941050 0.8203528 0.8111015 0.8328313 0.8690476 0 ## 29 0.7142857 0.7910929 0.8313253 0.8087063 0.8333333 0.8571429 0 ## 30 0.6785714 0.7910929 0.8263769 0.8063253 0.8403614 0.8690476 0 ## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 20 0.3956835 0.5316120 0.5961830 0.5854366 0.6661120 0.6955990 0 ## 21 0.3956835 0.5699332 0.5960343 0.5853247 0.6590982 0.6919315 0 ## 22 0.3735084 0.5560661 0.6221836 0.5914492 0.6422128 0.7189781 0 ## 23 0.3735084 0.5594228 0.6228827 0.5939786 0.6657372 0.6955990 0 ## 24 0.3956835 0.5600352 0.6337821 0.5992188 0.6604703 0.7189781 0 ## 25 0.3956835 0.5530760 0.6354875 0.5912239 0.6554912 0.7189781 0 ## 26 0.3956835 0.5589331 0.6136074 0.5969142 0.6822128 0.6955990 0 ## 27 0.3735084 0.5852459 0.6368425 0.5998148 0.6426088 0.7189781 0 ## 28 0.4290780 0.5589331 0.6154905 0.5946859 0.6356141 0.7189781 0 ## 29 0.4070588 0.5534173 0.6337821 0.5901173 0.6423101 0.6919315 0 ## 30 0.3297872 0.5534173 0.6202632 0.5843432 0.6590982 0.7189781 0
تم الحصول على أعلى درجة دقة بقيمة maxnode تساوي 22.
الخطوة 4) ابحث عن أفضل الأشجار
الآن بعد أن حصلت على أفضل قيمة لـ mtry وmaxnode، يمكنك ضبط عدد الأشجار. الطريقة هي نفسها تمامًا مثل maxnode.
store_maxtrees <- list()
for (ntree in c(250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000)) {
set.seed(5678)
rf_maxtrees <- train(survived~.,
data = data_train,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = trControl,
importance = TRUE,
nodesize = 14,
maxnodes = 24,
ntree = ntree)
key <- toString(ntree)
store_maxtrees[[key]] <- rf_maxtrees
}
results_tree <- resamples(store_maxtrees)
summary(results_tree)
الإخراج:
## ## Call: ## summary.resamples(object = results_tree) ## ## Models: 250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000 ## Number of resamples: 10 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 250 0.7380952 0.7976190 0.8083764 0.8087010 0.8292683 0.8674699 0 ## 300 0.7500000 0.7886905 0.8024240 0.8027199 0.8203397 0.8452381 0 ## 350 0.7500000 0.7886905 0.8024240 0.8027056 0.8277623 0.8452381 0 ## 400 0.7500000 0.7886905 0.8083764 0.8051009 0.8292683 0.8452381 0 ## 450 0.7500000 0.7886905 0.8024240 0.8039104 0.8292683 0.8452381 0 ## 500 0.7619048 0.7886905 0.8024240 0.8062914 0.8292683 0.8571429 0 ## 550 0.7619048 0.7886905 0.8083764 0.8099062 0.8323171 0.8571429 0 ## 600 0.7619048 0.7886905 0.8083764 0.8099205 0.8323171 0.8674699 0 ## 800 0.7619048 0.7976190 0.8083764 0.8110820 0.8292683 0.8674699 0 ## 1000 0.7619048 0.7976190 0.8121510 0.8086723 0.8303571 0.8452381 0 ## 2000 0.7619048 0.7886905 0.8121510 0.8086723 0.8333333 0.8452381 0 ## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 250 0.4061697 0.5667400 0.5836013 0.5856103 0.6335363 0.7196807 0 ## 300 0.4302326 0.5449376 0.5780349 0.5723307 0.6130767 0.6710843 0 ## 350 0.4302326 0.5449376 0.5780349 0.5723185 0.6291592 0.6710843 0 ## 400 0.4302326 0.5482030 0.5836013 0.5774782 0.6335363 0.6710843 0 ## 450 0.4302326 0.5449376 0.5780349 0.5750587 0.6335363 0.6710843 0 ## 500 0.4601542 0.5449376 0.5780349 0.5804340 0.6335363 0.6949153 0 ## 550 0.4601542 0.5482030 0.5857118 0.5884507 0.6396872 0.6949153 0 ## 600 0.4601542 0.5482030 0.5857118 0.5884374 0.6396872 0.7196807 0 ## 800 0.4601542 0.5667400 0.5836013 0.5910088 0.6335363 0.7196807 0 ## 1000 0.4601542 0.5667400 0.5961590 0.5857446 0.6343666 0.6678832 0 ## 2000 0.4601542 0.5482030 0.5961590 0.5862151 0.6440678 0.6656337 0
لقد حصلت على النموذج النهائي. يمكنك تدريب الغابة العشوائية بالمعلمات التالية:
- ntree=800: سيتم تدريب 800 شجرة
- mtry=4: يتم اختيار 4 ميزات لكل تكرار
- maxnodes = 24: الحد الأقصى 24 عقدة في العقد الطرفية (الأوراق)
fit_rf <- train(survived~.,
data_train,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = trControl,
importance = TRUE,
nodesize = 14,
ntree = 800,
maxnodes = 24)
الخطوة 5) تقييم النموذج
تحتوي علامة إقحام المكتبة على وظيفة للتنبؤ.
predict(model, newdata= df) argument - `model`: Define the model evaluated before. - `newdata`: Define the dataset to make prediction
prediction <-predict(fit_rf, data_test)
يمكنك استخدام التنبؤ لحساب مصفوفة الارتباك ورؤية درجة الدقة
confusionMatrix(prediction, data_test$survived)
الإخراج:
## Confusion Matrix and Statistics ## ## Reference ## Prediction No Yes ## No 110 32 ## Yes 11 56 ## ## Accuracy : 0.7943 ## 95% CI : (0.733, 0.8469) ## No Information Rate : 0.5789 ## P-Value [Acc > NIR] : 3.959e-11 ## ## Kappa : 0.5638 ## Mcnemar's Test P-Value : 0.002289 ## ## Sensitivity : 0.9091 ## Specificity : 0.6364 ## Pos Pred Value : 0.7746 ## Neg Pred Value : 0.8358 ## Prevalence : 0.5789 ## Detection Rate : 0.5263 ## Detection Prevalence : 0.6794 ## Balanced Accuracy : 0.7727 ## ## 'Positive' Class : No ##
لديك دقة تبلغ 0.7943 بالمائة، وهي أعلى من القيمة الافتراضية
الخطوة 6) تصور النتيجة
وأخيرًا، يمكنك الاطلاع على أهمية الميزة باستخدام الدالة varImp(). ويبدو أن أهم السمات هي الجنس والعمر. وهذا ليس مفاجئا لأن السمات المهمة من المرجح أن تظهر أقرب إلى جذر الشجرة، في حين أن السمات الأقل أهمية غالبا ما تظهر قريبة من الأوراق.
varImpPlot(fit_rf)
الإخراج:
varImp(fit_rf) ## rf variable importance ## ## Importance ## sexmale 100.000 ## age 28.014 ## pclassMiddle 27.016 ## fare 21.557 ## pclassUpper 16.324 ## sibsp 11.246 ## parch 5.522 ## embarkedC 4.908 ## embarkedQ 1.420 ## embarkedS 0.000
ملخص
يمكننا تلخيص كيفية تدريب وتقييم الغابة العشوائية بالجدول أدناه:
| المكتبة | الهدف | الوظيفة | معامل |
|---|---|---|---|
| RandomForest | إنشاء غابة عشوائية | راندومفوريست() | الصيغة، ntree=n، mtry=FALSE، maxnodes = NULL |
| الإقحام | إنشاء التحقق من صحة المجلد K | التحكم في القطار () | الطريقة = "cv"، الرقم = n، البحث = "الشبكة" |
| الإقحام | تدريب غابة عشوائية | قطار() | الصيغة، df، الطريقة = "rf"، المتري = "الدقة"، trControl = TrainControl()، tuneGrid = NULL |
| الإقحام | توقع خارج العينة | تنبأ | النموذج، البيانات الجديدة = df |
| الإقحام | مصفوفة الارتباك والإحصائيات | الارتباك مصفوفة() | نموذج، اختبار ذ |
| الإقحام | أهمية متغيرة | كفارإمب () | نموذج |
الزائدة الدودية
قائمة النماذج المستخدمة في علامة الإقحام
names>(getModelInfo())
الإخراج:
## [1] "ada" "AdaBag" "AdaBoost.M1" ## [4] "adaboost" "amdai" "ANFIS" ## [7] "avNNet" "awnb" "awtan" ## [10] "bag" "bagEarth" "bagEarthGCV" ## [13] "bagFDA" "bagFDAGCV" "bam" ## [16] "bartMachine" "bayesglm" "binda" ## [19] "blackboost" "blasso" "blassoAveraged" ## [22] "bridge" "brnn" "BstLm" ## [25] "bstSm" "bstTree" "C5.0" ## [28] "C5.0Cost" "C5.0Rules" "C5.0Tree" ## [31] "cforest" "chaid" "CSimca" ## [34] "ctree" "ctree2" "cubist" ## [37] "dda" "deepboost" "DENFIS" ## [40] "dnn" "dwdLinear" "dwdPoly" ## [43] "dwdRadial" "earth" "elm" ## [46] "enet" "evtree" "extraTrees" ## [49] "fda" "FH.GBML" "FIR.DM" ## [52] "foba" "FRBCS.CHI" "FRBCS.W" ## [55] "FS.HGD" "gam" "gamboost" ## [58] "gamLoess" "gamSpline" "gaussprLinear" ## [61] "gaussprPoly" "gaussprRadial" "gbm_h3o" ## [64] "gbm" "gcvEarth" "GFS.FR.MOGUL" ## [67] "GFS.GCCL" "GFS.LT.RS" "GFS.THRIFT" ## [70] "glm.nb" "glm" "glmboost" ## [73] "glmnet_h3o" "glmnet" "glmStepAIC" ## [76] "gpls" "hda" "hdda" ## [79] "hdrda" "HYFIS" "icr" ## [82] "J48" "JRip" "kernelpls" ## [85] "kknn" "knn" "krlsPoly" ## [88] "krlsRadial" "lars" "lars2" ## [91] "lasso" "lda" "lda2" ## [94] "leapBackward" "leapForward" "leapSeq" ## [97] "Linda" "lm" "lmStepAIC" ## [100] "LMT" "loclda" "logicBag" ## [103] "LogitBoost" "logreg" "lssvmLinear" ## [106] "lssvmPoly" "lssvmRadial" "lvq" ## [109] "M5" "M5Rules" "manb" ## [112] "mda" "Mlda" "mlp" ## [115] "mlpKerasDecay" "mlpKerasDecayCost" "mlpKerasDropout" ## [118] "mlpKerasDropoutCost" "mlpML" "mlpSGD" ## [121] "mlpWeightDecay" "mlpWeightDecayML" "monmlp" ## [124] "msaenet" "multinom" "mxnet" ## [127] "mxnetAdam" "naive_bayes" "nb" ## [130] "nbDiscrete" "nbSearch" "neuralnet" ## [133] "nnet" "nnls" "nodeHarvest" ## [136] "null" "OneR" "ordinalNet" ## [139] "ORFlog" "ORFpls" "ORFridge" ## [142] "ORFsvm" "ownn" "pam" ## [145] "parRF" "PART" "partDSA" ## [148] "pcaNNet" "pcr" "pda" ## [151] "pda2" "penalized" "PenalizedLDA" ## [154] "plr" "pls" "plsRglm" ## [157] "polr" "ppr" "PRIM" ## [160] "protoclass" "pythonKnnReg" "qda" ## [163] "QdaCov" "qrf" "qrnn" ## [166] "randomGLM" "ranger" "rbf" ## [169] "rbfDDA" "Rborist" "rda" ## [172] "regLogistic" "relaxo" "rf" ## [175] "rFerns" "RFlda" "rfRules" ## [178] "ridge" "rlda" "rlm" ## [181] "rmda" "rocc" "rotationForest" ## [184] "rotationForestCp" "rpart" "rpart1SE" ## [187] "rpart2" "rpartCost" "rpartScore" ## [190] "rqlasso" "rqnc" "RRF" ## [193] "RRFglobal" "rrlda" "RSimca" ## [196] "rvmLinear" "rvmPoly" "rvmRadial" ## [199] "SBC" "sda" "sdwd" ## [202] "simpls" "SLAVE" "slda" ## [205] "smda" "snn" "sparseLDA" ## [208] "spikeslab" "spls" "stepLDA" ## [211] "stepQDA" "superpc" "svmBoundrangeString"## [214] "svmExpoString" "svmLinear" "svmLinear2" ## [217] "svmLinear3" "svmLinearWeights" "svmLinearWeights2" ## [220] "svmPoly" "svmRadial" "svmRadialCost" ## [223] "svmRadialSigma" "svmRadialWeights" "svmSpectrumString" ## [226] "tan" "tanSearch" "treebag" ## [229] "vbmpRadial" "vglmAdjCat" "vglmContRatio" ## [232] "vglmCumulative" "widekernelpls" "WM" ## [235] "wsrf" "xgbLinear" "xgbTree" ## [238] "xyf"
