[AI스쿨 7기, 9주차] 선형회귀, 그라디언트 부스팅 트리 모델, 경사하강법, learning rate, epoch, residual, squared loss, 엑스트라 트리 모델, 접착어, XGBoost, lightgbm, GOSS, EFB, CatBoost, GPU

hyemin·2022년 11월 16일

멋쟁이사자처럼

목록 보기
30/51

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

221116

✅0801 실습파일

인코딩

사이킷런으로 인코딩 하면 더 복잡한데, 장점은 numpy와 pandas 데이터를 다루는 연습을 해보기에 좋다.

학습용 데이터, 검증용 데이터

  • Hold-out-validation을 사용할 예정
  • train, valid를 train_test_split 기능으로 나눌 예정
  • valid를 만드는 이유는, 제출해 보기 전에 어느 정도의 스코어가 나올지 확인해 보기 위해서.
  • cross validation말고 hold-out-validation을 사용하는데, 속도가 cross validation에 비해 빠르기 때문

선형회귀

2차, 3차 다항식 등 차수를 두면 변곡점이 생긴다.
polynomial에서 배운 차수
🔥 선형회귀는 이상치의 영향을 크게 받는다.
선형회귀보다 트리계열 모델을 사용하면 같은 데이터셋임에도 훨씬 나은 성능을 보여준다.
현재 데이터셋에는 이상치도 포함되어 있다.
회귀모델은 이상치에 민감하기도 하고, 다른 수치데이터에 전처리가 많이 필요하다.
선형 회귀의 장점은 간단하고 이해하기 쉽다.
선형회귀에 맞는 데이터셋을 사용하면 좋은 성능을 낼 수 있다.

train, valid, test -> train_test_split은 train, test만 나눈다.
train을 다시 train, valid로 나눠주기도 한다.


✅ 0802실습파일, 13번 강의파일

목적 : 다른 트리모델을 사용해 보는 것

이상치 제거

  • x를 index, y축에는 y 값을 넣고 scatterplot을 그려보면 이상치가 하나 보여서 제거해준다.

학습, 검증 세트

학습을 더 많이 시키기 위해 test_size = 0.1

그래디언트 부스팅 트리 모델

  • 실수를 보완해나가는 알고리즘
  • 이전 트리에서 틀렸던 부분에 가중치를 주며 학습
  • Q. 그림에서 보이는 배깅과 부스팅의 차이?
    • 배깅 : 데이터셋 모델마다 독립적
    • 부스팅 : 앞 모델이 데이터셋 정해줌'
  • Q. 왜 그라디언트라는 용어가 모델 이름에 다 들어갈까?(GBM, XGBoost, LightGBM)
    • Gradient 개념은 딥러닝에서도 사용할 예정
    • 기울기. 가중치 업데이트 할 때 경사하강법(gradient descent) 사용해서.
  • Q. Gradient(경사, 기울기)는 어떻게 사용할까?
    • 손실함수(예측값과 정답값의 차이) 그래프에서 가장 낮은 지점으로 경사를 타고 하강.
    • 그라디언트는 오차를 측정할 때 사용.
  • 오차가 최소가 되는 지점을 찾아가기 위한 스텝이 learning step
    • learning rate는 학습률을 의미하는데 보폭이라고 하기도 한다.
    • 보폭이 너무 크면 대충 찾기 때문에 최소점을 지나칠 수도 있다.
    • 보폭이 크냐 작냐에 따라서 학습의 속도가 달라진다.
    • learning rate가 크면 발산 그래프
    • epoch == n_estimators와 같은 개념
    • 부스팅 트리에서 n_estimators 는 몇 번째 트린인지를 의미
    • epoch는 학습 횟수
  • residual 잔차
    • 오차 : 모집단의 회귀식에서 예측된 값 - 실제 관측값
    • 잔차 : 표본집단의 회귀식에서 예측된 값 - 실제 관측값
  • Q. 성능 고려 없이 GBM에서 훈련시간을 줄이려면 어떻게 하면 좋을까?
    • 학습률을 올린다. 하강 보폭을 늘린다.
  • Q. GBM은 왜 랜덤포레스트와 다르게 무작위성이 없을까?
    • 순차적으로 추출하기 때문
    • 이전 오차를 보완해서 순차적으로 만들기 때문에 무작위성이 없다.
  • MAE를 설명할 때 말했던
    • Q. 왜 absolute loss 는 지원하지만 squared loss를 더 많이 사용할까?
    • 기울기의 차이가 없어서
    • 기울기가 +, - 방향에 따라 같은 기울기가 나오기 때문에 방향은 알 수 있지만
    • 기울기가 같아서 미분을 했을 때 방향에 따라 같은 미분값이 나와서 기울기가 큰지, 작은지 비교할 수 없다.
    • 그래서 sqaured loss를 더 많이 사용한다.
  • subsample == max_features 비슷한 느낌
  • gbt_score : 기본적으로 r^2 score로 나온다.

엑스트라 트리 모델

  • Extremely Randomized Tree 극도로 무작위화 된 모델
  • 랜덤포레스트처럼 무작위 하위집합이 사용되지만, 차별적인 임계값을 찾는 대신, 임계값이 무작위로 그려지고 그 중 가장 좋은 것이 분할 규칙으로 선택된다.
  • 약간 더 큰 편향 증가를 희생시키면서 모델의 분산을 조금 더 줄일 수 있다.
  • 특징
    • 분기 지점을 랜덤으로 선택하기 때문에 랜덤포레스트보다 빠르다.
    • 위의 이유로 랜덤포레스트보다 더 많은 특성을 고려한다.
    • 랜덤포레스트와 많은 특징을 공유
    • 랜덤포레스트보다 성능이 미세하게 우위

✅0803번 실습파일

Q. 왜 부스팅 계열 모델이 설치가 잘 되기도 하지만 설치에 실패하는 경우가 생길까?
의존성
다른 언어로 작성되었는데 파이썬 wrapper API를 제공하고 있다.

Q. 이와 관련된 파이썬의 별명은?
접착어
구동하려면 다른 언어 환경이 함께 필요한 경우가 많다. 기존에 다른 도구를 설치하다가 해당 언어 환경 도구를 설치해놨으면 비교적 설치가 잘 되지만, 처음 설치할 때는 실패하는 경우가 많다.
콘다는 패키징이 잘 되어 있는 편이라 관련된 환경을 구성해준다. 그래서 되도록 콘다로 설치하는 것을 추천

배깅 방식은 부트스트래핑을 해서 트리를 병렬적으로 여러 개 만들기 때문에 오버피팅 문제에 좀 더 적합하다.
개별 트리의 낮은 성능이 문제일 때는 이전 트리의 오차를 보완해 가면서 만들기 때문에 부스팅이 좀 더 적합하다.

XGBoost

GBT에서 병렬학습을 지원하여 학습 속도가 빨라진 모델
GBT에 비해 효율적이고, 다양한 종류의 데이터에 대응 가능
머신러닝 대회에서 우승한 많은 팀이 선택한 알고리즘
2차 근사식을 바탕으로 한 손실함수를 토대로 손실함수가 최대한 감소하도록 하는 split point를 찾는 것이 목표
GBM 대비 빠른 수행 시간(하지만 여전히 학습시간이 느림), 과적합 규제
Early Stopping : 오차가 줄어들지 않으면 학습을 멈춰라.
하이퍼파라미터 튜닝을 하면 시간이 오래 걸림.

lightgbm

Light Gradient Boosting Machine
Microsoft사에서 개발, 오픈소스 분산 그래디언트 부스팅 프레임워크
결정트리 알고리즘 기반

  • GOSS(Gradient based One Side Sampling)
    • 그라디언트가 큰 것들을 유지하고, 무작위로 샘플링을 한다.
    • 작은 그라디언트는 잘 맞춘거고, 큰 그라디언트는 틀린거니까.
    • 맞춘 작은 그라디언트는 두고, 틀린 큰 그라디언트 위주로 샘플링
    • 행을 줄인다.
  • EFB(Exclusive Feature Bundling) 배타적 특성 묶음
    • 열을 줄인다.

CatBoost

러시아 검색 업체 Yandex에서 개발한 오픈 소스 소프트웨어 라이브러리
순열기반대안을 사용하여 범주형 기능을 해결하려고 시도

공통점

GPU 지원
사이킷런에서는 지원할 생각이 없다고 했지만, 외부 라이브러리에서는 지원하고 있다.

DecisionTrees - Bagging - RandomForest - Boosting - GradientBoosting - XGBoost
사이킷런 API https://xgboost.readthedocs.io/en/stable/python/index.html


퀴즈

9/10문제
5번 문제. Boosting 알고리즘을 사용하는 모델 알고리즘 모두 고르기
GBM, XGBoost, LightGBM잘 골랐는데 CatBoost 왜 빼놓은건지..

7번 문제는 헷갈려서
cross validation에 사용할 fold 의 나눌 갯수를 지정하고 데이터를 섞을지, 랜덤 값을 고정할지를 설정할 수가 있습니다. 빈 칸에 알맞은 것은 무엇일까요?
(n_splits=3, shuffle=True, random_state=42)
KFold
cv, cross_val_predict, cross_val_score가 예시에 있었는데, 아직 구별을 잘 못하는 것 같다.

8번 문제도 헷갈려서
트리계열 알고리즘에서 가지의 분할의 품질을 측정하는 기능을 하는 것은?
criterion
max_depth, min_samples_split, min_samples_leaf는 아님

profile
아직 고쳐나가는 중.

0개의 댓글