본문 바로가기

Machine Learning

Naive Bayes, Decision Tree

반응형
Naive Bayes Classification 나이브 베이즈 분류기

특징
    LR과 L-SVC같은 Linear Model의 Classification에 비해 훈련 속도가 빠른 편이지만, 일반화 성능이 떨어짐.

방식
   특성을 개별로 취급하여 파라미터를 학습하고 각 특성에서 클래스별 통계를 단순하게 취합하는 방식.
    
종류
scikit-learn에는 GaussianNB, BernoulliNB, MultinomialNB( 이하 각각 G-NB, B-NB, M-NB 또는 G, B, M ) 세 가지가 구현됨.    
    1. 데이터(feature)의 속성에 따른 분류
        연속적 데이터
            모든 G-NB는 연속적인 데이터 ->이것을 기반으로 특성의 평균과 표준편차 저장
        *이산적 데이터
            B-NB는 이진 데이터 -> 이것을 기반으로 단순하게 0이 아닌 것 카운트
            M-NB는 카운트 데이터(특성이 어떤 것을 헤아린 정수 카운트 ex) 문장에 나타난 단어 횟수) -> 이것을 기반으로 특성                                                                                                                                                                       평균 계산
       
         *B-NB와 M-NB는 대부분 텍스트 데이터를 분류할 때 사용. (ex) 특정 단어가 등장한 횟수를 통해 글의 카테고리 구분)

    2. 예측 값에 따른 분류
    
    B-NB는 구체적으로 각 클래스의 특성중 0이 아닌 것이 몇 개인지 센다.

    M-NB는 클래스별로 특성의 평균을 계산.
    G-NB는 클래스별로 각 특성의 표준편차와 평균을 저장.

M-NB와 B-NB의 예측 모델은 Linear Model 과 같음.
그러나, coef_(L-M에선 w)가 특성 카운트를 log로 변환. 
             intercept_(L-M에선 b)는 클래스 카운트 수를 로그로 변환한것.

장, 단점과 Hyper-parameter
    M,B -NB
        M과 B는 모델 복잡도를 조절하는 alpha가 있음. alpha는 성능에 크게 영향을 주진 않음. 정확도에는 영향을 줄 수 있음.
        주로 텍스트 같은 희소한 데이터를 카운트하는 데 사용
        M은 보통 0이 아닌 특성이 비교적 많은 데이터셋(ex 큰 문서)에서 B보다 유리
    G-NB
        G는 대부분 매우 고차원인 데이터셋에 사용.

NB모델은 전반적으로 train과 predict속도가 빠르며 훈련과정이 단순
희소한 고차원 데이터에서 잘 작동. 
매개변수에 덜 민감.
Linear Model로 학습 시간이 너무 오래 걸리는 매우 큰 데이터셋에는 NB가 시도될만 하다.





Decision Tree 결정트리

classification과 regression 모두에 사용 할 수 있다.
예 / 아니오 질문을 이어 나가면서 학습하는 알고리즘 이다.

최종적인 목표는 최소한의 질의로 문제를 해결 하는 것이다. 
즉, 결정 트리의 학습은 가장 빨리 도달하는 질의 질문 목록을 학습 하는 것이다.

트리는 노드로 구성되어 있으며, 노드는 질문이나 정답을 담은 상자로 구성된다. 
최상위 노드는 root node라고 하며, 각각의 클래스가 모든 데이터를 포함하고 있는 상태이다.

Machine Learning에서 이런 질문들을 Test라고 함. 
 (*Test set- 모델이 일반화 되었는지를 테스트하는 데이터에서의 test와는 무관하니 혼동 주의)




Test는 연속적인 특성들로 구성되며, "특성 i 가 값 a 보다 큰가?"로 구성됨.

가령 아래와 같은 데이터를 분류하는 트리를 짜보자. 
가로축[0]과 세로축[1] 두개의 feature로 구성된 데이터셋으로 클래스 ●와 클래스 ▲로 구성된다.

트리를 만들 때 알고리즘은 가능한 모든 Test에서 타깃값에 대해 가장 많은 정보를 가진것을 채택함.
데이터셋을 x[1]=0.0596 ([1]은 기준이 되는 축을 의미 [1]축을 기준으로 0.0596에서 Decision Boundary가 생성)에서 수평으로 나누는 것이 가장 많은 정보를 포함한다. 
다시 말해, 이 직선이 클래스 ●와 클래스 ▲를 가장 잘 나눈다. (train set에서 가장 general한 분류 단위)

반복되는 프로세스스는 각 노드가 테스트 하나씩을 가진 이진 결정 트리를 만든다.
즉, 각 테스트는 하나의 축을 따라 데이터를 둘로 나누는 것으로 볼 수 있다. 다시말해 계층적으로 영역을 분할해가는 알고리즘 이다. 테스트는 한개의 Feature (축)으로 질의가 이뤄지므로 나누어지는 영역은 축(feature)에 평행하다.
분할된 영역(결정트리의 리프)이 한개의 타깃값 (class또는, regression의 결과)을 가질때 까지 반복된다. 반복이 끝나는 지점의 (타깃이 하나로만 이뤄진) 리프노드를 Pure Node(순수노드) 라고 함. 
Test set에 대한 탐색 방식은 root node 에서 시작하여, 테스트 결과에 따라 트리에서 분기해가며 영역을 찾아냄. regression은 훈련 데이터 리프 노드 평균값이 데이터포인트의 출력이 된다.



Decision Tree의 complexity( overfit 문제 )를 제어 하는 방법

일반적으로 모든 리프가 pure 리프가 되면, overfit이 되는 경향이 있다.
이를 방지하기 위한 전략은 크게 두가지이다.
  1. Pre-Pruning (사전 가지치기)
    • 트리 생성을
    • 일찍 중단하는 전략
      • 트리의 최대 depth 나 리프의 최대 개수를 제한 
      • 분할하기 위한 포인트의 최소 개수를 지정
  2. Post-Pruning 혹은 Pruning (사후 가지치기)
    • 트리를 만든 후 데이터 포인트가 적은 노드를 삭제하거나 병합하는 전략.

*scikit-learn에선 Pre-Pruning만 지원함.


위와 같은 방식으로 max_depth를 지정하여 트리의 가지치기를 수행하고 이는 overfit을 방지해준다.



Feature importance

트리를 직접 다 검토하는 것은 무리가 따른다. 이 때문에 트리를 요약하는 속성을 도입하는데 가장 많이 쓰이는 속성은 
각 특성이 얼마나 중요한지를 평가하는 특성 중요도이다.
0~1사이 값을 각 특성에 할당하는데, 0은 전혀 사용되지 않았음을 뜻하고, 1은 완벽하게 타깃 클래스를 예측했다는 뜻이다.
feature importance 값이 낮은 것이 feature의 특성이 중요하지 않은 것을 의미하진 않는다. 단지 특성이 선택이 안된 것 이지 다른 특성이 동일한 정보를 지니고 있어서 일 수도 있다.
항상 양수 값이며, 어떤 클래스를 지지하는 지는 알 수 없다. 즉, worst radius가 위의 특성에서 중요하게 작용하지만, 높은 반지름이 양성을 의미하는지 악성을 의미하는지 알 수 없다.


*feature와 class사이의 관계는 비례, 반비례의 단순한 인과만 있지는 않다.
x[1]이 높으면 클래스 0 낮으면 1 과 같은 단순한 표현으로 위의 feature와 class사이의 관계를 정의 할 수 없다.



Regression 문제

DecisionTreeRegressor(이하 DTR)도 classification과 유사하다. 다만, DTR을 포함한 모든 트리기반 회귀 모델은 extrapolation외삽이 불가능, 즉, 훈련 데이터의 범위 밖의 포인트에 대해 예측이 불가능하다.

위와 같이 2000년 까지의 훈련데이터를 기반으로 2000년 이후의 데이터를 예측할때, 새로운 데이터에 대한 예측 능력이 없다.
트리는 결국 복잡도를 제어하지 않는다는 가정하에서 훈련데이터와 동일한 결과를 만들고 시계열 데이터와는 잘맞지 않다.
트리가 유리한 환경은 결국 비슷한 조건에서 반복적으로 일어나는 일에 대한 예측을 할때 유리하다고 정리할 수 있다.



장단점과 Parameter

복잡도 제어하는 hyper-parameter는 pre-pruning의 parameter이다. (max_depth, max_leaf_nodes, min_samples_leaf 등 )

결정트리의 장점

  • 만들어진 모델을 쉽게 시각화(비교적 작은 트리일때)
  • 데이터 스케일에 구애받지 않음.
    • 각 특성이 개별적으로 처리되어 데이터를 분할할때, 데이터 스케일의 영향을 받지 않으므로 feature의 pre-processing 이나 normaliziation이 필요 없음.
    • 특히 feature의 scale이 서로 다르거나 bin_feature와 contin_feature이 혼합되어 있을 때도 잘 작동 

결정트리의 단점

  • pre-pruning에도 불구하고 모델 자체가 training set에 overfit하는 경향이 있어 generalization에 어려움이 있다.


반응형

'Machine Learning' 카테고리의 다른 글

Kernel Support Vector Machines  (0) 2019.01.27
Decision Tree's Ensemble  (0) 2019.01.25
Linear Model  (0) 2019.01.22
KNN Classifier, Regression  (0) 2019.01.21
Restricted Boltzmann Machine  (0) 2019.01.19