지도학습에서 극도로 불균형한 레이블 값 분포로 인한 문제점을 해결하기 위해선 적절한 학습 데이터를 확보하는 방안이 필요하다. 대표적으로 오버 샘플링과 언더 샘플링 방법이 있다. 오버 샘플링 방식이 예측 방식이 예측 성능상 더 유리한 경우가 많아 주로 사용된다. 다음은 샘플링 방법을 설명한다.

 

언더 샘플링은 많은 데이터 셋을 적은 데이터 셋 수준으로 감소시키는 방식이다. 가령 정상 레이블을 가진 데이터가 10,000건, 비정상 레이블을 가진 데이터가 100건이 있을 경우 정상 레이블 데이터를 100건으로 줄이는 방식이다.

 

오버 샘플링은 비정상 데이터와 같이 적은 데이터 셋을 증식하여 학습을 위한 충분한 데이터를 확보하는 방법이다. 동일한 데이터를 단순히 증식하는 방법은 과적합이 되기 때문에 의미가 없으므로 원본 데이터의 피처 값들을 아주 약간만 변경하여 증식하며 대표적으로 SMOTE(Synthetic Minority Over-Sampling Technique) 방법이 있다.

 

SMOTE


SMOTE는 적은 데이터 셋에 있는 개별 데이터들의 K 최근접 아웃(K Nearest Neighbor)을 찾아서 이 데이터와 K개 이웃들의 차이를 일정 값으로 만들어서 기존 데이터와 약간 차이가 나는 새로운 데이터들을 생성하는 방식이다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://joonable.tistory.com/27

LightGBM


LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 가장 각광을 받고 있다. XGBoost의 경우 매우 뛰어난 부스팅 알고리즘이지만 여전히 학습 시간이 오래 걸린다는 단점이 있다.

 

XGBoost에서 GridSearchCV로 하이퍼 파라미터 튜닝을 수행하다 보면 수행 시간이 너무 오래걸려서 많은 파라미터를 튜닝하기에 어려움을 겪을 수 밖에 없다. 물론 GBM보다는 빠르지만, 대용량 데이터의 경우 만족할 만한 학습 성능을 기대하려면 많은 CPU 코어를 가진 시스템에서 높은 병렬도로 학습을 진행해야 한다.

 

LightGBM의 가장 큰 장점은 XGBoost보다 학습에 걸리는 시간이 훨씬 적고 메모리 사용량도 상대적으로 적다. 'Light'라는 이미지가 가벼움을 뜻하게되어 상대적으로 떨어진다든가 기능상의 부족함이 있다고 인식될 수 있으나 실상은 그렇지 않다.

 

LighGBM과 XGBoost의 예측 성능은 별다른 차이가 존재하지 않는다. 또한 기능상의 다양성은 LightGBM이 약간 더 많다. XGBoost가 만들어진 2년 후에 LightGBM이 만들어졌기에 XGBoost의 장점은 계승하고 단점은 보완하는 방식으로 개발되었기 때문이다.

 

그럼에도 불구하고 LightGBM의 한 가지 단점으로는 적은 데이터 셋에 적용할 경우 과적합이 발생하기 쉽다는 것이다. 적은 데이터 셋의 기준은 일반적으로 10,000건 이하의 데이터 셋이라 LightGBM 공식 문서에서 기술하고 있다.

 

LightGBM은 일반 GBM 계열의 트리 분할 방법과 달리 리프 중심 트리 분할(Leaf Wise) 방식을 사용한다. 기존의 대부분 트리 기반 알고리즘은 트리의 깊이를 효과적으로 줄이기 위한 균형 트리 분할(Level Wise) 방식을 사용한다.

즉, 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화될 수 있다. 반대로 균형을 맞추기 위한 시간이 필요하다는 상대적 단점이 있다. 

 

LightGBM의 리프 중심 트리 분할 방식은 트리의 균형을 맞추지 않고, 최대 손실 값(max delta loss)을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성된다. 하지만 이렇게 최대 손실값을 가지는 리프 노드를 지속적으로 분할해 생성된 규칙 트리는 학습을 반복할수록 결국은 균형 트리 분할 방식보다 예측 오류 손실을 최소화 할 수 있다는 것이 LightGBM의 구현 사상이다.

 

 

LightGBM 하이퍼 파라미터


LightGBM의 하이퍼파라미터의 경우 XGBoost와 달리 리프 노드가 계속 분할되면서 트리의 깊이가 깊어지므로 이러한 트리 특성에 맞는 하이퍼 파라미터 설정이 필요하다. 예를들면 max_depth를 매우 크게 가지는 것이 있다.

 

- learning_rate를 작게하면서 n_estimators를 크게 하는 것은 부스팅 계열 튜닝에서 가장 기본적인 튜닝 방안

- n_estimators를 너무 크게 하는 것은 과적합으로 오히려 성능 저하가 될 수 있음

- 과적합을 제어하기 위해 reg_lambda, reg_alpha와 같은 regularization을 적용하거나 학습 데이터에 사용할 피처의 개수나 데이터 샘플링 레코드 개수를 줄이기 위해 colsample_bytree, subsample 파라미터를 적용할 수 있음

 

※ 주의 : LightGBM이 버전업 되면서 boost_from_average 파라미터의 디폴트 값이 False에서 True로 변경됨. 레이블 값이 극도로 불균형한 분포를 이루는 경우 boost_from_average=True 설정은 재현률 및 ROC-AUC 성능을 매우 크게 저하시킨다. LightGBM 2.1.0 이상의 버전이 설치되어 있거나 불균형한 데이터 셋에서 예측 성능이 매우 저조할 경우 LightGBMClassifer 객체 생성 시 boost_from_average=False로 파라미터 설정해야함.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

XGBoost란


XGBoost(eXtra Gradient Boost)는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나이다. 캐글 경연 대회에서 상위를 차지한 많은 데이터 사이언티스트가 XGBoost를 이용하면서 널리 알려졌다. 압도적 수치의 차이는 아니지만, 분류에 있어 일반적으로 다른 머신러닝보다 뛰어난 예측 성능을 나타낸다.

 

XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제(Regularization) 부재 등의 문제를 해결해서 매우 각광을 받고 있다. 특히 XGBoost는 병렬 CPU 환경에서 병렬 학습이 가능해 기존 GBM보다 빠르게 학습을 완료할 수 있다.

 

XGBoost 장점


  • 일반적으로 분류와 회귀 영역에서 뛰어난 예측 성능을 발휘

 

  • 일반적인 GBM은 순차적으로 Weak learner가 가중치를 증감하는 방법으로 학습키 때문에 전반적으로 속도가 느림. 하지만 XGBoost는 병렬 수행 및 다양한 기능으로 GBM에 비해 빠른 수행성능 보장

 

  • 표준 GBM의 경우 과적합 규제 기능이 없으나 XGBoost는 자체 과적합 규제 기능으로 과적합에 좀 더 강한 내구성을 가질 수 있음

 

  • 다른 GBM과 마찬가지로 max_depth 파라미터로 분할 깊이를 조정하기도 하지만, tree pruning으로 더 이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수를 더 줄이는 추가적인 장점이 있음

 

  • 반복 수행 시마다 내부적으로 학습 데이터 셋과 평가 데이터셋에 대한 교차 검증을 수행해 최적화된 반복 수행 횟수를 가질 수 있고, 최적화 되면 반복을 중간에 멈출 수 있는 조기 중단 기능이 있음.

 

XGboost는 자체적으로 교차 검증, 성능 평가, 피처 중요도 등의 시각화 기능을 가지고 있음

 

DMatrix


파이썬 래퍼 XGBoost는 사이킷런과 차이가 여러 가지 있지만, 먼저 눈에 띄는 차이는 학습용과 테스트용 데이터 셋을 위해 별도의 객체인 DMatrix를 생성한다는 점이다. DMatrix는 주로 넘파이 입력 파라미터를 받아서 만들어지는 XGBoost만의 전용 데이터셋이다. DMatrix의 주요 입력 파라미터는 data와 label이다. 

data는 피처 데이터 셋이며, label은 분류의 경우에는 레이블 데이터 셋, 회귀의 경우는 숫자형인 종속값 데이터 셋이다.

 

xgboost 모듈을 사용해 학습을 수행하기 전에 하이퍼 파라미터를 설정하며 하이퍼 파라미터의 경우 주로 딕셔너리 형태로 입력한다. 또한 xgboost 모듈의 경우 train() 함수에 파라미터로 전달하며 사이킷런에서는 Estimator의 생성자를 하이퍼 파라미터로 전달하는 데 반해 차이가 있다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

부스팅 알고리즘


부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식이다.

 

 

구현 알고리즘


부스팅의 대표적인 구현은 AdaBoost(Adaptive boosting)와  GBM(Gradient Boost Machine)이 있다.

 

  • AdaBoost
    • 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘

학습 진행 방법은 다음과 같다.

만약 +, -로 피처 데이터셋이 존재하고 Iteration 1과 같이 +를 탐지하려 하였으나 탐지를 하지 못하게되면 Iteration 2와 같이 +의 크기를 키워(가중치를 키워) 다음 약한 학습기가 더 잘 분류할 수 있도록 진행한다.

 

에이다 부스트는 위와 같이 약한 학습기가 순차적으로 오류 값에 대해 가중치를 부여한 예측 결정 기준을 모두 결합해 예측을 수행한다.

 

그 결과 위 그림의 Final Classifier/Strong classifier와 같이 이전의 학습기를 모두 결합한 예측을을 하여 정확도가 높아지는 것을 알 수 있다.

 

 

  • GBM (Gradient Boosting Machine)
    • 에이다부스트와 유사한, 가중치 업데이트를 경사 하강법을 이용하는 것이 큰 차이다.

오류 값은 "실제 값 - 예측 값"이다. 분류의 실제 결과값을 $y$, 피처를  $x_1, x_2,\dots, x_n$, 그리고 이 피처에 기반한 예측 함수를 $F(x)$ 함수라고 하면 오류식 $h(x) = y - F(x)$가 된다.

 

해당 오류식 $h(x) = y - F(x)$를 최소화 하는 방향성을 가지고 반복적으로 가중치 값을 업데이트하는 것이 경사 하강법이다. 경사 하강법은 머신러닝에서 중요한 기법 중 하나이며, "반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법"으로 이해하면 좋다. 또한 경사 하강법의 경우 회귀를 다룰 때 구체적인 개념을 더 필요로 한다.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://www.youtube.com/watch?v=BoGNyWW9-mE

 

랜덤 포레스트


배깅(bagging)은 앞에서 보팅과는 다르게, 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘이다. 배깅의 대표적인 알고리즘이 랜덤 포레스트이며 이는 앙상블 알고리즘 중 비교적 빠른 수행 속도를 가지고 있고, 다양한 영역에서 높은 예측 성능을 보인다.

 

랜덤 포레스트의 기반 알고리즘은 결정 트리로서, 결정 트리의 쉽고 직관적인 장점을 그대로 가지고 있다.

또한 랜덤 포레스트뿐만 아니라 부스팅 기반의 다양한 앙상블 알고리즘 역시 대부분의 결정 트리 알고리즘을 기반 알고리즘으로 채택하고 있다.

 

랜덤 포레스트는 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측을 결정하게 된다.

 

 

랜덤 포레스트는 개별적인 분류기의 기반 알고리즘은 결정 트리지만 개별 트리가 학습하는 데이터 셋은 전체 데이터에서 일부가 중첩되게 샘플링된 데이터 셋이다.

 

여러 개의 데이터 셋을 중첩되게 분리하는 것을 부트스트래핑(bootstrapping) 분할 방식이라 한다. 그래서 배깅(Bagging)이 bootstrap aggregating의 줄임말이다. 원래 부트스트랩은 통계학에서 여러 개의 작은 데이터 셋을 임의로 만들어 개별 평균 분포도를 측정하는 등의 목적을 위한 샘플링 방식을 지칭한다.

 

랜덤 포레스트의 서브셋(Subset) 데이터는 이러한 부트스트래핑으로 데이터가 임의로 만들어진다. 서브셋 데이터 건수는 전체 데이터 건수와 동일하지만, 개별 데이터가 중첩되어 만들어진다. 원본 데이터의 건수가 10개인 학습 데이터 셋에 랜덤 포레스트를 3개의 결정 트리 기반으로 학습하려고 n_estimators = 3으로 하이퍼 파라미터를 부여하면 다음과 같이 데이터 서브 셋이 만들어진다.

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://yeo0.github.io/data/2018/11/06/6.-랜덤-포레스트/

 

앙상블 학습


앙상블 학습을 통한 분류는 여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종예측을 도출하는 기법을 의미

 

어려운 문제의 결론을 내기 위해 여러 명의 전문가로 위원회를 구성해 다양한 의견을 수렴하고 결정하듯, 앙상블 학습의 목표는 다양한 분류기의 예측 결과를 결합함으로써 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것

 

즉, 집단지성을 이용.

 

 

앙상블 알고리즘


앙상블 알고리즘의 대표격인 랜덤포레스트와 그래디언트 부스팅 알고리즘의 경우 뛰어난 성능과 쉬운 사용, 다양한 활용도로 인해 많이 사용되어 옴

 

부스팅 계열의 앙상블 알고리즘의 인기와 강세가 계속 이어져 기존의 그래디언트 부스팅을 뛰어넘는 새로운 알고리즘이 개발 가속화가 됐으며, 이로 인해 캐글에서는 XGBoost 그리고 XGBoost와 유사한 예측 성능을 가지면서 훨씬 빠른 수행 속도를 가진 LightGBM, 여러가지 모델의 결과를 기반으로 메타 모델을 수립하는 스태킹(Stacking)을 포함해 다양한 유형의 앙상블 알고리즘이 머신러닝의 선도 알고리즘으로 인기를 모으고 있음

 

XGboost, LightGBM과 같은 최신 앙상블 모델 한두 개만 잘 알고 있어도 정형 데이터의 분류나 회귀 분야에서 예측 성느이 매우 뛰어난 모델을 쉽게 만들 수 있음.

 

 

앙상블 학습 유형


  • 보팅(Voting)

 

  • 배깅(Bagging)
    • Bootstrap Aggregating의 줄임말이다.
    • 원래 데이터에 대해서 여러개의 작은 데이터셋 N개를 샘플링해서 만든다음, 각각의 데이터를 작은 모델 N개로 학습을 시킨다.
    • 이후 다음 학습된 N개의 모델을 모두 하나로 합쳐서 최종적인 모델로 사용하는(bag에 담는 느낌) 방법론을 의미한다. (병렬적으로 데이터를 나누어 여러 개의 모델을 동시에 학습시킴)

 

  • 부스팅(Boosting)

 

보팅과 배깅의 경우 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식

 

보팅과 배깅의 차이점은 보팅의 경우 일반적으로 서로 다른 알고리즘을 가진 분류기를 결합하는 것이고, 배깅의 경우 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행하는 것. 대표적인 배깅방식이 바로 랜덤 포레스트 알고리즘임

 

아래는 보팅 분류기를 도식화한 것임

 

Voting 방식

 

아래 그림 수정 필요 잘못 삽입.

Bagging 방식

 

 

보팅 유형


  • 하드 보팅 (Hard Voting)
    •  다수결의 원칙과 비슷하며, 예측 결과값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정

 

  • 소프트 보팅 (Soft Voting)
    • 분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균해서 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정. 일반적으로 소프트 보팅 방법으로 적용됨

 

 

 

Reference


[1] 파이썬 머신러닝 완벽가이드

[2] https://newsight.tistory.com/247

 

결정 트리란?


결정트리는 ML 알고리즘 중 직관적으로 이해하기 쉬운 알고리즘이다.

 

데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리 기반의 분류 규칙을 만드는 것이다.

 

일반적으로 규칙을 가장 쉽게 표현하는 방법은 if/else 기반으로 나타내는 것이다.

 

예를 들면 스무고개 게임과 유사하며 규칙 기반 프로그램에 적용되는 if, else를 자동으로 찾아내 예측을 위한 규칙을 만드는 알고리즘이다.

 

- Q1이 루트 노드가 된다.

- Q2, Q3가 규칙 노드가 된다.

- Q4, Q5, Q6, Q7이 규칙 노드가 된다.

- 빨간색으로 표시된 END1, END3, END5, END7이 결정이 된 분류값으로 리프 노드가 된다.

- 결정되지 않은 값인 END2, END4, END6, END8은 다시 규칙 노드가 되며 아래로 계속해서 노드가 생성된다.

- 트리의 깊이가 깊어질수록 과적합이 발생할 가능성이 있고 성능 저하를 초래할 수 있다

 

!! 따라서 가능한 적은 결정 노드로 최대한 많은 데이터 셋이 해당 분류에 속할 수 있도록 결정 노드의 규칙이 정해져야 하며, 이를 위해서 어.떻.게 트리를 분할할 것인가에 대한 기준을 정하는 것 가장 중요하다.

 

 

결정 노드의 정보 균일도


결정노드는 정보 균일도가 높은 데이터 셋을 먼저 선택할 수 있도로 규칙 조건을 만든다.

정보의 균일도를 측정하는 대표적 방법은 엔트로피를 이용한 정보 이득(Information Gain)지수와 지니 계수가 있다.

 

  • 정보 이득
    • 엔트로피를 기반으로 하며, 여기서 엔트로피는 주어진 데이터 집합의 혼잡도를 의미한다. 서로 다른 값이 섞여 있으면 엔트로피가 높고, 같은 값이 섞여 있으면 엔트로피가 낮다. 정보 이득 지수는 1에서 엔트로피 지수를 뺀 값이다. 결정트리는 정보 이득 지수로 분할 기준을 정한다.
  • 지니 계수
    • 경제학에서 불평등 지수를 나타낼 때 사용하는 계수다. 경제학자인 코라도 지니의 이름에서 딴 계수로, 0이 가장 평등하고 1로 갈수로 불평등하다. 머신러닝에 적용될 때는 지니 계수가 낮을수록 데이터 균일도가 높은 것으로 해석된다. 따라서 결정트리는 지니 계수가 낮은 속성을 분할기준으로 정한다.

 

결정트리 알고리즘을 사이킷런에서 구현한 DecisionTreeClassifier는 기본으로 지니 계수를 이용해 데이터 셋을 분할한다. 

 

 

결정 트리 모델의 특징


결정 트리의 경우 '균일도'라는 룰을 기반으로 하고 있어, 알고리즘이 쉽고 직관적이다. 정보의 균일도만 신경 쓰면 되기에 특별한 경우를 제외하고, 각 피처의 스케일링과 정규화 같은 전처리 작업이 필요하지 않다. 

반면 결정 트리 모델의 가장 큰 단점으로는 과적합으로 인해 정확도가 떨어진다는 점이다.

 

모든 데이터의 상황을 만족하는 완벽한 규칙을 만들지 못하는 경우가 훨씬 많다. 정확도를 높이기 위해 계속해서 규칙을 추가할 경우 트리가 깊어지고, 커지고, 복잡해진다. 이렇게 될 경우 유연하게 대처할 수 없기에 예측 성능이 떨어진다. 따라서 완벽할 수 없다는 것을 인정하면 더 나은 성능을 보장할 가능성이 높다. 즉, 트리의 크기를 사전에 제한하는 것이 오히려 성능 튜닝에 더 도움이 된다.

 

 

결정 트리 파라미터


사이킷런은 결정 트리 알고리즘을 구현한 두 가지 클래스를 제공한다.

  • DecisionTreeClassifier
    • 분류를 위한 클래스

 

  • DeicsionTreeRegressor
    • 회귀를 위한 클래스

 

DecisionTreeClassifier와 DeicsionTreeRegressor는 모두 동일한 파라미터를 사용한다.

  • min_samples_split
    • 노드를 분할하기 위한 최소한의 샘플 데이터 수로 과적합을 제어하는 데 사용
    • 디폴트는 2고 작게 설정할수록 분할되는 노드가 많아져서 과적합 가능성 증가
    • 과적합을 제어. 1로 설정할 경우 분할되는 노드가 많아져 과적합 가능성 증가

 

  • min_samples_leaf
    • 말단 노드가 되기 위한 최소한의 샘플 데이터 수
    • min_samples_split과 유사하게 과적합 제어 용도. 그러나 비대칭(imbalanced) 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 이 경우는 작게 설정 필요

 

  • max_features
    • 최적의 분할을 위해 고려할 최대 피처 개수. 디폴트는 None으로 데이터 셋의 모든 피처를 사용해 분할 수행

 

  • max_depth
    • 트리의 최대 깊이 규정, 디폴트는 None
    • None으로 설정하면 완벽하게 클래스 결정 값이 될 때까지 깊이를 계속 키우며 분할하거나, 노드가 가지는 데이터 개수가 min_samples_split보다 작아질 때까지 계속 깊이를 증가시킴

 

  • max_leaf_nodes
    • 말단 노드의 최대 개수

 

결정 트리 모델의 시각화


Graphviz 패키지를 사용해서 가능하다. 사이킷런은 Graphviz 패키지와 쉽게 인터페이스할 수 있도록 export_graphviz() API를 제공한다.

 

export_graphviz()는 함수 인자로 학습이 완료된 Estimator, 피처의 이름 리스트, 레이블 이름 리스트를 입력하면 학습된 결정 트리 규칙을 실제 트리 형태로 시각화해 보여준다.

 

 

 

결정트리의 하이퍼파라미터


하이퍼 파라미터의 경우 과적합이 쉽게 되는 결정 트리 알고리즘을 제어하기 위해 사용되며, 복잡한 트리가 생성되는 것을 막는다. 

 

  • max_dpeth 하이퍼 파라미터
    • max_depth의 경우 결정 트리의 최대 깊이를 제어하며, 만약 더 작은 수로 깊이를 설정할 경우 더 간단한 결정 트리가 된다.
  • min_samples_split 하이퍼 파라미터
    • 자식 규칙 노드를 분할해 만들기 위한 최소한의 샘플 데이터 개수

만약 min_samples_splits 하이퍼 파라미터 값을 4로 설정한 경우 다음과 같은 결정트리 그래프가 생성된다.

표시된 사선 박스를 확인하면 [0, 2, 1]과 [0, 1, 2]로 서로 상이한 클래스 값이 있어도 더 이상 분할하지 않고 리프 노드가 된다. 

 

만약 min_samples_splits 하이퍼 파라미터 값을 5로 지정해주면 다음과 같은 결정트리 그래프가 생성된다.

앞서 보인 그래프와 달리 깊이가 1 증가하면서 추가적인 노드가 생성되어 모든 분류가 진행된 것을 확인할 수 있다.

 

  • min_samples_leaf 하이퍼 파라미터
    • 해당 파라미터의 값을 키울 경우 더 이상 분할하지 않고, 리프 노드가 될 수 있는 조언이 완화된다. 즉, 지정 값 기준만 만족하면 리프노드가 된다

예시로는 min_samples_leaf 값을 4로 설정할 경우 샘플이 4이하이면 리프 노드가 되기에, 지니 계수 값이 크더라도 이를 무시한다.

Sample이 4이상인 노드는 리프 클래스 노드가 될 수 있음므로 규칙이 sample 4인 노드를 만들 수 있는 상황을 반영하여 변경된다.

 

 

결정 트리의 경우 어떤 속성을 규칙 조건으로 선택하느냐가 중요한 요건이다.

 

Feature의 중요 역할 지표


사이킷런에서는 결정트리 알고리즘이 학습을 통해 규칙을 정하는 데 있어 피처의 중요한 역할 지표를 DecisionTreeClassifier 객체의 feature_importances_ 속성으로 제공한다.

 

피처의 값이 높을 수록 중요도가 높음을 의미하고 예시는 다음과 같다.

 

네 가지 피쳐중 petal length에 해당하는 피처가 가장 중요도가 높음을 알 수 있다.

 

Reference


[1] 파이썬 머신러닝 완벽가이드

+ Recent posts