ranger로 랜덤 포레스트 만들기
랜덤 포레스트 모델을 학습시키고 mtry와 ntrees를 조정하며 OOB 오류를 평가합니다.
ranger로 랜덤 포레스트 만들기은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 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 오차 — 무료 검증
각 트리는 부트스트랩 표본으로 학습되므로 관측값의 약 3분의 1이 제외됩니다(가방 밖, 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 매개변수에는 가장 적절한 값이 있습니다. 간단한 조정 반복문을 사용하면 mtry 값의 후보 범위에서 OOB 오차를 평가하여 교차 검증 없이 최적값을 찾을 수 있습니다.
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는 속도와 병렬 처리를 위해 설계되었습니다. 사용 가능한 모든 CPU 코어를 사용하려면 num.threads를 설정합니다. 특히 트리가 많고 데이터 세트가 큰 경우, 이전의 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))tidymodels를 통한 ranger 사용
일관된 구문을 제공하고 워크플로, 교차 검증, 조정 기능과 통합되는 tidymodels 인터페이스를 통해 ranger를 사용할 수 있습니다. 엔진을 '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를 사용하십시오. rand_forest() |> set_engine('ranger')를 통해 tidymodels와 통합할 수 있습니다.
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 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“ranger로 랜덤 포레스트 만들기”에서 뭘 배우나요?
랜덤 포레스트 모델을 학습시키고 mtry와 ntrees를 조정하며 OOB 오류를 평가합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“ranger로 랜덤 포레스트 만들기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 의사결정나무: 앙상블의 기초
- ranger로 랜덤 포레스트 만들기
- xgboost를 활용한 그래디언트 부스팅
- 특성 중요도와 모델 해석