코드 리뷰
분류
분류(Classification)
- 학습 데이터로 주어진 데이터의 피처와 레이블값(결정 값, 클래스 값)을 머신러닝 알고리즘으로 학습해 모델을 생성하고, 이렇게 생성된 모델에 새로운 데이터 값이 주어졌을 때 미지의 레이블 값을 예측하는 것
- 지도 학습의 대표적인 유형
- 기존 데이터가 어떤 레이블에 속하는지 패턴을 알고리즘으로 인지, 새롭게 관측도니 데이터에 대한 레이블을 판별
분류를 구현할 수 있는 알고리즘
- 베이즈 통계와 생성 모델에 기반한 나이브 베이즈
- 로지스틱 회귀
- 결정 트리
- 서포트 벡터 머신
- 최소 근접 알고리즘
- 신경망
- 앙상블
분류는 예측하고자 하는 값이 범주형 변수인 경우, 연속되지 않은 이산적 카테고리 구분 문제에 쓰임
회귀는 예측하고자 하는 값이 실수인 경우, 연속된 값 예측 문제에 쓰임
결정 트리
- 데이터에 있는 규칙을 학습을 통해 찾아내 트리 기반 분류 규칙을 만드는 것
- 데이터를 어떻게 분할할지 결정하는 기준이 모델의 성능을 결정짓는 핵심 요소임
- 깊이가 깊어지면 과적합으로 이어질 수 있고 예측 성능이 떨어짐
- 최대한 균일한 데이터 세트를 구성하도록 분할 필요

결정 트리의 장점
- ML 알고리즘 중 직관적이며 이해가 쉬움
- 데이터 사전 가공의 영향이 매우 적음
- 시각화가 가능하여 분류 과정을 이해하기 쉬움
- 범주형/수치형 데이터를 모두 처리 가능함
결정 트리의 단점
- 예측 성능 향상을 위한 규칙을 추가할수록, 복잡한 학습 모델이 되고 유연성이 떨어짐
- 과적합에 취약함
- 선형 관계 모델링에 제한적
정보 균일도 : 데이터 세트 내의 데이터가 얼마나 일관된 값을 가지는 지 나타내는 척도
결정 노드는 정보 균일도가 높은 데이터 세트를 먼저 선택하도록 조건을 만든다.

정보 이득 지수 (Information Gain)
- 주어진 데이터 집합의 혼잡도를 의미하는 엔트로피를 기반으로 함
- 정보 이득 지수 = 1-엔트로피 지수
- 결정 트리는 정보 이득이 높은 속성을 기준으로 분할
- 정보 이득이 높음 = 엔트로피가 낮음 = 같은 값이 많음
지니 계수
- 원래 경제학에서 불평등 지수를 나타낼 때 사용하는 계수
- 0이 가장 평등, 1로 갈수록 불평등
- 지니 계수가 낮은 속성을 기준으로 분할
결정 트리 생성 과정 : DecisionTreeClassifier

정보균일도가 높은 데이터 세트로 분할되는 조건을 찾아 서브 데이터 세트를 만들고 다시 서브 데이터 세트에서 위 방식을 반복하는 방식으로 데이터 값을 예측함.
DecisionTreeClassifier(criterion, splitter, max_depth, min_samples_split, min_samples_leaf, min_weight_fraction_leaf, max_features, random_state, max_leaf_nodes, min_impurity_decrease, class_weight)
| min_samples_split | 노드를 분할하기 위한 최소한의 샘플 데이터 수 과적합 제어 default:2 작게 설정할수록 분할되는 노드↑ → 과적합 가능성↑ |
| min_samples_leaf | 리프 노드가 되기 위한 최소한의 샘플 데이터 수 과적합 제어 비대칭적 데이터의 경우 특정 클래스의 데이터가 작을 가능성 O → 작게 설정 |
| max_features | 최적의 분할을 위해 고려할 최대 피처 개수 (default: none, 모든피처를사용해분할) Int 형: 대상 피처의 개수/ float 형: 전체 피처 중 대상 피처의 퍼센트 sqrt : 전체 피처중 sqrt(전체 피처 개수), ‘auto’로 지정하면 sqrt와 동일 log 는 전체 피처중 log2(전체 피처 개수) 선정 |
| max_depth | 트리의 최대 깊이를 규정 default: none, 완벽히 클래스 결정값이 될 때까지 계속 분할 노드가 가지는 데이터 수가 min_samples_split보다 작아질 때까지 계속 깊이를 증가시킴 *과적합 주의, 적절한 값으로 제어 필요 |
| max_leaf_nodes | 리프 노드 최대 개수 |
결정 트리는 Graphviz 패키지를 사용해 시각적으로 나타낼 수 있음

하이퍼 파라미터 조절에 따른 결정 트리 변화 : max_depth, min_samples_slit, min_samples_leaf 조절을 통해 과적합을 방지할 수 있음
.feature_importances_
- 결정 트리 알고리즘이 학습을 통해 규칙을 정하는 데 있어 피처의 중요한 역할 지표 제공
- 피처가 트리 분할시 정보 이득 또는 지니 계수를 얼마나 효율적으로 개선시켰는지를 정규화된 값으로 표현
결정 트리 과적합


이상치에 크게 반응하지 않으면서 좀 더 일반화된 분류 규칙에 따라 분류된 2번째 결정 트리가 더욱 예측 정확도가 높음
앙상블 학습
앙상블 학습
- 여러 개의 분류기를 생성하고 그 예측을 결합해 보다 정확한 최종 예측을 도출하는 기법
- 다양한 분류기의 예측 결과를 결합해 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것이 목표
- 정형 데이터 분류 시에 딥러닝보다 뛰어난 성능을 나타냄
보팅
- 여러 개의 다른 알고리즘을 가진 분류기가 투표를 통해 예측 결과 결정
- 같은 데이터 학습, 예측한 결과로 투표
배깅
- 여러 개의 같은 알고리즘을 가진 분류기가 투표를 통해 에측 결과 결정
- 부트스트래핑 분할 방식으로 다른 데이터 세트 학습 : 원본 학습 데이터를 샘플링해 개별 분류기에 할당
- 데이터 세트 간 중첩 허용
부스팅
- 여러 개의 분류기가 순차적으로 학습 수행, 앞에서 예측 틀린 데이터에 대해 다음 분류기에게 가중치 부여하면서 학습과 예측 진행
- 그래디언트 부스트, XGBoost, LightGBM
스태킹
- 여러 가지 다른 모델의 예측 결괏값을 다시 학습 데이터로 만들어 다른 모델로 재학습시켜 결과 예측

보팅 유형에는 하드 보팅과 소프트 보팅이 있음

사이킷런은 보팅 방식의 앙상블을 구현한 VotingClassifier 클래스를 제공함
랜덤 포레스트
랜덤 포레스트 : 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정

부트스트래핑 분할 방식 : 여러 개의 데이터 세트를 중첩되게 분리하는 것
사이킷런은 RandomForestClassifier 클래스를 제공
랜덤 포레스트의 하이퍼 파라미터 튜닝
- n_estimator : 결정 트리의 개수. 많이 설정할수록 좋은 성능을 기대할 수 있으나 계속 증가시킨다고 무조건 향상되는 것은 아님
- max_features : 최적의 분할 위해 고려할 최대 피처 개수
- max_depth, min_samples_leaf, min_samples_split
GBM
부스팅 알고리즘 : 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식
AdaBoost
오류 데이터에 가중치 부여하면서 부스팅 수행
약한 학습기가 순차적으로 가중치를 부여, 모두 결합해 예측 수행

GBM
가중치 업데이트를 경사 하강법을 이용함

오류식 : h(x) = y - F(x)
경사 하강법 : 오류식을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트 하는 것
사이킷런은 GBM 기반의 분류를 위해서 GradientBoostingClassifier 클래스를 제공
일반적으로 GBM이 랜덤 포레스트보다 예측 성능이 조금 뛰어나지만, 오래 걸리고 하이퍼 파라미터 튜닝 노력도 더 필요함
GBM의 하이퍼 파라미터
- loss : 경사 하강법에서 사용할 비용 함수 지정
- learning_rate : GBM이 학습을 진행할 때 마다 적용하는 학습률, weak learner가 순차적으로 오류값을 보정하는 데 적용
- n_estimators : weak learner의 개수, 커질수록 예측 성능이 좋아짐
- subsample : weak learner가 학습에 사용하는 데이터의 샘플링 비율, 과적합이 염려될 경우 1보다 작은 값으로 설정
'AIchemist' 카테고리의 다른 글
| [5주차] 회귀 (선형 회귀/과적합/과소적합/릿지/라쏘/엘라스틱넷/로지스틱/회귀트리) (0) | 2024.10.07 |
|---|---|
| [4주차]분류(2) (XGBoost/LightGBM/베이지안 최적화/스태킹 앙상블) (0) | 2024.09.30 |
| [3주차] Discuss Question (0) | 2024.09.23 |
| [2주차] Discussion Question (0) | 2024.09.08 |
| [2주차] 평가 (정확도 / 이진 분류 / 정밀도 / 재현율 / F1 / ROC AUC) (2) | 2024.09.08 |