본문 바로가기
R/Machine-Learning

R을 이용한 머신러닝 알고리즘 -랜덤포레스트-

by 씩2 2022. 3. 12.

이번포스팅에서는 앙상블 기법인 랜덤 포레스트에 대해서 포스팅 하겠습니다.

 

사용된 패키지 

install.packages("randomForest")
install.packages("caret")
library(caret)
library(randomForest)

randomForest 패키지는 패키지명 그대로 랜덤포레스트를 이용하기 위한 패키지입니다.

caret의 경우는 매우 다양한 용도로 쓰이지만 이번에는 혼동행렬(confusionMatrix)함수를 사용하기위하여 패키지를 라이브러리 해주었습니다.

 

랜덤포레스트에대한 포스팅은 내장 데이터인 아이리스 데이터를 이용하여 랜덤포레스트를 사용하여보겠습니다.

# 데이터 생성 
data(iris)
iris
# 학습데이터, 검정데이터 구분
idx <- sample(2, nrow(iris), replace = T, prob = c(0.7, 0.3))
trdata <- iris[idx == 1, ]
nrow(trdata)
tedata <- iris[idx == 2, ]
nrow(tedata)

 

 

우선 데이터를 로드하고 train 셋과 test셋으로 분리를 해줍니다.

RFmodel <- randomForest(Species ~ ., data = trdata, ntree = 100, proximity = T)
RFmodel

randomForest()이후에 메서드는 다음과 같습니다. 변수 설정을해준뒤, 데이터를 지정해줍니다. ntree의 경우는 트리의 숫자를 말합니다.

proximity는 근접거리를 이용하는 메서드입니다.

위처럼 코드입력을 해주면 iris train데이터에대한 모델생성을 완료 할수 있습니다.

 

이번에는 만든 모델에서 중요하게 영향을 미치는 변수에 대하여 알아 보겠습니다.

코드는 다음과 같습니다.

importance(RFmodel)

 

결과 값은 다음과 같이나옵니다.

> importance(RFmodel)
             MeanDecreaseGini
Sepal.Length         5.114938
Sepal.Width          1.699243
Petal.Length        27.826953
Petal.Width         24.927649

여기서 MeanDecreaseGini 의 지수는 각트리에서 해당 변수를 기준으로 분류 할 때  그지점에서 decrease of impurity(불순도)의 총합의 계산한뒤 전체의 총합을 구한 것입니다. 여기서 모델에 평가에 중요할 수록 그값은 커집니다. 따라서 위의 결과값을 보면 Petal.Lenth,Petal,.Width의 변수의 값이 나머지 두개에 비해서 분류에 중요한 영향은 끼친 변수라는 것을 알 수 있습니다.

 

이제 완성된 랜덤포레스트 모델의 평가를 해보도록 하겠습니다.

confusionMatrix(trdata$Species,predict(RFmodel))

confusionMatirxI()의 함수는 혼동행렬을 쉽게 파악할수 있도록 도와주는 'caret' 패키지에 포함되어 있는 함수입니다.

결과 값은 다음과 같습니다.

> confusionMatrix(trdata$Species,predict(RFmodel))
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         33          0         0
  versicolor      0         33         3
  virginica       0          3        20

Overall Statistics
                                          
               Accuracy : 0.9348          
                 95% CI : (0.8634, 0.9757)
    No Information Rate : 0.3913          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.9005          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 1.0000            0.9167           0.8696
Specificity                 1.0000            0.9464           0.9565
Pos Pred Value              1.0000            0.9167           0.8696
Neg Pred Value              1.0000            0.9464           0.9565
Prevalence                  0.3587            0.3913           0.2500
Detection Rate              0.3587            0.3587           0.2174
Detection Prevalence        0.3587            0.3913           0.2500
Balanced Accuracy           1.0000            0.9315           0.9130

confusionMatirx()함수로 나온 결과값을 보면 93.48%의 정확도로 분류를 한것을 볼 수 있습니다.

또한 민감도와 특정도도 밑에서 확인 할 수 있었습니다.