Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

류동균의 R 공부방입니다.

랜덤 포레스트(Random Forest) 본문

Machine Learning

랜덤 포레스트(Random Forest)

R쟁이 2019. 9. 22. 22:04

이번엔 랜덤 포레스트로 데이터분류 모델을 만들어 보고자 한다.

 

랜덤 포레스터(Random Forest)란 앙상블기법의 일종으로 여러가지 기준을 가진 의사결정나무들

 

이 모인 숲과 같은 형태의 모델이라고 할 수 있다.

 

그러면 랜덤 포레스트를 통한 iris의 Species 데이터 분류를 시작해보자.

 

우선 랜덤 포레스트 패키지부터 설치하고 library를 불러오도록하자.

#필요한 패키지
library(randomForest)

분석에 데이터한 데이터를 Traning/Test set으로 나누어주자. 비율은 7:3 으로 한다.

# data 생성
df <- iris

# 데이터 탐색
plot(iris)
str(iris)
summary(iris)
sum(is.na(iris))

# train/test sampling
training_sampling <- sort(sample(1:nrow(df), nrow(df) * 0.7 ))
test_sampling <- setdiff(1:nrow(df),training_sampling)

# traning_set, test_set
training_set <- df[training_sampling,]
test_set <- df[test_sampling,]


랜덤포레스트 모델을 생성해보자.

# randomForest 모델 생성
rf_m <- randomForest(Species ~ ., data = training_set)


랜덤포레스트를 구성하는데는 중요도 라는 것이 있다.

 

이것은 각각의 컬럼들이 의사결정을 하는데 얼마나 영향을 미치는지에 나타내는 지표이다.

 

한번 중요도를 구하고 시각화하여보자.

# randomForest importance
rf_info <- randomForest(Species ~., data = training_set, importance = TRUE)

# 중요도
importance(rf_info)

# rf_info varImpPlot
varImpPlot(rf_info)

importance(rf_info)

varImpPlot(rf_info)

 

그림을 보면 독립변수들의 중요도와 MeanDecreaseAccuracy, MeanDecreaseGini 수치가 나온다.

 

변수들의 중요도는 높을 수록 의사결정에 큰 영향을 미치고

 

MeanDecreaseAccuracy, MeanDecreaseGini는 Random Forest에서 가지를 칠때 얼마나 정확도

 

가 올라가는 지를 나타내는 지표이다.

 

참고적으로 여기서의 Gini는 Gini 불순도와 서로 다른 개념이다.

 

그래프를 간단히 해석해보면 Petal.Length, Petal.Width가 의사결정을 하는데에 높은 중요도를 

 

가지고 Sepal.Length는 약간의 중요도, Sepal.Width는 Species를 분류하는데 거의 영향이 없다고

 

해석 할 수 있다.

 

이제 만들어진 모델을 Test해보고 Confusion Matrix를 통해 모델의 정확성을 파악해보자.

 

# predict test_set 
rf_p <- predict(rf_m, newdata = test_set, type = "class")

# Confusion Matrix
confusionMatrix(rf_p, test_set$Species)

 

이렇게 Random Forest를 사용하여 iris데이터의 Species를 분류해보고 Confusion Matrix를 통해

 

모델의 정확성을 파악해 보았다.