ch0nny_log

[빅데이터분석] R _ 73. 랜덤 포레스트 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 73. 랜덤 포레스트

chonny 2024. 7. 30. 10:56
■ 네번째 이수자 평가 문제 
# 이원 교차표 데이터
TP <- 70
FN <- 10
TN <- 60
FP <- 10

# 민감도
print( TP / (TP+FN) )   #

# 특이도
print( TN / (TN+FP) )   # 

# 정밀도 
print( TP /( TP+FP) )   #​

출처: https://cafe.daum.net/oracleoracle/Sotv/886

 

랜덤 포레스트 이론과 실습

랜덤 포레스트 이론 https://gamma.app/docs/-9cp440ayimowhg0랜덤포레스트.pdf406.30KB  실습:# 패키지 설치 (한번만 실행하면 됩니다) install.packages(randomForest) # 패키지 로드 library(randomForest) # iris 데이

cafe.daum.net

 

랜덤포레스트.pdf
0.40MB

 

 

-> 랜덤 포레스트가 배깅보다 더 다양하고 좋은 결과를 얻음

 

■ 실습. 아이리스 데이터를 활용하여 랜덤포레스트 모델을 시각화하시오.
# 패키지 설치 (한번만 실행하면 됩니다)
install.packages("randomForest")

# 패키지 로드
library(randomForest)

# iris 데이터셋 로드
data(iris)

# 데이터 확인
head(iris)

# 데이터셋을 랜덤하게 섞고, 70%를 훈련 데이터, 30%를 테스트 데이터로 분리
set.seed(42)  # 랜덤 시드 설정 (재현 가능성 위해)
train_indices <- sample(1:nrow(iris), 0.7 * nrow(iris))

train_data <- iris[train_indices, ] #105
test_data <- iris[-train_indices, ] #45

# 랜덤 포레스트 모델 학습
rf_model <- randomForest(Species ~ ., data=train_data, ntree=100, mtry=2, importance=TRUE)

# 모델 요약 정보 확인
print(rf_model)

# 테스트 데이터에 대한 예측 수행
predictions <- predict(rf_model, test_data)

# 혼동 행렬(Confusion Matrix) 확인
confusion_matrix <- table(predictions, test_data$Species)
print(confusion_matrix)

# 정확도 계산
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(paste("Accuracy:", accuracy))

# 변수 중요도 확인
importance(rf_model)

# 변수 중요도 시각화
varImpPlot(rf_model)​

설명:
1. ntree=100(랜덤으로 생성할 나무 100개) / mtry=2 (노드를 분할 시 선택된 2개의 변수만 고려하여 최적의 분할 을 찾음)
2. mtry 값이 적을 때는 질문이 적어지고 과적합 될 가능성이 줄어듦/ 많을 때는 과적합 될 가능성 높아짐
3. importance=TRUE 는 랜덤 포레스트 모델을 학습 할때 변수의 중요도를 계산하도록설명하는 옵션입니다. 이 옵션을 설정하면 모델이 각 변수의 중요도를 계산하고어떤 변수가 예측에 더 중요한 변수인지를 알수 있게 해줍니다.어떤 변수가 중요한지는 지니계수와 엔트로피를 이용해서 정보획득량으로 중요도를 정합니다. 

※ 그래프 설명:
1. MeanDecreaseAccuracy : 변수를 제거 했을 때 모델의 정확도가 얼마나 감소하는지를 측정하는 지표이고 값이 클수록 해당 변수가 모델의 예측 성능에 큰 영향을 미침
2. MeanDecreaseGini: 변수의 gini 불순도 지수를 얼마나 감소 시키는지를 측정함. 값이 클 수록 해당 변수가 분류에 중요한 역할을 한다는 의미임. 

분류 모델에서 꽃잎의 길이와 넓이가 꽃받침의 길이와 넓이에서 비해서 상대적으로 더 중요한 변수라는 것을 보여주고 있음.

문제. 와인 데이터를 활용하여 와인의 종류를 분류하는 모델을 생성하고 분류하는데 있어서 중요한 변수가 무었인지 확인하시오. 
# 패키지 설치 (한번만 실행하면 됩니다)
#install.packages("randomForest")

# 패키지 로드
library(randomForest)

# iris 데이터셋 로드
data <- read.csv("c:\\data\\wine2.csv")

# 데이터 확인
data$Type <- as.factor(data$Type)

# 데이터셋을 랜덤하게 섞고, 70%를 훈련 데이터, 30%를 테스트 데이터로 분리
set.seed(42)  # 랜덤 시드 설정 (재현 가능성 위해)
train_indices <- sample(1:nrow(data), 0.7 * nrow(data))

train_data <- data[train_indices, ]
test_data <- data[-train_indices, ]

# 랜덤 포레스트 모델 학습
rf_model <- randomForest(Type ~ ., data=train_data, ntree=100, mtry=2, importance=TRUE)

# 모델 요약 정보 확인
print(rf_model)

# 테스트 데이터에 대한 예측 수행
predictions <- predict(rf_model, test_data)

# 혼동 행렬(Confusion Matrix) 확인
confusion_matrix <- table(predictions, test_data$Type)
print(confusion_matrix)

# 정확도 계산
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(paste("Accuracy:", accuracy))

# 변수 중요도 확인
importance(rf_model)

# 변수 중요도 시각화
varImpPlot(rf_model)​