데이터분석 study/ML_ 심화

TIL_24.08.28_회귀, 분류 모델링 심화

justdata 2024. 8. 28. 17:35

의사결정나무와 랜덤 포레스트

 

  ● 의사결정나무(Decision Tree, DT)

      - 의사결정규칙을 나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로

        분류하거나 예측을 수행하는 분석 방법

 

      - 루트노드(Root Node) : 의사결정나무의 시작점. 최초의 분할 조건

      - 리프노드(Leaf Node) : 루트 노드로부터 파생된 중간 혹은 최종 노드

      - 분류기준(criteria) : sex는 여성인 경우 0, 남성인 경우 1로 인코딩 

                                     여성인 경우 좌측 노드로, 남성인 경우 우측 노드로 분류.

 

      - 불순도(impurity)

          ○ 불순도 측정 방법 중 하나인 지니 계수는 0과 1사이 값으로 0이 완벽한 순도

              (모든 샘플이 하나의 클래스), 1은 완전한 불순도 (노드의 샘플이 균등하게 분포)

              됨을 나타냄

 

            리프 노드로 갈수록 불순도가 작아지는(한쪽으로 클래스가 분류가 잘되는)

              방향으로 나무가 자람

 

      - 샘플(samples) : 해당 노드의 샘플계수(891개의 관측치)

      - 값(value) : Y변수에 대한 배열, 549명이 죽었고(Y=0), 342명이 살았음(Y=1)

      - 클래스(class)

         ○ 가장 많은 샘플을 차지하는 클래스를 표현

         ○ 위에서는 주황색(Y=0 다수), 파란색( Y=1 다수)를 표현 

 

● 의사결정나무 정리

   - 장점

      ○  쉽고 해석하기 용이

      ○  다중분류와 회귀에 모두 적용이 가능

      ○  이상치에 견고하며 데이터 스케일링이 불필요

          (데이터의 상대적인 순서를 고려해서)

 

  - 단점

      ○ 나무가 성장을 너무 많이 하면 과대 적합의 오류에 빠질 수 있다.

      ○  훈련 데이터에 민감하게 반응하여 작은 변화인 노이즈에도 나무의

          구조가 크게 달라짐(불안정성) 

 

  -  Python 라이브러리

      ○  sklearn.tree.DecisionTreeClassifier

      ○  sklearn.tree.DecisionTreeRegressor

 

 

● 랜덤 포레스트 

   - 의사결정나무는 과적합과 불안정성에 대한 문제를 보완하기 위해 

      나무(tree)를 여러 개 만들어 숲(Forest)를 만드는 것

 

    ○ 배깅(Bagging)의 원리

       - 언제나 머신러닝은 데이터의 부족이 문제

       - 이를 해결하기 위한 Bootstrapping + Aggregating 방법론 

            Bootstrapping : 데이터를 복원 추출해서 유사하지만 다른 데이터 집단을 생성

          ○  Aggregating : 데이터의 예측, 분류 결과를 합치는 것 

            Ensemble(앙상블) : 여러 개의 모델을 만들어 결과를 합치는 것

 

                 * Bootstrap은 '자기 스스로 해낸다' 의 뜻의 유래를 가지고 있으면서, 영단어로는 부츠 신발의

                    끈을 의미, 

                    데이터를 복원 추출한다는 것을 뜻하며, 이렇게 생성한 데이터 샘플들은 모집단의 분포를

                    유사하게 따라가고 있으니 다양성을 보장하면서 데이터의 부족한 이슈를 해결

 

       ○ Tree를 Forest로 만들기

           - 여러 개의 데이터 샘플에서 각자 의사결트리를 만들어서 다수결 법칙에 따라 결론을 냄

             ex) 1번 승객에 대해서 모델 2개는 생존, 모델 1개는 사망을 분류했다면, 1번 승객은 최종적으로

                   생존으로 분류

           

 

        ● 랜덤 포레스트 정리

          ○ 장점

              - Bagging 과정을 통해 과적합을 피할 수 있다.

              - 이상치에 견고하며 데이터 스케일링이 불필요

              - 변수 중요도를 추출하여 모델 해석에 중요한 특징을 파악할 수 있다.

 

         ○ 단점

             - 컴퓨터 리소스 비용이 크다

             - 앙상블 적용으로 해석이 어려움

 

        ○ Python 패키지

           - sklearn.ensemble.RandomForestclassifer

           - sklearn.ensemble.RandomForestRegressor

 

▶ KNN(K-Nearest Neighbor) 최근접 이웃 알고리즘 

     - 주변 데이터 k개를 선정 후에 거리 기준으로 가장 많은 것으로 예측

 

              ex) k = 3이라면 별 1개와 세모 2개이므로 '?' 는 세모로 예측될 것

                    k = 7이라면 별 4개와 세모 3개이므로 '?' 는 별로 예측될 것

    

 

▶ 하이퍼 파라미터의 개념

    ● 파라미터(Parameter) :  머신러닝 모델이 학습 과정에서 추정하는 내부 변수

                                           자동으로 결정되는 값

 

    ● 하이퍼 파라미터 (Hyper Parameter)

        데이터 과학자가 기계 학습 모델 훈련을 관리하는데 사용하는 외부 구성 변수

        모델 학습 과정이나 구조에 영향을 미침

 

▶ KNN 모델의 정리

    ○ 장점

       - 이해하기 쉽고 직관적

       - 모집단의 가정이나 형태를 고려하지 않음

       - 회귀, 분류 모두 가능함

 

    ○ 단점

      - 차원 수가 많을수록 계산량이 많아짐

      - 거리 기반의 알고리즘이기 때문에 피처의 표준화가 필요함

 

    ○ Python 라이브러리

       - sklearn.neighbors.KNeighborsClassifier

       - sklearn.neighbors.KNeighborsRegressor

 

 

▶ 부스팅 (Boosting)알고리즘

    : 여러 개의 약한 학습기(Weak learner)를 순차적으로 학습하면서 

      잘못 예측한 데이터에 가중치를 부여하여 오류를 개선해나가는 학습방식

 

      * 빨간색과 초록색을 분류하는 문제의 경우 1개의 선(learner)으로 구별되지 않는 경우가 있다.

         이를 통해 여러 개의 learner를 합친 ensemble을 통해 성능을 올리는 방법

 

 

    ● 부스팅 알고리즘 종류

      ○ Gradient Boosting Model

 

          특징 : 

                   - 가중치 업데이트를 경사하강법 방법을 통해 진행

   

          Python 라이브러리

            - sklearn.ensemble.GradientBoostingClassifier

            - sklearn.ensemble.GradientBoostingRegressor

 

      ○ XGBoost

 

          특징:

                - 트리기반 앙상블 기법으로, 가장 각광 받으며 Kaggle의 상위 알고리즘

                - 병렬학습이 가능해 속도가 빠름

 

          Python 라이브러리 :

                - xgboost.XGBRegressor

                - xgboost.XGBClassifier

 

      ○ LigntGBM

  

          특징 : 

                 - XGBoost와 함께 가장 각광받는 알고리즘

                 - XGBoost보다 학습시간이 짧고 메모리 사용량이 작음

                 - 작은 데이터(10,000건 이하)의 경우 과적합 발생

 

          Python 라이브러리 : 

                 - lightgbm.LGBclassifier

                 - lightgbm.LGBRegressor