본문 바로가기
SEMINAR/데이터마이닝

데이터마이닝 R - Random Forest

by 스꼬맹이브로 2020. 6. 25.
728x90
반응형
SMALL

랜덤포레스트(Random Forest)는 배깅(Bagging)에 랜덤과정을 추가한 것이다.

 

배깅(Bagging)이란?

  • 원 데이터 집합으로부터 크기가 같은 표본을 여러 번 단순임의 복원추출하여 각 표본에 대해 분류기 (classifiers)를 생성한 후 그 결과를 앙상블 하는 방법
  • 반복추출방법을 사용하기 때문에 같은 데이터가 한 표본에 여러번 추출될 수도 잇고, 어떤 데이터는 추출되지 않을 수도 있음

이러한 방법을 사용하여 랜덤포레스트는 예측변수들을 임의로 추출하고, 추출된 변수 내에서 최적의 분할을 만들어 나가는 방법이다.

 

새로운 자료에 대한 예측을 수행할 때, 분류의 경우에는 다수결로 선택하고 회귀의 경우에는 평균을 취하는 방법을 사용하며 이는 다른 앙상블 모형과 동일하다.

 

다음 실습으로 BostonHousing Data를 활용하여 RandomForest를 실행하였다.

BostonHousing Data는 다음과 같다.

이 데이터는 보스턴 시의 주택 가격에 대한 데이터로, 주택의 여러가지 요건들과 가격 정보가 포함되어 있으며, 회귀분석 등의 분석에서 활용될 수 있다.

이 실습에서는 RandomForest package의 randomForest 함수를 이용하였으며 속성 중 medv변수를 목표 변수로 설정하고, 다른 변수는 입력 변수로 하였다.

또한 모형을 적합하는데 ntree = 100, 중간 노드마다 랜덤하게 선택하는 횟수는 5로하고, 변수의 중요도도 계산하고, 결측치는 삭제가 되도록 하여 모형을 적합하였다.

 

 

다음은 함수를 적용한 결과이다. 결과를 해석하면 회귀 잔차는 9.75로 나왔으며 설명도 또한 약 88%로 이 모형은 성능이 우수하다고 할 수 있다. 

이 모델로 predict 함수를 이용하여 적합 값을 구하고 평균제곱오차제곱합을 구해보았다.

 

먼저 importance함수를 통해 계산된 입력변수의 중요도를 확인한다.

 

여기서 type은 1과 2를 값으로 줄 수 있는데, 1은 정분류율의 평균 감소 값으로 변수의 중요도를 계산하며, 2는 불순도의 평균 감소 값을 이용하여 계산한다.

type을 1로 설정했을 때의 결과는 rm 변수가 가장 높게 나왔으며 그 다음으로 lstat변수가 높게 나옴을 확인할 수 있다.

또한 중요도만 확인하였을 때는 lstat이 가장 중요하다고 나왔으며 rm이 두 번째 인것을 확인할 수 있다.

다음으로 평균오차제곱합을 구한 식으로 약 1.83으로 계산되었다.

또한 plot을 활용하여 시각화를 통해 확인해보았을 때 회귀 앙상블의 적합값이 실제값과 예측 일치도가 우수함을 확인할 수 있다.

마지막으로 훈련데이터와 검증데이터를 만들고 렌덤포레스트 방법의 성능을 예측하였다.

BostonHousing70%를 훈련데이터로, 나머지 30%를 검증데이터로 지정하는 코드이다.

다음과 같이 훈련데이터로 모델을 만들고, 검증데이터로 예측을 해봤을 때의 평균오차제곱합은 약 3.12로 계산되었다.  또한 plot을 확인해보면 위의 모델보다는 덜하지만 실제값과 예측일치도가 우수함을 확인할 수 있다.

위의 첫번째 모델은 훈련데이터와 검증데이터의 값이 같아서 두번째 모델보다는 결과가 우수하게 나왔기 때문에 두번째 모델의 성능이 더 떨어진다고 할 수는 없다.

또한 랜덤 포레스트는 Bootstrap을 이용하기 때문에 확률 임의추출에 의한 변동성이 있을 수 있다.

따라서 모델링을 할 때마다 결과가 다르게 나오므로 반복 시행한 후 예측결과의 평균값을 구하는 것도 하나의 방법일 수 있다.

728x90
반응형
LIST