랜덤 포레스트 (randomForest)


랜덤 포레스트(Random Forest)?

지도학습. 분류분석 기법

 

  • 기본 개념
    • 의사결정나무(decision tree)를 결합하여 하나의 모델을 생성
      • 의사결정나무의 단점을 개선 (과적합, 불안정성)
      • 임의성을 관측치 뿐 아니라 변수에도 적용
      • 예측력과 안정성이 높다는 장점이 있지만, 일반적인 tree model과는 달리 설명력을 잃는다.
      • 변수의 개수가 많을 때는 권장되지 않음
    • 배깅(bagging, bootstrap aggregating)
      • 전체 데이터에서 훈련용 데이터를 샘플링하여 개별 트리를 구성 (복원추출)
    • 핵심 옵션
      • Bootstrap 샘플의 수(n): ntree
      • 각 Bootstrap 샘플에서 이용한 변수의 개수(d) : mtry
      • 하위 트리의 개수 = k

 

  • 대락적인 원리
    • 1) 주어진 데이터 셋(train set)에서 무작위로 중복을 허용해서 n개의 데이터 선택
      • 이게 bootstrap
    • 2) 선택한 n개의 데이터 샘플에서 변수(variable)를 중복 허용없이 d개 선택
      • d값은 전체 변수 개수의 sqrt값으로 결정하는 게 일반적
    • 3) 이를 이용해 의사결정트리를 학습하고 생성
    • 4) 1~3단계를 k번 반복
    • 5) 1~4단계를 통해 생성된 k개의 의사결정트리를 이용해 예측하고, 예측된 결과에 대해 다수결에 따라 최종 예측값으로 결정

 

  • 분석 준비
    • 데이터 불러오기 및 train/test 분리

 

  • 랜덤포레스트 모델 생성
    • 옵션
      • ntree: 트리 개수
      • mtry: 각 split에서 사용하는 변수의 개수.  default는 sqrt(전체변수개수)
      • importance: 변수의 중요도 표시 여부
        • accuracy, gini가 크면 중요도가 높다
      • na.action: na가 있는 경우의 처리 방법

 

  • ranger()
    • 속도를 고려하면….  이걸 쓰자;;;

 


K 최근접이웃 (KNN, K Nearest Neighbor)


K 최근접 이웃(K Nearest Neighbor)?

 

  • 기본 개념
    • 지도학습 중 분류 문제를 다루는 데 활용
    • 거리를 측정하는 기법이니만큼, 수치형 데이터를 기반으로 범주를 예측하는 형태임
      • 명목변수나 결측치는 따로 처리해야 한다. ?근데 어떻게 따로 처리할지는 아직 잘 모르겠음 ;;; ㄷㄷ
    • 따로 분포를 가정하지 않는 비모수적 방법(non-parametric method)
    • 일반적으로 KNN이 효과적이려면 데이터 개수가 많아야 함 (분산이 커지는 것 방지)
    • 별도로 모델을 구축하지 않으므로, 관계에서 새로운 인사이트를 얻는 데는 제한적
    • http://kkokkilkon.tistory.com/14

 

  • 분석 준비
    • 데이터셋 불러오기
    • 데이터 구조 확인 (str)
    • 개별 컬럼의 분산 (variance) 확인?
      • 거리 기준으로 계산을 하는 방법론이므로, 분산의 차이가 크면 특정 변수의 영향도가 필요 이상으로 커짐
      • 분산의 편차가 큰 경우, scale 함수를 통해서 표준화를 해 줘야 함

 

  • Train / Test 데이터 세팅
    • caTools() 라이브러리 사용

 

  • KNN model?

 

  • K value 선택?
    • 일반적으로 k는 홀수가 좋음 (짝수인 경우, 다수결에서 동수가 나올 수 있으므로!)

 

  • kknn:: 거리에 따라 가중치 부여 (weighted knn)