We-Co

[부스트캠프 AI Tech 준비과정] - 2주차 본문

[부스트캠프 AI Tech 준비과정] 2회차

[부스트캠프 AI Tech 준비과정] - 2주차

위기의코딩맨 2024. 5. 3. 12:35
반응형

안녕하세요. 위기의 코딩맨입니다.

벌써 해당 과정이 2주차가 마무리되고있습니다.

 

실질적으로 모든 주의 강의들이 오픈되어있어서 먼저 진행하시는 분들도 계실것 같은데

저는 일단 주를 따르면서 진행하고 있습니다. 

본업도 있기에..ㅎㅎㅎ

 

이번 2주차에선 공부한 내용을 정리하면서 강의를 들었습니다.

크게 Feature, 하이퍼 파라미터, 앙상블에 대해서 정리하고

코드 실습을 진행했습니다.

 

[ 2주차 내용 ]

2주차때 공부한 내용을 정리해보도록  하겠습니다.

 

Feature - 원본 데이터로써 도메인 지식 바탕으로 문제의 해결과 모델에 적합한 형식으로 변환하는 작업, 타겟 레이블들이 차이가 심한 것이 모델에서 사용하기 좋은 Feature, 중요도를 자세하게 나타낼수있습니다.

 

Ex) Total-sum-Feature, Quantity-sum-Feature, Price-sum-Feature, Total-count-Feature, Quantity-count Feature, Price-count Feature

 

예로 보여준것과 같이 Sum, count, std, max, skew 함수를 사용해서 새로운  Feature를 생성하고 사용합니다.

 

Cross Validation Out Of Fold Prediction

데이터를 여러개로 나눠서 성능 측정, 5개를 앙상블한 효과를 기대

 

LightGBM Early Stopping

iteration 통해 반복학습이 가능한 모델로 validation 성능 측정을 통해 validation 성능이 가장 좋은 하이퍼 파라미터에서 학습을 조기 종료하는 방법

 

Feature 중요도란?

타겟 변수를 예측하는데 얼마나 유용한지에 따라 피처에 점수를 할당해서 중요도를 측정 방법을 의미합니다.

크게 2가지 방식이 존재 합니다.

Model-specific vs Model-agnostic

머신러닝 모델 자체에 중요도를 계산이 가능하다면 Model-specific

모델에서 제공하는 기능에 의존하지 않고 모델을 학습 , 적용되는 중요도 계산법은 Model-agnostic

 

 

중요도를 계산하는 기법

 

Boostng Tree

LightGBM - Training된  LightGBM 모델 클레스에서 feature, importance 함수로 피처 중요도 계산 기능을 제공

Split(트리를 만들어서 어떤 피처를 많이 사용되었는지), gain 함수 사용

 

XGBoost 피처 중요도 함수

Training된  XGBoost 모델 클레스에서 get_score 함수로 피처 중요도 계산 기능을 제공, return 형식은 dict

Weight, gain, cover, total_gain, total_cover

 

CatBoost 

Training  CatBoost 모델 클레스에서 get_feature_importance(type) 함수로 피처 중요도 계산 기능을 제공

 

 

Permutation 피처 ( 신뢰할만함 )

피처에 대한 값들을 랜덤으로 셔플링해서 모델에 대한 Erorr 를 측정하여 해당 차이로 중요도를 계산

Input - model, feature, error 인자로 받음

 

 

 

Feature Selection(피처 선택)이란?

  • 머신러닝 모델에서 사용할 피처를 선택하는 과정
  • 머신 러닝 모델이 타겟 변수를 예측하는데 유용한 피처와 유용하지 않은 피처를 구분해서 피처를 선택하는 과정
  • 오버피팅 방지, 성능 향상
  • Filter method(통계적인 데이터로 선택하는 방식, 빠름 전처리로 많이 사용됨), wrapper method(예측 모델을 사용해서 테스트하는 방법 ), embedded method(2가지 장점을 모은 방법)

 

 

하이퍼 파라미터 튜닝이란?

학습 과정에서 컨트롤하는 Value이면서 사람이 직접 수정하고 건드려야하는 값, 파라미터는 학습 과정에서 변화하는 값을 의미합니다.

  1. Manual Search - 자동화 하지않고 매뉴얼하게 사람이 직접 테스트해보는 방식
  2. Grid Search - 가능한 하이퍼 파라미터를 모두 테스트하여 기능이 좋은것을 찾아내는 방식, 효율적이지 않음
  3. Random Search - 말그대로 탐색 가능한 파라미터를 랜덤하게 가져와서 테스트하는 방법, 효율적임
  4. Bayesian Qptimization - 대부분 방식을 사용, 처음에는 랜덤하게 파라미터를 찾고, 이전 성능을 집중적으로 탐색해서 해당 구간의 파라미터를 찾음, 진행할수록 성능이 좋아짐

Optuna

오픈소스 하이퍼 파라미터 튜닝 프레임워크, 

하이퍼 파라미터 저장 기능, 시각화 기능 간단하게 사용 가능

  1. Eager Search Spaces
  2. State-of-the-art 알고리즘

 

앙상블이란?

  • 단일 알고리즘보다 적당한 알고리즘을 여러개 조합하여 단일 알고리즘보다 성능 향상을 기대하며 사용하는 기법 특정한 알고리즘이 여러 문제에서 항상 좋은 결과를 얻는건 아니므로 조합의 연구가 필요함
  • 여러개의 결정트리(Decision Tree)를 결합하여 하나의 결정트리보다 좋은 성능을 내는것여러개의 Weak Classifier(분류기)를 결합하여 Stron Classifier를 만드는 과정

종류

  • Bagging - 훈련 세트에서 중복을 허용하여 샘플링하여 오버피팅을 방지, 같은 알고리즘 내에서 다른 Sample 조합을 사용
  • Voting - 여러개의 분류기가 투표를 진행하여 결정하는. 방식, Voting은 다른 알고리즘과 조합하여 진행, 데이터셋은 하나
  1. Hard voting - 다수결 원칙
  2. Soft Voting - 분류기의 레이블 값 결정 확률을 더하고 평균을 내서. 가장 높은 것으로 결과값으로 선정
  • Boosting - 여러개의 분류기가 순차적으로 학습을 진행하는 (가중치 부여) 주로 사용됨
  • Stacking - 여러 모델을 활용해서 결과를 도출하고 결과를 합쳐서 하나의 결과로 도출, 오버피팅 위험, 현실적으로는 사용이 어려움

 

Tree 알고리즘

Decision Tree - 해당 노드 안에서 섞여있는 정도가 높을수록 복잡성이 높고, 덜 섞여 있을수록 복잡성이 낮다.

  1. Gini Index -  출순도를 측정하는 지표
  2. Graphviz - 모델을 시각화

XGboost - Gradient Bossting에서 Regularization term을 추가한 알고리즘, Loss Function을 지원하여 task에 따른 유연한 튜닝이 가능

LightGBM - XGboost의 트리의 깊이를 줄이고 균형있게 만들기 위해 root 노드와 가까운 노드를 우선적으로 순회, Loss 변화가 가장 큰 노트에서 분할하여 수직 성장 방식

  1. GOSS : 작은 기울기를 갖는 데이터 객체들은 일정 확률로 랜덤하게 제거
  2. EFB : 변수 개수를 줄이기 위해 상호 베타적인 변수들을 묶는 기법

CatBoost - 순서형 원칙을 제시

TabNet -  순차적인 어텐션을 사용하여 의사 결정 단계에서 추론할 특징을 선택하여 학습 능력이 가장 두드러진 특징을 사용함

 

 

이론적으로도 강의를 듣고, 코드 실습으로 진행이 되는데

코드 실습부분도 주석이나 설명이 잘되어있어서 어려움 없이 진행이 되었습니다.

그리고 코치에게 리뷰 받을수 있는 테스트가 있더라구요! 

아직 결과가 나오진 않았지만 기대됩니다! 크크

 

여기까지가 2주차때 배운것을 간단하게 정리한 내용입니다.

주로 데이터의 연관성 파악과 Feature, 데이터의 중요도 파악을 중점으로 공부가 진행되었습니다.

3주차부턴 수학적인 것들이 나오니 저는 너무 기대됩니다.

항상 궁금했던 부분을 공부하게됩니다!!

 

반응형