R - 랜덤 포레스트: 초보자 가이드
안녕하세요, 미래의 데이터 과학자 여러분! 오늘 우리는 R를 사용하여 랜덤 포레스트의 세계에 흥미로운 여정을 떠납니다. 코드를 한 줄도 작성해 본 적이 없더라도 걱정하지 마세요 - 여러분의 친절한 안내자로서 모든 단계를 함께 따라갈게요. 이 튜토리얼이 끝나면 여러분은 자신만의 디지털 포레스트를 키울 수 있을 거예요! 시작해 볼까요?
필요한 R 패키지 설치
우리가 디지털 나무를 심기 전에, 적절한 도구를 확보해야 합니다. R에서는 이러한 도구가 패키지 형태로 제공됩니다. 패키지는 특별한 기능들로 가득 찬 도구 상자라고 생각하면 됩니다.
우리의 랜덤 포레스트 여정을 위해 두 가지 주요 패키지가 필요합니다: randomForest
와 caret
. 이제 설치해 보겠습니다!
# 필요한 패키지 설치
install.packages("randomForest")
install.packages("caret")
# 패키지 로드
library(randomForest)
library(caret)
이 코드를 실행하면 R이 인터넷으로 나가 이 패키지들을 다운로드합니다. 온라인으로 도구를 주문하고 디지털 문 앞에 배달되는 것과 같은 이야기입니다!
랜덤 포레스트 이해: 기본 개념
어떤 숲에서 길을 잃고 나갈 길을 찾아야 한다고 가정해 봅시다. 여러분은 몇몇 다른 사람들에게 방향을 물을 수도 있습니다. 어떤 사람들은 정확할 수도 있고, 다른 사람들은 틀릴 수도 있지만, 다수의 의견을 따르면 대부분 올바른 길을 찾을 수 있습니다. 이것이 랜덤 포레스트의 기본 원리입니다!
랜덤 포레스트는 여러 개의 결정 트리를 사용하여 예측을 하는 집합 학습 방법입니다. 여러 명의 나무 전문가가 최선의 결정을 투표하는 것과 같습니다.
랜덤 포레스트의 주요 구성 요소
- 결정 트리: 우리 숲의 개별 "투표자".
- 부트스트래핑: 각 트리는 데이터의 랜덤한 부분집합을 학습합니다.
- 기능 랜덤성: 트리의 각 분할에서는 랜덤한 기능 부분집합만 고려됩니다.
- 집계: 최종 예측은 모든 트리의 예측을 집계하여 만듭니다.
첫 번째 랜덤 포레스트 생성
간단한 예제로 시작해 보겠습니다. 내장된 이ris 데이터셋을 사용해 보겠습니다. 이 데이터셋은 다양한 이ris 꽃의 측정치를 포함하고 있습니다.
# 이ris 데이터셋 로드
data(iris)
# 재현성을 위한 시드 설정
set.seed(123)
# 랜덤 포레스트 모델 생성
rf_model <- randomForest(Species ~ ., data = iris, ntree = 500)
# 모델 출력
print(rf_model)
이 코드에서:
- 이ris 데이터셋을 로드합니다.
- 재현성을 위해 시드를 설정합니다.
-
randomForest()
를 사용하여 랜덤 포레스트 모델을 생성합니다.Species ~ .
부분은 Species를 예측하기 위해 모든 다른 변수를 사용한다는 뜻입니다. -
ntree = 500
을 지정하여 우리의 숲에 500개의 나무가 있도록 합니다.
이를 실행하면 여러분의 랜덤 포레스트 모델의 요약을 볼 수 있습니다. 숲의 성적표를 받는 것과 같은东西입니다!
랜덤 포레스트로 예측하기
이제 우리의 숲을 사용하여 예측을 해 보겠습니다!
# 이ris 데이터셋에 대한 예측
predictions <- predict(rf_model, iris)
# 혼란 행렬 생성
confusion_matrix <- table(predictions, iris$Species)
# 혼란 행렬 출력
print(confusion_matrix)
# 정확도 계산
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(paste("정확도:", round(accuracy, 4)))
이 코드는:
- 모델을 사용하여 이ris 데이터셋에 대한 예측을 합니다.
- 예측과 실제 종을 비교하는 혼란 행렬을 생성합니다.
- 정확도를 계산하고 출력합니다.
혼란 행렬은 각 종에 대한 예측이 얼마나 정확했는지 보여줍니다. 대각선 요소는 정확한 예측을 나타냅니다.
기능 중요성
랜덤 포레스트의 좋은 점 중 하나는 예측에 가장 중요한 기능을 알 수 있다는 점입니다. 지금 확인해 보겠습니다!
# 기능 중요성 얻기
importance <- importance(rf_model)
# 기능 중요성 그래프 그리기
varImpPlot(rf_model, main = "기능 중요성")
이 코드는 가장 유용한 기능을 예측하는 데 얼마나 유용했는지 보여주는 그래프를 생성합니다. 숲이 어떤 트레일 마커가 길을 찾는 데 가장 유용했는지 물어보는 것과 같습니다!
교차 검증: 우리 숲의 강점 시험하기
우리의 숲이 실제로 얼마나 잘 길을 안내할 수 있는지 테스트하려면, 그것이 아직 본 적 없는 데이터에서 어떻게 성과를 내는지 확인해야 합니다. 이를 위해 교차 검증을 사용할 수 있습니다.
# 교차 검증 설정
ctrl <- trainControl(method = "cv", number = 5)
# 교차 검증으로 모델 훈련
rf_cv <- train(Species ~ ., data = iris, method = "rf", trControl = ctrl)
# 결과 출력
print(rf_cv)
이 코드는:
- 5-fold 교차 검증을 설정합니다.
- 새로운 랜덤 포레스트 모델을 교차 검증으로 훈련합니다.
- 결과를 출력합니다.
교차 검증은 숲 안내자가 숲의 다양한 부분에서 어떻게 성과를 내는지 확인하는 것과 같습니다.
우리 숲의 최적 나무 수 조정하기
진짜 숲에서처럼, 나무가 너무 적거나 많을 수도 문제가 됩니다. 우리의 랜덤 포레스트에 가장 적합한 나무 수를 찾아보겠습니다.
# 시도할 나무 수 범위 설정
tree_nums <- c(100, 200, 500, 1000)
# 정확도를 저장할 빈 벡터 생성
accuracies <- vector("numeric", length(tree_nums))
# 다양한 나무 수를 반복
for (i in 1:length(tree_nums)) {
rf_model <- randomForest(Species ~ ., data = iris, ntree = tree_nums[i])
predictions <- predict(rf_model, iris)
accuracies[i] <- mean(predictions == iris$Species)
}
# 결과 데이터 프레임 생성
results <- data.frame(Trees = tree_nums, Accuracy = accuracies)
# 결과 출력
print(results)
# 결과 그래프 그리기
plot(tree_nums, accuracies, type = "b",
xlab = "나무 수", ylab = "정확도",
main = "정확도 vs 나무 수")
이 코드는:
- 다양한 나무 수(100, 200, 500, 1000)를 시도합니다.
- 각 나무 수에 대한 정확도를 계산합니다.
- 결과를 그래프로 시각화합니다.
결론
축하합니다! 여러분은 R에서 첫 번째 랜덤 포레스트를 키웠습니다. 우리는 랜덤 포레스트를 생성하고, 예측을 하고, 중요성을 평가하고, 교차 검증을 수행하며, 숲을 조정하는 기본 방법을 다룰 수 있었습니다.
기억하시길, 진짜 숲처럼, 랜덤 포레스트는 다양성을 좋아합니다. 여러 가지 기능과 충분한 데이터가 있을 때 가장 잘 작동합니다. 그러므로 많은 숲을 키우고, 여러분의 예측이 항상 정확하길 바랍니다!
이제 우리가 사용한 주요 메서드의 빠른 참조 표를 제공합니다:
메서드 | 설명 |
---|---|
randomForest() |
랜덤 포레스트 모델 생성 |
predict() |
모델을 사용하여 예측 |
importance() |
기능 중요성 계산 |
varImpPlot() |
기능 중요성 그래프 그리기 |
train() |
모델을 교차 검증으로 훈련 |
trainControl() |
교차 검증 매개변수 설정 |
happy forest-growing, and may your predictions always be accurate!
Credits: Image by storyset