오늘은 DA 수행에 있어 크게 회귀/분류로 나뉘는데 그 중에서도 하나의 입력값이 하나의 클래스에만 속하는 다중 분류에 대해 알아보고자 한다.
일반적으로 세 그룹 이상으로 분류하는 작업을 의미하고 이러한 분류 과정을 수행하는데 있어 대표적인 ML알고리즘으로는 다음과 같다.
- DecisionTreeClassifier
- RandomForestClassifier
- CATBoostClassifier
- LightGBMClassifier
- XGBoostClassifier
- SVM
- MLP
- etc.
이에 하나하나 각 모델의 특징에 대해 살펴보고자 한다.
- 의사 결정 트리는 feature를 통해 데이터를 재귀적으로 분할해 결정을 내리는 모델.
- 각 노드에서 특정 조건에 따라 데이터가 분할되고 최종적으로 리프 노드에 도달해야 예측이 수행된다.
- 모델에 학습되는 데이터를 전부 학습하기에 해석력이 좋고, 변수 중요도 측정이 가능하며 Data Scaling의 영향을 받지 않는다는 장점이 있다.
- 하지만, 오버피팅에 취약하다는 문제가 있고 인코딩이나 결측치 처리에 민감하게 반응하므로 신중하게 도메인을 이해해 처리해야 한다.
💯 대표적인 하이퍼 파라미터는 다음과 같다.
- max_depth : 트리의 최대 깊이를 의미하고 None인 경우 완벽히 클래스 결정값이 정해질 때까지 결정나무가 자랄 수 있다.
- min_samples_split : 노드 분할하기 위한 최소 데이터 수 (지정된 값보다 데이터 수가 많아야 분할 가능)
- min_samples_leaf : 분할 시 왼쪽, 오른쪽 리프노드에서 가져야 할 최소 데이터 수
- max_features : 사용할 최대 feature 개수 (auto인 경우 전체 feature의 제곱근)
- get_params() : 결정트리 객체에 메소드 호출 시 세팅된 하이퍼파라미터 확인 가능
- 여러 결정 트리를 합쳐 강력한 앙상블 모델을 형성하는 모델.
- 각 트리는 부트스트랩 샘플을 사용하고 랜덤하게 선택된 feature 집합을 고려해 훈련을 수행한다.
- 부트스트랩 방식으로 처리하기에 각 트리를 독립적으로 학습하므로 학습과정을 병렬화 할 수 있다.
- 대표적인 배깅 모델로 DecisionTree 단점을 보완한 모델
- 반드시 random_state를 고정해야 함.
- 과적합을 줄이고 변수 중요도를 측정할 수 있지만, 모델 해석이 힘들고 학습 시간이 오래 걸림.
💯 대표적인 하이퍼 파라미터는 다음과 같다.
- n_estimators : 모델에서 사용할 트리 개수
- criterion : 분할 품질 측정하는 기능
- max_depth, min_samples_leaf, split, max_features : DecisionTree와 동일
- min_weight_fraction_leaf : min_sample_leaf와 동일하지만 가중치가 부여됌.
- max_leaf_nodes : 리프노드 최대수
- min_impurity_decrease : 최소 불순도
- min_impurity_split : 나무 성장을 멈추기 위한 임계치
- oob_score : 일반화 정확도 줄이기 위한 외부 샘플 사용 여부
- bootstrap : 부트스트랩 (중복허용 샘플링) 여부
- n_jobs : 모델 학습에 있어 병렬로 사용할 CPU 수
- verbose : 실행 시 학습과정 출력 여부
- class_weight : 클래스 가중치
범주형 데이터를 다루는 데 강점을 가진 부스팅 알고리즘
자동적인 인코딩, 최소화된 오버피팅이 특징이다.
자동적인 범주형 변수 처리, 높은 정확도, 빠른 훈련 속도를 제공함.
하지만, 하이퍼파라미터 튜닝이 필요하다.
level-wise 방식으로 속도 개선 로직과 정규화 방법을 보유하고 있는 부스팅 계열.
기존 부스팅과 가장 다른 점으로, boosting 과정이 다르다.
기존에는 모든 훈련 데이터를 대상으로 잔차계산을 진행하지만, CatBoost는 학습데이터의 일부만으로 잔차계산을 하고 이 결과로 모델을 다시 만든다. Ordered-Boosting 방식이기에 시계열에도 사용될 수 있지만, 사실 임의적으로 순서를 랜덤하게 섞어주는 과정도 포함하고 있다. (오버피팅 방지)
즉, 기존 RandomForest의 경우 모델 학습에 사용되는 트리들이 독릭적이어서 score가 매우 상이하지만 CATBoost의 경우 여러 트리가 상호 영향을 주기에 하이퍼파라미터 튜닝을 신경써서 진행해 성능을 높여주어야 한다.
또한, Sparse한 Matrix에 대해 처리가 힘든 부분이 있고 대부분이 수치형인 경우 LGBM이 더 속도 측면에서 우월하다.
논문에선 CATBoost를 다음과 같이 소개한다.
"CatBoost is a high-performance open source library for gradient boosting on decision tress.💯 대표적인 하이퍼 파라미터는 다음과 같다.
- iteration : 최대 트리 수
- early_stopping_rounds : 마지막 라운드에서 검증 데이터가 개선되지 않으면 중단하고 무시
- eval_metric : 평가지표를 auto로 설정하면 알아서 평가함.
- learning_rate : 모델 학습 시 가중치
- depth : 트리 깊이
- l2_leaf_reg : 비용 함수의 L2 정규화 항에 대한 계수
- boosting_type : Auto, Ordered, Plain 중 하나로 부스팅 학습 모드 선택 가능
MS에서 개발한 부스팅 알고리즘으로 leaf-wise 방식으로 작동하는 모델. 큰 데이터셋에 대한 효율적인 학습 지원.(데이터가 만일 적으면 오버피팅 가능성 多)
XGBoost보다 학습 시간이 짧고 메모리 사용량이 적음.
leaf-wise 방식이기에 max_delta_loss (최대 손실값)을 가지는 리프 노드를 분할해 비대칭적인 규칙 트리를 생성함. 결과적으로 예측 오류 손실 최소화 가능
단, 하이퍼파라미터 튜닝이 상당히 중요
💯 대표적인 하이퍼 파라미터는 다음과 같다.
- num_iterations, learning_rate, max_depth, min_data_in_leaf, num_leaves, boosting(gbdt/rf), bagging_fraction, labmda_l2, labmda_l1, objective, num_leaves, min_data_in_leaf, max_depth 등이 있음.
- eXtreme Gradient Boosting의 약어로 부스팅 알고리즘. 기존 GBM (Gradient Boosting에 비해 속도가 빠르고 성능이 좋음)
- 트리 기반 앙상블 학습에서 가장 많이 쓰이고 오버피팅 해결은 물론 교차 검증(CV) 기능이 자체적으로 내장되어 있다.
- 또한, 병렬 CPU환경에서 병렬 학습이 가능하다.
- 자체적으로 plotting 기능이 있고 Early Stopping이 가능해 loss 개선이 없으면 중단도 가능하다.
- 단, 하이퍼파라미터 튜닝이 LGBM과 마찬가지로 중요하고 데이터 양에 따라 학습 시간이 길어질 수 있다.
💯 대표적인 하이퍼 파라미터는 다음과 같다.
- learning_rate : default : 0.3
- n_estimators : 학습기 개수
- min_child_weight : leaf와 유사, 오버피팅 방지
- max_depth : 트리 최대 깊이
- subsample : 샘플링 비율
- early_stopping_rounds : 오버피팅 방지, 모델 학습 중단
- eval_metric : 반복 수행 시 성능 평가지표
- eval_set : 평가 수행 시 별도의 validation 셋을 의미, 일반적으로 validation 세트에서 반복적으로 비용 감소 성능 평가
SVM 정리
위 학습 자료 정리한 내용 참고.
- 인공신경망 NN의 유형으로 여러 은닉층을 가진 다층 신경망이다. 흔히 알고 있는 Back-propagation algorithms을 통해 학습을 진행한다.
- 복잡한 비선형 관계를 학습할 수 있고 다양한 유형의 문제에 적용할 수 있는 딥러닝 모델
- 데이터 양에 따라 학습시간이 길어질 수 있고 하이퍼파라미터 튜닝이 중요하고 오버피팅에 대비할 필요가 있다.
다중분류모델 - MLP
위 내용 참고.