ป่าสุ่มด้วย ranger
ฝึกโมเดลป่าสุ่ม ปรับค่า mtry และ ntrees และประเมินข้อผิดพลาด OOB
ป่าสุ่มด้วย ranger เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
ป่าไม้สุ่มคืออะไร
ป่าไม้สุ่มสร้างต้นไม้ตัดสินใจจำนวนมากบนตัวอย่างบูตสแตรปของข้อมูล จากนั้นหาค่าเฉลี่ยของผลการพยากรณ์ (การถดถอย) หรือใช้เสียงข้างมาก (การจำแนกประเภท) แหล่งที่มาของความสุ่มสองประการเป็นที่มาของชื่อแบบจำลองกลุ่มนี้ ได้แก่ การสุ่มตัวอย่างแถวแบบบูตสแตรป และการสุ่มเลือกคุณลักษณะในแต่ละการแบ่ง
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 — การตรวจสอบความถูกต้องโดยไม่เสียค่าใช้จ่าย
เนื่องจากต้นไม้แต่ละต้นฝึกด้วยตัวอย่างบูตสแตรป จึงมีข้อสังเกตประมาณหนึ่งในสามที่ไม่ได้ถูกเลือก (อยู่นอกถุง หรือ 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 สำหรับการจำแนกประเภท ผลการพยากรณ์จะเป็นระดับของ factor โดยค่าเริ่มต้น
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:
- ป่าไม้สุ่มรวมต้นไม้จำนวนมากที่สร้างบนตัวอย่างบูตสแตรปเข้ากับการสุ่มเลือกคุณลักษณะในแต่ละการแบ่ง
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))เรียนรู้ R ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 43
- บทเรียน
- 159
คำถามที่พบบ่อย
บทเรียน “ป่าสุ่มด้วย ranger” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ป่าสุ่มด้วย ranger” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ป่าสุ่มด้วย ranger”
ฝึกโมเดลป่าสุ่ม ปรับค่า mtry และ ntrees และประเมินข้อผิดพลาด OOB คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ป่าสุ่มด้วย ranger” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ต้นไม้ตัดสินใจ: พื้นฐานของโมเดล ансамбเบิล
- ป่าสุ่มด้วย ranger
- การเพิ่มพูนแบบเกรเดียนต์ด้วย xgboost
- ความสำคัญของคุณลักษณะและการตีความโมเดล