머신러닝의 학습 방법은 크게 두가지 비지도학습과 지도학습으로 나누어집니다. 지도학습이란 명시적인 정답이 있는 데이터가 주어진 상태에서 하는 방법입니다. 감이 오시나요? 즉, 지도학습의 대표적 방법이 분류입니다.!
현재 다양한 머신러닝 방법으로 분류를 구현하고있습니다.
- Navie Bayes : Bayes 통계와 생성모델에 기반
- Logistic Regression : 독립변수와 종속변수의 선형 관계성
- Decision Tree : 데이터 균일에 따른 규칙기반
- Support Vector Machine : 개별 클래스 간의 최대 마진을 찾음
- Nearest Neighbor : 근접거리를 기준
- Neural Network : 심층 연결
- Ensemble : 서로 다른 머신러닝 알고리즘 연결
이처럼 다양한 방법들이 연구되어 왔습니다. 이번 시간에는 특히 Ensemble(앙상블)에 대해 집중적으로 다루어 보겠습니다.
앙상블은 위에서 설명한것처럼 서로 다른(같은) weak learner(예측성능 떨어지는학습기)들의 결합입니다. 그럼 이제 앙상블의 weak learner로 많이 쓰이는 Decision Tree에대해 알아보겠습니다.
Decision Tree
> 데이터에 있는 규칙을 자동으로 찾아내 Tree 기반 분류 규칙을 만든다. if / else 기반으로 특징을 나타낸다.
결정 노드는 정보 균일도가 높은 데이터 세트를 먼저 선택할수 있는 규칙조건을 만든다.
정보균일도 ?
> 엔트로피를 이용한 정보이득 , 지니계수를 이용해 정보균일도 측정
정보이득 - 서로다른 값이 섞여 있으면 엔트로피가 높고 같은 값이 섞이면 엔트로피가 낮습니다. 정보이득 지수는 1-엔트로피 라 정의합니다. 즉 , 정보이득이 높은 속성기준으로(같은 값이 많이 섞여있도록) 분할 합니다.
지니계수 - 다양한 값이 있을때 평등하다고 하며 0에 가깝습니다. 반대로 특정값으로 쏠릴때 불평등하다 하며 1에 가깝습니다. 1로 갈수록 균일도가 높아지므로 지니계수가 높은쪽으로 분할 합니다.
Decision Tree의 특징
> "균일도"를 기반으로해 알고리즘이 쉽고 직관적입니다. 또한 스케일링과 정규화 같은 전처리 작업이 필요없습니다. 하지만 조건들이 계속 생겨나다 보면 과적합(overfiting)될 가능성이 높아집니다. 이러한 이유때문에 결정트리의 대부분 파라미터는 과적합을 제어하는데 사용됩니다.
주요파라미터
- min_samples_split : 노드를 분할하기위한 최소한의 데이터 샘플수를 의미합니다. 이값이 작으면 작을수록 노드가 많아져 과적합 될 가능성이 높아집니다.
- min_samples_leaf : 말단노드가 되기 위한 최소한의 샘플 수를 의미합니다.
- max_features : 최적의 분할을 위해 고려할 최대 피처 개수를 의미합니다.
- max_depth : 트리의 깊이를 규정합니다.
- max_leaf_nodes : 말단 노드의 최대 개수를 규정합니다.
결정트리의 시각화 - Graphviz
자 지금까지 하나의 분류기에 대해 알아보았습니다. 그렇다면 앙상블은 어떤식으로 이러한 분류기를 결합하고 결과를 도출할까요?
Ensemble Learning
> 여러개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 예측을 도모함.
Voting & Bagging & Boosting
Voting : 말그대로 투표입니다. 여러개의 분류기가 투표를 통해 최종결과를 예측합니다. Voting은 각각 분류기가 다르지만 Bagging은 분류기가 같습니다. (Bagging의 대표적인 예 Random Forest)
Boosting : 부스팅은 여러개의 분류기가 순차적으로 학습을 수행하되 , 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 다음 분류기에다 가중치를 부여합니다.
-Voting의 유형 (Hard Voting & Soft Voting)
Hard Voting : 다수결과 비슷합니다.
Soft Voting : 각 레이블 값의 결정확률의 평균값을 도출합니다.
사이킷런에서는 보팅방식의 앙상블을 구현한 VotingClassifier 클래스를 제공합니다.
RandomForest
> 여러개의 결정트리 기반
자 여기서 랜덤포레스트방식에서 전체데이터에서 어떻게 데이터를 샘플링 할까요 ?
데이터 샘플링할때 bootstrapping이라는 방식을 사용합니다. 이방식은 여러개 데이터 세트를 중첩되게 분리하는 방식입니다.
만약 n_estimators = 3(랜덤포레스트 파라미터중 하나)이라면
다음과 같이 데이터를 샘플링 합니다.
GBM(Gradient Boosting Machine)
> 여러 weak learner를 순차적으로 학습 - 예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선. (AdaBoost , Graient Boost)
-AdaBoost 구현방식
GBM도 위와 같은 방식으로 유사하나 가중치 업데이트를 경사하강법을 이용해 업데이트합니다.
이러한 부스팅방식은 기본 파라미터만으로 좋은성능을 기대할수 있다는 장점이 있지만 수행시간이 많이 걸린다는 단점이 있습니다.
GBM의 파라미터
- loss : 경사하강법의 손실함수
- learning_rate : 학습률
- n_estimators : weak learner의 갯수
XGBoost( eXtra Gradient Boost)
> GBM의 느린 속도와 Regularization 문제를 개선한 모델입니다. GBM과 유사한 하이퍼 파라미터와 early stopping 과적합을 규제하기위한 파라미터를 추가했습니다.
XGBoost의 파라미터
> XGBoost의 파라미터의 종류는 많지만 크게 3가지로 나눌 수 있습니다.
- 일반 파라미터 : 이 파라미터들은 default값 유지하는게 좋습니다.
- 부스터 파라미터 : 트리 최적화 &규제에 관련된 파라미터들이 모여있습니다.
- 학습 태스크 파라미터 : 학습 수행시의 객체함수 , 겅능 평가 지표 파라미터입니다.
만약 과적합이 심하다면 ?
1. eta 값을 낮춰보거나
2. max_depth 낮춰보거나
3. min_child weight 높여보거나
4. gamma 높여보거나
5. subsample,colsample_bytree 값을 조정해나가면서 과적합을 해결해 봅시다.
LightGBM
> 앞에붙은 Light는 성능이 떨어져 붙은 것이 아닌 적은 학습시간을 강조한 Light입니다.!
대부분의 트리기반 알고리즘은 트리의 깊이를 효과적으로 줄이기 위해 균형트리분할(level wise) 방식을 사용합니다. 하지만 LightGBM은 리프중심분할(leaf wise)방식을 이용했습니다.
앙상블 기법의 마지막 방법입니다. 스태킹에 대해 알아봅시다.
스태킹 앙상블
> 여러 알고리즘을 결합시켜 예측 결과를 도출한다는 점에서 Bagging 과 Boosting과 유사하지만 개별 알고리즘이 예측한 데이터를 기반으로 다시 결과를 예측한다는점에서 차이가 있습니다.
스태킹 앙상블의 구현
M개의 샘플수 , N개의 특성을 가진 데이터 세트에 스태킹 앙상블 적용
CV기반 스태킹
> 과적합을 개선하기 위해 최종 메타 모델을 위한 데이터 세트를 만들때 교차검증 기반으로 예측된 데이터 세트를 이용. CV기반 스태킹은 개별모델들이 각각교차검증으로 메타모델을 위한 학습용 데이터세트와 예측용 데이터 세트를 생성.
구현과정
step 1. 각 모델별로 예측한 결과값을 바탕으로 최종 메타 모델을 위한 학습용 테스트용 데이터 생성
step 2. 스텝1에서 만든 데이터세트(학습용&테스트용)를 stacking합니다.
step1 구현
1. 학습용 데이터를 N개의 폴드로 나눈다. (예를들어 2개는 학습 폴드 , 1개는 검증폴드)
2. 이러헤 학습된 개별 모델은 검증폴드 1개로 예측하고 폴드를 바꾸면서 반복한다. 이렇게 나온 예측 데이터 세트가 메타 모델의 학습데이터 셋이 된다.
3. 한편 두개의 폴드 데이터로 학습된 개별 모델은 원본 테스트 데이터로 예측한다. 이 예측값들은 메타모델의 테스트 데이터 셋이 됩니다.
그림을 통해 설명하면 더욱 이해가 쉽습니다
지금까지 휼륭한 앙상블 알고리즘을 살펴 봤습니다. 자이제 이러한 방법들도 있겠다. 데이터분석을 시작합시다. 하지만 문제가 생겼습니다.!
데이터분석을 하다 특정데이터가 너무 적으면 어떻게 할까요? 신용카드 사기를 생각해봅시다. 일단 신용카드 사기 자체가 흔히 일어나는 일은 아닙니다. 정확한 수치는 알 수 없으나 정상적인 신용카드 거래가 1000번 일어날 동안 사기는 한두번 정도 발생될것입니다. 즉 , 이게 사기인지 아닌지 분류하는것은 정말 중요한 일이지만 애초에 데이터가 적어 제대로 분류하기 힘듭니다. 이럴때 어떻게 해야될까요?
언더샘플링 / 오버샘플링
이러한 방식은 불균형한 데이터를 해결하기위해 고안되었습니다. 주로 오버샘플링을 사용합니다. 굳이 많이 있는걸 줄일 필요는 없으니깐요
오버 샘플링 구현방법
> 동일한 데이터를 단순히 증식시키면 , 과적합이 되기 때문에 피처값들을 약간만 바꾸는 방식을 증식시킵니다. 이러한 방식으로 SMOTE 기법이 있습니다.
SMOTE
> 적은 데이터 세트에 있는 개별 데이터들의 K Nearnest Neighbor을 찾아서 데이터와 k개 이웃들의 차이를 일정한 값으로 만들어 기존 데이터와 약간 차이가 나는 새로운 데이터를 생성한는 방식입니다.
이로써 이번장에서 앙상블학습의 기본적인 학습 방식과 불균형한 데이터를 만났을때의 대처방법까지 알아보았습니다.!
'DNN > 머신러닝' 카테고리의 다른 글
군집화 ( k-means , 군집 평가 , 평균이동 , GMM , DBSCAN) (0) | 2021.07.22 |
---|---|
회귀 [일반선형,릿지,라쏘,엘라스틱 넷, 로지스틱회귀] (0) | 2021.07.22 |
성능지표 / 평가 (0) | 2021.06.25 |
사이킷런으로 타이타닉 생존자 예측 (0) | 2021.06.23 |
붓꽃 품종 예측 , 사이킷런 , Model Selection , 데이터 전처리 (0) | 2021.06.23 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!