[ML] Decision Tree

_·2024년 8월 11일

머신러닝

목록 보기
4/6
post-thumbnail

Hands-On Machine Learning with Scikit-Learn and TensorFlow 책을 공부하고 내용을 정리한 글이다.

Decision Tree

ML에서 분류와 회귀 문제 둘 다에서 유용한 알고리즘이다. 가장 많이 쓰이는 Random Forest 알고리즘의 기본이 되는 요소이기도 하다.

Root node(top)에서부터 시작하여 물음에 따라 left child node로 갈 것인지, right child node로 갈 것인지 결정하며 내려간다.

Gini impurity란, 랜덤하게 선택된 샘플들이 클래스에 어느 정도로 잘못 분류될 것인가에 대한 측정 척도이다.
Entropy는 분류가 잘 되면 0에 가까워지는 측정 척도이다.

보통, Gini impurity나 Entropy는 비슷한 결과를 내놓는다.
Gini impurity는 계산 속도가 빠르고 Entropy는 좀 더 균형 있는 Decision Tree를 제공한다.

Decision Tree는 직관적이고 설명가능하기 쉽기 때문에 White Box라고 불린다. 반대로, Random Forest나 Neural Network들은 왜 그런 예측 결과가 나왔는지 쉽게 설명하기 어렵기 때문에 Black Box라고 불린다.

Decision Tree는 각각의 Class에 속할 확률을 계산하고, 확률값이 가장 크게 나온 클래스로 분류한다.

CART 알고리즘

CART는 Classification And Regression Tree를 의미한다. (Decision Tree를 학습시키는 방법 중 하나)
원리는 이진분류를 시도하고 분류를 시도했을 때의 cost function이 최소화되는 방향으로 계속해서 분류를 이어간다.

Overfitting

Decision Tree 알고리즘의 Overfitting을 예방하기 위해서는 Hyperparameter를 조정하면 된다. 주로 Decision Tree의 최대 깊이나, 모양(최대/최소 노드 수)을 조절하여 규제를 실행한다.

Limitation

Decision Tree는 간단하고 이해하기 쉬운 알고리즘이지만, 몇 가지의 한계가 존재한다.

만약 학습 데이터에 회전이 이루어지면, 이를 민감하게 받아들이고 잘 분류하지 못한다. 또한 학습데이터에 민감하게 반응하여 아주 작은 분산의 변화에도 크게 반응한다.

Ensemble Learning & Random Forest

한 개의 단독적인 모델을 사용하는 것보다 여러개를 함께 사용했을 때 더 좋은 결과를 얻을 수 있는데, 이를 Ensemble이라고 한다.

Ensemble 아래와 같이 방법에는 여러 가지가 존재한다.

Voting Classifier

여러 방법이나 모델의 투표를 통해 가장 많은 표를 받은 모델을 선정해서 사용하는 방법이다.

보통 best classifier보다 더 좋은 정확도를 보인다.

Bagging & Pasting

같은 학습 방법을 사용하지만, 각각의 샘플이나 하위 데이터셋을 다른 방식으로 학습시키는 방법이다.

각각의 방법으로 학습하고 예측한 것을 최종적으로 합쳐서 ensemble을 통해 새로운 값에 대한 예측을 실행한다.
Bagging을 할 때, 계속해서 뽑혀서 학습시키는 부분이 있을 수도 있고, 한 번도 선택되지 않은 부분이 있을 수도 있다. (Out-of-Bag Evaluation을 활용해서 모델 평가를 진행하는데, 이는 한 번도 뽑히지 않은 부분만을 골라서 모델 평가를 진행하는 것이다.)

Random Forest

Decision Tree의 Ensemble으로 보통 Bagging 방법으로 학습을 진행한다.

각각의 하위 집합에 대해서 가장 좋은 성능을 내는 부분을 합치는 방법이다.

Boosting

Weak learner들을 합쳐서 Strong learner로 만드는 방법이다.

  • AdaBoost: 처음엔 기본 분류기로 분류를 진행하고 그 이후부터는 업데이트된 값을 반영하에 계속해서 분류를 이어간다.
  • Gradient Boosting: 방식은 AdaBoost와 거의 동일하지만, 그 전의 예측기의 residual error를 반영하여 다음 예측기를 학습시킨다는 차이점이 존재한다.

Stacking

모델을 결합해나가는 것이 아닌 모델 결합을 위해 학습을 진행하는 것은 어떨까?

profile
Hi

0개의 댓글