Classification

2020. 12. 14. 17:50machine learning

728x90

※ 본 카테고리의 글은 책<파이썬머신러닝완벽가이드(권철민)> 및 다른 자료들을 참고하여 작성되었습니다. ※

github:github.com/chaeyeongyoon/PythonML_Study

 

chaeyeongyoon/PythonML_Study

Contribute to chaeyeongyoon/PythonML_Study development by creating an account on GitHub.

github.com

지도학습 중 하나인 Classification ( 분류 ) 에 대해서 알아보겠습니다.

Naive Bayes, Logistic Regression, Decision Tree, Support Vector Machine, Nearest Neighbor, Neural Network, Ensemble 등의 알고리즘이 있습니다. 

 

1. Decision Tree

쉽고, 직관적이고, 시각화하기가 쉬우며 전처리가 거의 필요없는 특징을 가지고 있습니다.

dicision tree를 graphviz로 시각화하면 

이와 같이 조건, gini 계수, 데이터건수(samples), class기반데이터건수(value), class명을 표현해줍니다. 

노드색은 각 레이블 값을 나타냅니다.

 

트리 크기(max_depth) 를 제한해주지 않으면 너무 많은 규칙노드가 생겨 분류 결정이 복잡해지고 overfitting 가능성이 높아집니다.

따라서 max_depth를 제한해주어야 합니다.

 

최소한의 결정 노드로 높은 예측 정확도를 나타내야 하기 때문에 Tree Split이 매우 중요합니다.

(분류된 dataset이 최대한 균일하도록)

 ※ entropy = 데이터 집합의 혼잡도 = 같은 값끼리 있을수록 낮음

※ 정보이득지수 = 1 - entropy

※gini 는 낮을수록 균일도가 높음

 

2. Logistic Regression

Logistic Regression은 Linear Regression방식을 분류에 적용한 것입니다.

회귀 최적선이 아닌 sigmoid 함수 최적선을 찾습니다.

logistic regression hypothesis

즉 다음 hypothesis의 w와 b를 찾는 것입니다.

이 식은 Linear 하지 않기 때문에 Linear regression의 cost function을 계산하면 다음그림과 같아 GD algorithm을 적용하기가 힘듭니다. 따라서 cost함수 형태를 변환해 줍니다. 이를 그림으로 표현하였습니다.

logistic regression의 cost function 형태

최종 cost함수는 다음과 같습니다.

Multinomial Classification에 적용해보겠습니다.

이렇게 예측한 값을 softmax를 통과시켜주면 0~1 사이 값으로 변환되고, 이는 각 class에 속할 확률이라고 볼 수 있습니다.

multinomial classification 에선 cost함수를 cross-entropy로 적용해줍니다.

사실 앞의 logistic cost와 같은 의미이지만 형태를 맞게 바꾸어준 것 뿐입니다.

3. Ensemble

여러 분류기의 예측을 결합해 더 정확한 최종 예측을 도출하고자 하는 방법이지만 무조건적으로 성능향상을 보이지는 않습니다.

정형데이터 학습에서 사용하는 방법입니다. 

Ensemble 유형에는 Voting, Bagging, Boosting이 있습니다.

유형  
Voting 서로 다른 알고리즘 분류기의 결합
Bagging 모두 같은 알고리즘의 분류기지만 데이터 샘플링을 다르게 하여 voting을 수행
Boosting 여러 분류기가 순차적 학습을 수행하지만 앞에서 학습한 분류기가 예측을 틀린 데이터에 대해서 올바르게 예측할 수 있도록 다음 분류기에 weight를 부여하여 학습/예측을 진행한다.
성능이 가장 좋은 편.
  • voting
    Hard Voting 다수결이라고 보면 된다. 다수의 분류기가 정한 예측값을 최종 보팅 결과값으로 결정한다.
    Soft Voting 분류기들의 레이블 값 결정확률을 평균 내 이들 중 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 결정한다.

출처 https://jaaamj.tistory.com/33

  • Bagging 

  data sampling은 bootstrapping 분할 방식을 사용하며, sample간 중첩을 허용한다는 것이 cross validation과 다른 점이다.

출처 https://medium.com/ml-research-lab/bagging-ensemble-meta-algorithm-for-reducing-variance-c98fffa5489f

- Random Forest 는 Bagging 알고리즘 중 하나로, 결정트리 기반 앙상블 알고리즘입니다. 그러나 하이퍼 파라미터가 너무 많아서 튜닝시간이 긴 것에 비해 성능향상이 미비할 수도 있습니다.

(트리대한 파라미터, bagging, 학습, 정규화 등 위한 파라미터 등등....)

  • Boosting 알고리즘은 GBM, XGBoost, LightGBM을 소개하겠습니다.
  • 다음 그림은 대표적 boosting인 AdaBoost의 알고리즘을 그림으로 나타낸 것입니다.
  •  

- GBM ( Gradient Boosting Machine)

  CART(classification and regression tree) 기반으로, 분류와 회귀가 가능합니다. 수행시간이 오래걸리지만 과적합에 강합니다. AdaBoost와 유사하지만 가중치 업데이트에 GD algorithm을 사용합니다.

- XGBoost

  분류에 있어 뛰어난 성능을 보입니다. GBM 기반이지만 느린 수행시간과 과적합 규제 부재 등의 문제를 해결한 알고리즘입니다. 병렬 CPU 환경에서 병렬학습이 가능합니다.

XGBoost 특징  
Tree Pruning(가지치기) 더이상 긍정 이득 없는 분할은 가지치기(분할수를 줄여줌). 일반적 GBM은 부정손실 발생시 분할을 중지하는데 이것은 지나치게 많은 분할 가능성이 있다.
cross validation(교차검증) 반복수행시마다 내부적으로 교차검증을 시행한다. 교차검증으로 평가 dataset의 평가값이 최적화되면 반복을 중단한다( ! 조기중단 가능! )
Null 처리 결손값을 자체 처리하는 기능이 있다. 
자체적 기능 자체적으로 성능평가와 피쳐 중요도 등을 시각화해주는 기능이 존재한다.

- Light GBM

memory는 적게, 학습시간도 적게 듭니다. 그러나 성능은 XGBoost와 비슷하다는 장점이 있습니다. 그러나 작은 dataset에 적용할 경우 과적합 가능성이 높습니다.

3. Stacking Ensemble (스태킹 앙상블)

개별적 알고리즘을 결합해 예측하는 것으로 bagging 및 boosting과 유사합니다.

그러나 실무에선 잘 쓰이지 않는다고 합니다. kaggle등의 경진대회에서 많이 사용합니다.

개별 알고리즘으로 예측한 데이터들을 stacking형태로 결합해 최종 메타데이터 set을 형성하고 별도의 ML알고리즘으로 최종학습을 수행한 후 test data 예측을 해줍니다. -> meta data 방식!

보통 스태킹앙상블이라 하면 cv set 기반 stacking을 말합니다.

책에 그림이 너무 잘 설명되어 있어서 첨부하겠습니다.

728x90

'machine learning' 카테고리의 다른 글

Clustering(군집화)  (0) 2020.12.15
차원축소 (Demension Reduction)  (0) 2020.12.14
Regression (회귀)  (0) 2020.12.14
머신러닝 기초 지식  (0) 2020.12.14