Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

데이터분석 공부하기

[핸즈온/완벽가이드] 분류(Classification) 본문

머신러닝

[핸즈온/완벽가이드] 분류(Classification)

Eileen's 2021. 9. 27. 21:20

-머신러닝 완벽가이드-

[분류; Classification]

-지도학습의 대표적인 유형으로 레이블값(결정 값, 클레스 값)을 ML알고리즘으로 학습해 모델 생성 -> 미지의 레이블 값 예측

-다양한 ML알고리즘으로 구현가능 : 나이브 베이즈, 로지스틱 회귀,결정 트리, SVM, 최소 근접, 신경망, 앙상블

 

1. 결정트리 (Decision Tree):

-트리(tree) 기반으로 if/else를 자동으로 찾아내 예측을 위한 규칙을 만드는 알고리즘(스무고개와 유사)

-구성 : 규칙 노드(Decision Node: 규칙 조건), 리프 노드(Leaf Node: 결정된 class 값), 서브 트리(Sub Tree: 새 규칙 조건마다 생성)

-특징 :
      -장점: 1) 쉽고/직관, 2)시각화 표현 가능(graphvis), 3)피처 스케일링/정규화 등 전처리 작업 필요없음(균일도만 중요);

      -단점: 1) 과적합(사전 튜닝 필요)

-핵심 : 과적합을 피하기 위해 '가능한 적은 결정 노드로 높은 예측 정확도'를 이루는 것이 중요

-방법 : 최대한 균일한 데이터 세트를 구성하는 분할 (1. 정보이득(1-엔트로피), 2. 지니 계수)

      *) 균일한 데이터 세트 -> 동일 값 데이터가 많은 세트를 의미. 

      *) 지니/엔트로피 계수가 '낮을 수록' 균일한 데이터이므로, 정보이득(1-엔트로피)는 높거나/ 지니 계수는 낮은 속성으로 분할

-sklearn DecisionTreeClassifier

     -Parameter : min_samples_split, min_samples_leaf, max_features, max_depth, max_leaf_nodes (p.188) 

     -feature 중요도 체크 : feature_importances_(ndarray형태로 반환)

 

2. 앙상블 학습 (Emsemble Learning):
-여러 분류기(Classifier)를 생성하고 그 예측을 결합하여 보다 정확한 최종 예측을 도달하는 기법

-유형 : 
1) 보팅(Voting; VotingClassifier): 서로 다른 알고리즘을 가진 분류기를 결합-> 투표로 최종 예측 결과 결정;
     -일반적으로 하드 보팅보다 소프트 보팅의 성능이 더 우수하여 소프트 보팅 사용

     -Hard Voting : 다수결 원칙; 예측 결과값 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과 값으로 선정
     -Soft Voting: 분류기들의 레이블 값 결정 '확률'을 더하고 이를 평균하여 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정

2) 배깅(Bagging) : Bootstrap Aggregation의 준말로, 같은 유형의 ML알고리즘으로 학습하지만,
                                Bootstraping방법으로 추출된 서로 다른 데이터 샘플링으로 학습을 수행한 후 보팅(soft voting)을 수행.
                               *) Bootstraping 분할 방식: 여러 개의 데이터 세트를 중첩되게 분리(서브세트의 데이터 건수 = 전체 데이터 건수)
    -대표 알고리즘 : 랜덤포레스트(Random Forest, RandomForestClassifier)
               -장점 : 결정 트리로 직관적인 장점 보유; 앙상블 알고리즘 중 비교적 빠른 수행 속도; 다양한 영역에서 높은 예측 성능 

3) 부스팅(Boosting) : 여러 약한 학습기(weak learner)를 순차로 학습-예측, 잘못 예측한 데이터에 가중치 부여 -> 오류 개선하며 학습
    -대표 알고리즘 :

           1. AdaBoost(Adaptive Boosting);
           2. GBM(Gradient Boost Machine; GradientBoostingClassifier; 가중치 업데이트(gradient descent)를 경사 하강법 이용)
               - 장점 : GBM이 Random Forest보다 예측 성능이 조금 더 뛰어난 경우가 많음, 과적합에 가장 뛰어난 예측 성능을 가짐;
               - 단점 : 긴 수행 시간(순차적 예측 오류 보정으로 병렬 처리 지원 X)/ 하이퍼 파라미터 튜닝 노력 필요(과적합 규제X)

           3. XGBoost(eXtra Gradient Boost; XGBClassifier) : 트리 기반 앙상블 알고리즘, GBM베이스
              - 장점 : 분류에서 다른 ML보다 뛰어난 예측 성능; GBM보다는 빠른 수행 시간(병렬 학습 가능), 과적합 규제(Regularlization), 
                           Tree Pruning; 자체 내장 교차 검증; 결손값 자체 처리
              - 단점 :
          4. LightGBM(LGBMClassifer):
              - 기존의 균형트리 분할(Level Wise)방법이 아닌 리프 중심 트리 분할(Leaf Wise)을 사용
                -> 최대 손실 값(max delta loss)을 가지는 리트 노드를 지속적으로 분할 -> 비대칭적 규칙 트리 생성 
             - 장점 : XBboost보다도 빠른 학습 시간, 더 적은 메모리 사용량, XGBoost와 유사한 예측 성능;
                       카테고리형 피처의 자동 변환/최적 분할(원-핫 인코딩 등 사용 없이 최적으로 변환, 이에 따른 노드 분할 수행)
             - 단점 : 작은 데이터(10,000건 이하)에 적용시 과적합 발생이 쉬움
    

 

 

 

 

4) 스태킹(Stacking): 한 알고지름

 

 

 

 

*Q&A:

-GridSearchCV:

verbose=0(default): 수행 결과 메시지 출력안함 

verbose=1: 간단한 메시지 출력

verbose=2: 하이퍼 파라미터별 메시지 출력

 

-VotingClassifier-hyper parameter tuning for each classifier :  https://stackoverflow.com/questions/46580199/hyperparameter-in-voting-classifier

 

-Why random_state in DecisionTreeClassifer, GradientBoostingClassifier?

https://stackoverflow.com/questions/39158003/confused-about-random-state-in-decision-tree-of-scikit-learn