출처: 코리 웨이드.(2022). XGBoost와 사이킷런을 활용한 그레이디언트 부스팅. 서울:한빛미디어
결정 트리
- 특성에 대한 질문에 따라 데이터를 분류함 (like 스무고개)
- branch(가지)의 분할을 통해 데이터를 두 개의 node로 나눔
- 가지분할은 leaf node를 만들 때까지 진행
- 리프 노드: 최종 예측이 결정됨, 다수인 클래스가 예측 클래스가 됨
- 샘플을 타켓에 매핑할 때까지 수천 개의 그룹을 만들 수 있음
-> 과대적합이 발생하기 쉬움
-> 하이퍼파라미터 튜닝 or 많은 트리의 예측을 모으는 것으로 해결
- libary: sklearn.tree DecisionTreeClassifier / DecisionTreeRegressor
- gini impurity (지니 불순도)
- 결정 트리가 어떻게 분할할지 결정하는데 사용
- 불순도 값이 낮은 분할을 찾는 것이 목표
- 불순도가 0이면 하나의 클래스로만 이루어짐, 0.5면 클래스간 샘플 개수가 동일
- pi : 전체 샘플 중 해당 클래스 샘플의 비율
- c : 클래스 총 개수
gini=1−i=1∑cpi2
- 스텀프(stump): 딱 한번만 분할된 트리
- 자체적으로 강력한 모델은 아니지만 booster로 사용 시, 강력해질 수 있음
분산, 편향
- 편향: 정답과 다른 정도 (오차)
- 편향이 낮을수록 정답에 가까움
- 편향이 높은 경우 -> 과소적합
- 분산: 값이 퍼져있는 정도
- 모델의 예측값이 변하는 정도를 의미 (예측값들이 모여있는지 듬성듬성 있는지 등)
- 직선 -> 분산 낮음
- 많이 구불구불한 곡선 -> 분산 높음
- 분산이 높은 모델 -> 과대적합
하이퍼파라미터
- 파라미터: 모델이 튜닝될 때 조정됨 (ex. 가중치)
- 하이퍼파라미터: 미리 선택됨
- 개별적으로 선택해서는 안됨 (다양한 조합을 고려해야됨)
- GridSearchCV: K-Fold 교차 검증을 사용하여 최선의 결과를 만드는 매개변수 조합을 찾음
- 일반적으로 max 이름을 가진 매개변수를 감소, min 이름을 가진 매개변수를 증가시키면 분산을 줄이고 과대적합을 방지함
- cv: 폴드 개수 지정, default 5
- refit: 최적의 매개변수로 모델을 훈련할 것인지 여부, default True
- n_jobs: 사용할 CPU 개수 ,default 1
- 1보다 크게 지정 시, 여러 개의 CPU 프로세서를 사용해 병렬로 모델 훈련
- -1로 지정 시, 모든 프로세서 사용
종류
- max_depth: 트리의 깊이(=분할 횟수)를 정의, default None
- min_samples_leaf: 리프 노드가 가질 수 있는 최소 샘플의 개수를 제한함, default 1
- max_leaf_nodes: 리프 노드의 전체 개수를 지정, default None
- max_features: 선택할 특성의 최대 개수, default None (=auto, 전체 사용)
- 랜덤포레스트에서 중요하게 사용됨
- max_features 값을 크게 하면 트리들이 매우 비슷해지고 가장 두드러진 특성을 이용해 데이터에 잘 맞춰짐
- max_features 값을 낮게 하면 트리들은 많이 달라지고 각 트리의 깊이가 깊어짐
- min_samples_split: 분할하기 위해 필요한 최소 샘플 개수를 제한, default 2
- splitter: 노드를 분할하기 위한 특성 선택 방법, default best
- best: 정보 이득이 가장 큰 특성을 선택
- random: 랜덤하게 노드를 분할 -> 과대적합 막을 수 있음
- criterion: 분할 품질을 측정할 수 있는 방법 제공
- regressor: squared_error, friedman_mse, absolute_error, poisson
- classifier: gini, entropy
- min_impurity_decrease: 분할하기 위한 최소 불순도 감소 임계값을 지정, default 0
- min_weight_fraction_leaf: 리프 노드가 되기 위한 전체 가중치의 최소 비율, default 0
- 500개 샘플이 있고 가중치가 동일할 때, 매개변수를 0.01로 지정 시 리프노드가 되기 위한 최소 샘플 개수는 5
- ccp_alpha: 트리를 만든 후, pruning(가지치기)하는 기능
튜닝 고려 사항
- 고려사항: 소요 시간, 하이퍼파라미터 개수, 정확도
- 경험적으로 max_depth, max_features, min_samples_leaf, max_leaf_nodes, min_impurity_decrease, min_samples_split만 사용해도 충분함
- RandomizedSearchCV 사용 시, scipy의 randint, uniform or sklearn loguniform 활용
- 매개변수 값이 연속적이고 임의의 간격을 지정하기 어려울 때 도움이됨
성능 향상 전략
- 매개변수 범위를 좁히는 것
- 최상위 모델에서 max_depth=5를 얻었다면, 탐색 범위를 4~6으로 줄일 수 있음
- 기본값이 잘 동작하는 매개변수를 탐색에서 제외시키는 것
특성 중요도
feature_importances_
를 주로 사용
permutation_importance()
- 전달된 특성 값을 사용하여 모델을 훈련하고 타깃을 사용해서 모델 점수를 계산함
- 그 후 특성 하나를 랜덤하게 섞은 후, 모델을 훈련하여 성능을 비교함
- 분류 모델은 정확도, 회귀 모델은 R2로 성능 평가
- sklearn.inspection function
참고