الغابات العشوائية باستخدام ranger
درّب نماذج الغابات العشوائية، واضبط mtry وntrees، وقيّم خطأ OOB
الغابات العشوائية باستخدام ranger درس مجاني في R Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
ما الغابة العشوائية؟
تبني الغابة العشوائية عددًا كبيرًا من أشجار القرار على عينات مُنشأة بالـbootstrap من البيانات، ثم تحسب متوسط تنبؤاتها (في الانحدار) أو تختار الفئة ذات الأغلبية (في التصنيف). ويعود اسم هذا التجميع إلى مصدرين للعشوائية: أخذ عينات bootstrap من الصفوف، والاختيار العشوائي للميزات عند كل عملية تقسيم.
library(ranger)
# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
medv ~ .,
data = MASS::Boston,
num.trees = 500
)
print(rf)المعامل mtry
يمثل mtry عدد الميزات التي يُنظر فيها عشوائيًا عند كل عملية تقسيم. ويؤدي استخدام عدد من الميزات أقل من العدد الإجمالي إلى تقليل الترابط بين الأشجار، مما يقلل التباين. والقاعدة التقريبية هي mtry = sqrt(p) للتصنيف وmtry = p/3 للانحدار، حيث يمثّل p عدد المتنبئات.
p <- ncol(MASS::Boston) - 1 # number of predictors
rf_class <- ranger(
Species ~ ., data = iris,
num.trees = 500,
mtry = floor(sqrt(4)) # sqrt(p) for classification
)
rf_reg <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = floor(p / 3) # p/3 for regression
)
cat('Classification OOB Error:', rf_class$prediction.error)
cat('Regression OOB RMSE:', sqrt(rf_reg$prediction.error))خطأ OOB — تحقق مجاني
بما أن كل شجرة تُدرَّب على عينة bootstrap، يُستبعد نحو ثلث الملاحظات (خارج الحقيبة، OOB). وتعمل عينات OOB هذه كمجموعة تحقق مضمّنة لكل شجرة. ويقدم خطأ OOB الإجمالي تقديرًا شبه غير متحيز لخطأ الاختبار، من دون الحاجة إلى مجموعة تحقق منفصلة.
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = 4
)
# OOB MSE
cat('OOB MSE:', rf$prediction.error)
# OOB RMSE
cat('OOB RMSE:', sqrt(rf$prediction.error))
# For classification: OOB error rate
rf_cl <- ranger(Species ~ ., data = iris)
cat('OOB Error Rate:', rf_cl$prediction.error)أهمية المتغيرات
يسجل ضبط importance = 'impurity' إجمالي الانخفاض في عدم نقاء العقدة (Gini أو MSE) لكل ميزة عبر جميع الأشجار. أما ضبط importance = 'permutation' فيقيس فقدان الدقة عند تبديل كل ميزة عشوائيًا؛ وهذا أكثر موثوقية لكنه أبطأ.
rf_imp <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
importance = 'impurity'
)
# Sorted importance scores
imp <- sort(rf_imp$variable.importance, decreasing = TRUE)
print(imp)
# Quick plot
barplot(imp, las = 2, col = 'steelblue',
main = 'Random Forest Variable Importance')التنبؤات باستخدام ranger
استخدم predict(rf, data = test) لإنشاء التنبؤات. وتكون النتيجة قائمة؛ ويمكن الوصول إلى التنبؤات باستخدام $predictions. وفي التصنيف، تكون التنبؤات افتراضيًا مستويات عامل.
set.seed(1)
idx <- sample(nrow(MASS::Boston), 400)
train <- MASS::Boston[idx, ]
test <- MASS::Boston[-idx, ]
rf <- ranger(medv ~ ., data = train, num.trees = 500)
pred <- predict(rf, data = test)
test_rmse <- sqrt(mean((pred$predictions - test$medv)^2))
cat('Test RMSE:', round(test_rmse, 3))مفهوم مصفوفة الالتباس
في التصنيف، تنشئ مصفوفة الالتباس جدولًا تقاطعيًا للفئات الفعلية والمتوقعة. وتشمل المقاييس الأساسية المستخرجة منها: الدقة، والإحكام (TP / (TP + FP))، والاسترجاع (TP / (TP + FN))، ودرجة F1. وتوفر ranger مصفوفة الالتباس الخاصة بـOOB مباشرةً.
rf_cl <- ranger(
Species ~ ., data = iris,
num.trees = 500,
mtry = 2
)
# OOB confusion matrix
print(rf_cl$confusion.matrix)
# OOB error rate
cat('OOB Error Rate:', rf_cl$prediction.error)
# Manual accuracy on OOB predictions
# (1 - error rate)
cat('OOB Accuracy:', 1 - rf_cl$prediction.error)ضبط mtry وnum.trees
يؤدي زيادة عدد الأشجار دائمًا إلى تقليل التباين، إلى أن تبدأ العوائد المتناقصة عند نحو 300 إلى 500 شجرة. وللمعامل mtry قيمة مثلى. وتقيّم حلقة ضبط بسيطة خطأ OOB عبر مجموعة من قيم mtry للعثور على القيمة المثلى دون استخدام التحقق المتقاطع.
mtry_vals <- c(2, 4, 6, 8, 10)
oob_errors <- sapply(mtry_vals, function(m) {
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 300, mtry = m
)
rf$prediction.error
})
best_mtry <- mtry_vals[which.min(oob_errors)]
cat('Best mtry:', best_mtry)
plot(mtry_vals, sqrt(oob_errors), type = 'b',
xlab = 'mtry', ylab = 'OOB RMSE')ranger للتصنيف
للتصنيف، اضبط probability = TRUE للحصول على تنبؤات احتمالات الفئات بدلًا من التسميات القطعية. وهذا ضروري لحساب منحنى ROC وتقديرات الاحتمالات المُعايرة، كما يتوافق مع تنسيق الإخراج الذي تتوقعه مقاييس yardstick.
# Ensure the target is a factor
iris$Species <- as.factor(iris$Species)
rf_prob <- ranger(
Species ~ ., data = iris,
num.trees = 300,
probability = TRUE # output class probabilities
)
# Predictions are a matrix of probabilities
pred_prob <- predict(rf_prob, data = iris[1:5, ])
print(pred_prob$predictions)التوازي في ranger
صُممت ranger لتوفير السرعة ودعم التنفيذ المتوازي. اضبط num.threads لاستخدام جميع أنوية CPU المتاحة. وقد يؤدي ذلك إلى تسريع كبير مقارنة بحزمة randomForest الأقدم، لا سيما مع مجموعات البيانات الكبيرة التي تحتوي على عدد كبير من الأشجار.
# Use all available cores
rf_fast <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 1000,
mtry = 4,
num.threads = parallel::detectCores()
)
cat('Trees:', rf_fast$num.trees)
cat('Threads used:', rf_fast$num.threads)
cat('OOB RMSE:', sqrt(rf_fast$prediction.error))ranger عبر tidymodels
يمكنك استخدام ranger عبر واجهة tidymodels، التي توفر صياغة متسقة وتتكامل مع مسارات العمل والتحقق المتقاطع والضبط. حدّد المحرك باستخدام 'ranger'، ومرّر المعاملات الخاصة بالمحرك باستخدام set_engine().
library(parsnip)
library(workflows)
rf_spec <- rand_forest(
mtry = tune(),
trees = 500,
min_n = tune()
) |>
set_engine('ranger', importance = 'impurity') |>
set_mode('regression')
wf <- workflow() |>
add_recipe(rec) |>
add_model(rf_spec)
print(wf)تفسير مخرجات ranger
يعرض نموذج ranger المطبوع: عدد الأشجار، والمتغير الهدف، وعدد الميزات المستخدمة، وخطأ التنبؤ OOB، وR-squared (في الانحدار). تحقّق دائمًا من خطأ OOB باعتباره فحصًا سريعًا للسلامة؛ فإذا كان منخفضًا للغاية في مجموعة بيانات كبيرة، فاشتبِه في تسرّب البيانات.
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500, mtry = 4,
importance = 'impurity'
)
# Key output fields
cat('OOB MSE: ', rf$prediction.error, '\n')
cat('OOB RMSE: ', sqrt(rf$prediction.error), '\n')
cat('R-squared: ', rf$r.squared, '\n')
cat('Num trees: ', rf$num.trees, '\n')
cat('Num features: ', rf$num.independent.variables, '\n')تحقق سريع
في غابة عشوائية مبنية باستخدام ranger، ماذا يقدّر خطأ OOB (خارج الحقيبة)؟
مراجعة الغابات العشوائية
أهم النقاط من درس الغابات العشوائية باستخدام ranger:
- تجمع الغابات العشوائية بين العديد من الأشجار المبنية على عينات bootstrap، مع اختيار عشوائي للميزات عند كل عملية تقسيم.
mtry: يساوي sqrt(p) للتصنيف وp/3 للانحدار؛ اضبط هذا المعامل.- يوفر خطأ OOB تقدير تحقق مجانيًا وشبه غير متحيز.
- يوفر
importance = 'impurity'أو'permutation'درجات أهمية المتغيرات. - اضبط
probability = TRUEللحصول على مخرجات احتمالات الفئات في التصنيف. - تدعم ranger التنفيذ المتوازي بدرجة كبيرة؛ استخدم
num.threadsمع مجموعات البيانات الكبيرة. - تكاملها مع tidymodels باستخدام
rand_forest() |> set_engine('ranger').
rf <- ranger(
medv ~ ., data = MASS::Boston,
num.trees = 500,
mtry = 4,
importance = 'impurity',
num.threads = parallel::detectCores()
)
cat('OOB RMSE:', sqrt(rf$prediction.error))
cat('R2:', rf$r.squared)
print(sort(rf$variable.importance, decreasing = TRUE))الأسئلة الشائعة
هل درس «الغابات العشوائية باستخدام ranger» مجاني؟
نعم — نص درس «الغابات العشوائية باستخدام ranger» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «الغابات العشوائية باستخدام ranger»؟
درّب نماذج الغابات العشوائية، واضبط mtry وntrees، وقيّم خطأ OOB تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الغابات العشوائية باستخدام ranger»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أشجار القرار: أساس النماذج التجميعية
- الغابات العشوائية باستخدام ranger
- التعزيز التدرجي باستخدام xgboost
- أهمية السمات وتفسير النماذج