
1. 분류 개요
- 지도학습의 대표적 유형
- 기존 대이터가 어떤 레이블에 속하는지 패턴을 알고리즘으로 인식한 뒤에 새롭게 관측된 데이터에 대한 레이블 판별
- 분류 알고리즘 종류
- 나이브 베이즈
- 로지스틱 회귀
- 결정 트리 → 데이터 균일도
- 서포트 벡터 머신 → 개별 클래스 간 최대 마진 분류
- 최소 근접 알고리즘
- 신경망
- 앙상블 → 서로 같거나 다른 알고리즘 결합
- 배깅
- 랜덤 포레스트
- 부스팅
- 그래디언트 부스팅 : 수행 시간 bad👎
- XgBoost
- LightGBM
- 배깅
2. 결정 트리
데이터에 있는 규칙을 자동으로 찾아내 트리 기반의 분류 규칙을 만든다.

이때, 많은 규칙이 있다는 것은 분류를 결정하는 방식이 복잡해진다는 의미이다. 따라서 트리의 깊이가 깊어질수록 결정 트리의 예측 성능은 저하될 수 있다. 가능한 적은 결정 노드로 높은 예측 정확도를 가지려면, 최대한 균일한 데이터 세트로 분할해야 한다. 즉, 최대한 비슷한 것들끼리 모이도록 규칙을 만들어야 한다. 정보의 균일도를 측정하는 방법은 엔트로피를 이용한 정보 이득 지수와 지니 계수가 있다. 정보 이득 시후가 높을수록, 지니 계수가 높을 수록, 같은 값끼리만 섞여 있는 상태이다.
[결정트리 모델 장점]
- 정보의 균일도만 신경 쓰면 되기 때문에 전처리 작업이 필요 없다.
[결정트리 모델 단점]
- 과적합으로 정확도가 떨어진다.
- 계속 조건을 추가하면서 트리 깊이가 깊어지면, 복잡해진다.
=> 트리의 깊이를 사전에 제한하면 해결 가능하다.
2.1 트리 기반의 분류 규칙
- 데이터에 있는 규칙을 학습을 통해 자동으로 찾아낸다.
- e.g. if/else
- 규칙 노드 (Decision Node) : 규칙 조건
- 데이터 세트에 feature가 있고 이러한 feature 가 결합해 규칙 조건을 만든다. 그럴 때마다 규칙 노드가 만들어진다.
- 리프 노드 (Leaf Node) : 결정도니 클래스 값
- 서브 트리 (Sub Tree) : 새로운 규칙 조건마다 생성됨
2.2 높은 예측 정확도
- 많은 규칙 ⇒ 분류 결정 방식이 복잡 ⇒ 과적합 ⇒ 트리의 깊이 (dept) 깊어질수록 결정 트리의 예측 성능이 저하
- 데이터를 분류할 때 최대한 많은 데이터 세트가 해당 분류에 속할 수 있도록 결정 노드의 규칙이 정해져야 한다.
- 즉, 최대한 균일한 데이터 세트를 구성할 수 있도록 분할(split) 해야함
2.3 정보의 균일도

- 균일도: C>B>A
- 결정 노드는 정보 균일도가 높은 데이터 세트를 먼저 선택하도록 규칙 조건을 만든다.
- e.g. {노랑 동그라미, 파란 동그라미, 파란 세모, 빨강 동그라미, 빨강 세모} 데이터 있을 때 if 색깔 == 노란색으로 노란색 블록을 먼저 추출
- 균일도 측정
- 엔트로피: 데이터 집합의 혼잡도
- 지니계수가 낮을수록 균일도 높다.
- 지니 계수가 낮은 속성 (=균일도가 높은) 을 기준으로 분할
- 🗂️ 정보 이득 지수 (Information Gain)
2.4 결정 트리 모델의 특징
- 장점
- 시각화 가능
- 각 feature 의 스케일링과 정규화 같은 전처리 작업 불필요
- 단점
- 과적합으로 정확도가 떨어짐
- 균일도가 다양하게 존재할수록 트리의 깊이가 깊어짐
- 해결
- 트리의 크기를 사전에 제한
2.5 결정 트리 파라미터
- 클래스
- DecisionTreeClassifier
- 분류
- DecisionTreeRegressor
- 회귀
- CART(Classification And Regression Trees)
- 분류, 회귀
- DecisionTreeClassifier
min_samples_split :
노드를 분할하기 위한 최소한의 샘플 데이터 수
( e.g. 최소 샘플 개수가 4개인데 샘플이 3개 밖에 없으면 더 이상 분할 하지 않고 리프노드가 된다. )
과적합 제어하는 데 사용
min_samples_leaf:
말단 노드 (leaf) 가 되기 위한 최소한의 샘플 데이터 수
비대칭적 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 이 경우에는 작게 설정 필요
max_features:
최적의 분할을 위해 고려할 최대 피처 개수
max_depth:
트리의 최대 깊이 규정
디폴트는 None → 완벽하게 크랠스 결정 값이 될 때까지 깊이를 계속 키우며 분할하
max_leaf_nodes:
말단 노드의 최대 개수
2.6 결정 트리 모델의 시각화
사이킷런의 export_graphviz() 함수 인자로 학습이 완료된 estimator, feature의 이름 리스트, 레이블 이름 리스트를 입력하면 된다.
- 리프노드
- 최종 클래스 값이 결정되는 노드
- [리프 노드가 되기 위한 조건]
- 오직 하나의 클래스 값으로 최종 데이터 구성
- 리프 노드가 될 수 있는 하이퍼 파라미터 조건을 충족
- 브랜치 노드
- 자식 노드가 있는 노드
- 자식 노드를 만들기 위한 분할 규칙 조건을 가지고 있다.

3. 앙상블 학습
앙상블 학습은 다양한 분류기의 예측 결과를 결합하여 보다 정확한 최종 예측을 도출하는 기법이다.
3.1 앙상블 학습 유형
🧡 보팅 & 배깅
배깅은 Boostrap Aggregating 의 줄임말이다.


🧡 부스팅
여러 개의 분류기가 순차적으로 학습을 수행하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 가중치를 부여하여 그 다음에는 올바르게 예측할 수 있도록 한다. 대표적으로 그래디언트 부스트, XGBoost, LightGBM 등이 있다.
3.2 보팅
보팅에 대해 먼저 자세히 알아보자. 보팅 방법으로는 하드 보팅과 소프트 보팅이 있다. 하드 보팅은 여러 분류기들의 예측값 중에서 다수의 분류기가 결정한 예측값을 최종 결과값으로 선정한다. 소프트 보팅은 분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균하여, 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정한다. 소프트 보팅이 일반적으로 사용된다.
사이킷런은 보팅 방식의 앙상블을 구현한 VotingClassifer 클래스를 제공한다.
3.3 랜덤 포레스트
랜덤 포레스트는 배깅의 대표적인 알고리즘이다. 여러 개의 결정 트리 분류기가 각자의 데이터를 샘플링해 개별적으로 학습을 수행한다.
4. 부스팅 알고리즘
- 개념
여러 개의 약한 학습기 (weak learner) 를 순차적으로 학습, 예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가는 학습 방식
- 종류
- AdaBoost
- 그래디언트 부스트
4.1 AdaBoost (에이다 부스트)

- 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 알고리즘
- 개별적인 약한 학습기 각각에 가중치를 부여하여 결합
4.2 GBM (Gradient Boosting Machine)
🗂️ 개요
- 반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법
- 가중치 업데이트를 경사 하강법 (Gradient Descent) 이용
- y: 실제 결과값
- x1,x2,… : feature
- F(x): feature에 기반한 예측 함수

- 사이킷에서 GradientBoostingClassifier 클래스 제공
🗂️ GBM 하이퍼 파라미터 및 튜닝
| 파라미터 | 의미 |
| loss | 경사 하강법에서 사용할 비용 함수 |
| learning_rate | weak learner 가 순차적으로 오류 값을 보정해 나가는 데 적용하는 계수 |
| n_estimator | weak learner의 개수 |
| subsample | weak learner가 학습에 사용하는 데이터의 샘플링 비율 |
4.3 XGBoost (eXtra Gradient Boost)
🗂️ 개요
- 트리 기반의 앙상블 학습에 이용
- GBM에 기반하지만 GBM의 단덤인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 해결
- 초기: 사이킷런과 연동되지 않는 파이썬 래퍼 XGBoost 모듈
- 후기: 사이킷런과 연동되는 사이킷런 래퍼 XGBoost 모듈
🗂️ 파이썬 래퍼 XGBoost 하이퍼 파라미터
- 조기 중간, 과적합 규제 위한 하이퍼 파라미터 추가됨
- 일반 파라미터
- booster - gbtree (tree based model) 또는 gblinear (linear model) 선택
- silent - 출력 메시지를 나타내고 싶지 않은 경우
- nthread - CPU의 실행 스레드 개수
- : 일반적으로 실행 시 스레드의 개수나 silent 모드 등의 선택
- 부스터 파라미터
- eta - GBM의 학습률 (learning rate) 와 같은 역할. 부스팅 스텝을 반복적으로 수행할 때 업데이트 된다.
- gamma - 트리의 리프 노드를 추가적으로 나눌지를 결정할 최소 손실 감소 값. 해당 값보다 큰 손실이 감소된 경우에 리프노드를 분리
- : 트리 최적화, 부스팅, regularization 등과 관련
- 학습 태스크 파라미터
- objective - 최솟값을 가져야할 손실 함수
- eval_metric - 검증에 사용되는 함수를 정의 (회귀: rmse , 분류 : error)
- : 학습 수행 시의 객체 함수, 평가를 위한 지표 등을 설정
🗂️ 사이킷런 래퍼 XGBoost
- 분류 : XGBClassifier
- 회귀: XGBRegressor
eta → learning_rate sub_sample → subsample lambda → reg_lambda alpha → reg_alpha
5. LightGBM
🗂️ 개요
- 학습에 걸리는 시간과 메모리 사용량이 적다.
- 리프 중심 트리 분할 (Leaf Wise) 방식 사용
- 트리의 균형에 맞추지 않고 최대 손실 값을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리 생성
- 학습을 반복할수록 예측 오류 손실 최소화
🗂️ LightGBM 하이퍼 파라미터
- 주요 파라미터
- num_iterations - 반복 수행하려는 트리의 개수
- learning_rate - 0에서 1사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률
- Learning Task 파라미터
- objective - 최솟값을 가져야할 손실 함수
🗂️ 튜닝 방안
- num_leaves
- 개별 트리가 가질 수 있는 최대 리프의 개수
- 개수를 높이면 정확도가 높아지지만, 반대로 트리의 깊이가 깊어지고 복잡도가 커져 과적합 영향도가 커진다.
- min_data_in_leaf → min_child_samples
- 큰 값으로 설정하면 트리가 깊어지는 것을 방지
- max_depth
- 크기의 깊이 제한
6. 스태킹 앙상블
- 개별 알고리즘의 예측 결과 데이터 세트를 최종적인 메타 데이터 세트로 만들어 별도의 ML 알고리즘으로 최종 학습을 수행하고 테스트 데이터를 기반으로 다시 최종 예측을 수행하는 방식
- 종류
- 개별적인 기반 모델
- 개별 기반 모델의 예측 데이터를 학습 데이터로 만들어서 학습하는 최종 메타 모델종류

7. 하이퍼 파라미터 튜닝
7.1 베이지안 최적화
- 목적 함수 식을 알 수 없는 형태의 함수에서 최대 또는 최소 함수 반환 값을 만드는 최적 입력값을 찾는 것
🗂️ 구성
- 대체 모델 (Surrogat Model)
- 획득 함수로부터 최적 함수를 예측할 수 있는 입력값을 추천 받은 뒤 이를 기반으로 최적 함수 모델 개선
- 획득 함수 (Acquisition Function)
- 개선도니 대체 모델을 기반으로 최적 입력값 계산
🗂️ 단계
- 랜덤하게 파라미터들을 샘플링
- 관측도니 값을 기반으로 대체 모델은 최적 함수를 추정
- 추정도니 최적 함수를 기반으로 획득함수는 다음으로 관측할 하이퍼 파라미터를 대체 모델에 전달
- 획득 함수로부터 전달된 하이퍼 파라미터를 수행하여 관측된 값을 기반으로 대체 모델 갱신
3,4 단계를 반복하면 불확실성이 개선되고 정확한 최적 함수 추정이 가능하게 된다.
7.2 HyperOpt
- 베이지안 최적화를 머신러닝 모델의 하이퍼 파라미터 튜닝에 적용할 수 있게 제공되는 파이썬 패키지 중 하나
🗂️ 단계
- 입력 변수명과 입력값의 검색 공간 설정
- 목적함수 생성
- 목적 함수의 반환값이 최소가 되는 최적의 입력값을 찾기
'AI > 파이썬 머신러닝 완벽 가이드' 카테고리의 다른 글
| 데이터 전처리 실습 with 타이타닉 생존자 예측 (0) | 2024.07.16 |
|---|---|
| 회귀 (0) | 2024.07.04 |
| 평가 (0) | 2024.05.24 |
| 사이킷런 (0) | 2024.05.24 |
| 판다스 (0) | 2024.05.24 |