본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 10주차]선형회귀, 그라디언트부스팅, XGBoost, LigtGBM, CatBoost, 타입변경, Confusion Matrix, Precision, Recall, 단골면접질문

by aimaimee 2023. 5. 10.

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

 

13번 강의 파일 : 선형회귀, 그라디언트부스팅, XGBoost, LigtGBM, CatBoost/ 0803실습파일 : 타입변경 / 14번 강의 파일 : Confusion Matrix, Precision, Recall / 단골면접질문

221123

✅13번 강의 파일

✔선형 회귀

  • 이상치에 영향을 크게 받는다. (스케일링이 중요)
  • 보완해서 Ridge, Lasso, ElasticNet 이 있는데, 대부분 정규화 기능이 들어가있다.

✔ 앙상블, 배깅

배깅은 오버피팅이 많이 될 때, 부스팅은 개별 트리의 성능이 중요할 때 주로 사용한다.

✔ 그라디언트 부스팅

  • 그라디언트 부스트에서 미분은 기울기
  • 고차원의 희소한 데이터에 잘 동작하지 않는다. -> 차원축소를 통해 힌트를 주면 성능이 조금 더 잘 나온다.
  • 매개변수를 잘 조정해야 하고 훈련 시간이 길다. -> 역시 차원축소를 이용할 수 있다.
  • 파라미터
    • loss : sqaured_error, absolute_error, huber, quantile
    • sqaured_error, absolute_error가 이상치에 민감해서 huber, quantile을 사용한다.
    • absolute(MAE)는 기울기가 동일해서 측정하기가 어렵다.
  • 부스팅 3대장 : xgboost, lightgbm, catboost

✔ XGBoost(Extreme Gradient Boosting)(2014, 2016년부터 캐글에서)

  • 과적합규제(Regularization) : 정규화랑 비슷하다고 볼 수도 있다.
  • 조기종료 Early Stopping 옵션이 있다.
  • Q. 기존 트리 모델에 없었떤 파라미터 중 중요한 역할을 할 것으로 보여지는 파라미터? learning_rate
  • 매개변수
    • learning rate가 낮을 때는 n_estimator 를 높여야 과적합이 방지된다. : n_estimator는 트리의 개수 == 학습을 몇 번 할건지
    • Q. 왜 위와 같을까? n_estimator 값이 또, 너무 높다면 과적합이 될 수도 있다. 학습하지 말아야 할 것까지 너무 자세히 학습하다 보면 일반화 하기 어렵기 때문에 과대적합이 된다.
    • n_estimator, learning_rate는 trade-off 관계.
    • 랜덤포레스트에서는 병렬적으로 생성, XGboost는 순차적으로 생성 : n_estimator
  • L1, L2 : absolute값을 쓸 것이냐, sqaure 값을 쓸 것이냐
  • Q. 부스팅 모델은 왜 오버피팅에 민감할까? 한번 잘못 분류되면, 이전트리가 다음트리에 영향을 주기 때문에

✔LightGBM(2017)

  • GOSS : 행을 줄여주는 효과
  • EFB : 열을 압축해주는 효과
  • 구간 중 하나를 누락된 값을 위해 사용하기 때문에 결측치 처리를 할 필요가 없다.

✔ CatBoost(2017, Yandex)

  • LightGBM(깊이 우선, 틀린쪽 우선)에 비해 XGBoost(너비 우선)와 CatBoost는 대칭 트리
  • 범주형 기능에 대한 기본 처리
  • 희소 행렬을 지원하지 않는다.
  • 수치형 타입이 많을 때, LightGBM보다 훈련하는데 시간이 오래 걸린다.

✅0803 번 실습 파일

Q. 다른 라이브러리들이 한번에 설치가 안되는 문제가 발생한다. 왜그럴까?
버전 호환성 문제, 접착제 언어이기 때문에 다른 언어에 의존성이 있다.
다른 언어를 실행할 수 있는 환경이 구성되어 있지 않다면 설치해도 불러오지 못하거나 오류가 발생한다.
아나콘다로 설치했다면 conda로 설치하는 것이 가장 깔끔
pip로 설치하면 설치 이슈가 발생할 수 있다.

  • 타입 변경
    • lightGBM, CatBoost 에서 범주형 피처를 인코딩 없이 사용하기 위해, astype으로 카테고리로 변경해준다.
  • 원핫인코딩
    • train에서 ohe 할 때 y 값은 제외하고 인코딩
    • handle_unknow='ignore'
    • hold-out-validation을 위해 train 값으로 나누기
  • 학습, 검증 세트
    • hold-out-validation을 위해 train, valid 세트로 나누기
    • test_size = 0.1 : 왜냐면 train 데이터가 더 많아서 학습할 데이터가 많아야 한다. 여기서는 valid_size.
  • 모델
    • y값이 공정시간이니까 XGBRegressor
    • 사이킷런API에서 보는 것이 파라미터 설명이 잘 되어 있다.
    • https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.sklearn
    • Q. 배깅 모델은 시각화가 어려워 3rd party 도구를 따로 설치해야 시각화가 가능하다.
    • 개별 트리를 시각화 하는 것은 어렵다. 그런데 부스팅 모델은 왜 시각화가 가능할까?
    • 배깅은 병렬적으로 여러개의 트리를 만들고, 부스팅은 하나의 트리를 만들기 때문에
    • valid score : 1에 가까울 수록 좋은 점수 : model_xgb.score(X_valid, y_valid)

✔ CatBoost
catboost 의 회귀 알고리즘의 기본 metric은 RMSE이다.

✔ 타입 변경
object타입을 category로 바꿔줬다.
category 타입으로 되어 있으면 lightgbm, catboost에서 인코딩 없이 사용할 수 있다.
Q. CatBoostRegressor에서 cat_features를 지정해서 실습한 이유? 전처리, 인코딩 없이 쉽게 해보려고


✅ 14번 강의 파일. 분류의 평가지표

Q. 현실 세계의 불균형한 데이터의 예 : 암환자 여부, 생산과정 양불(양품, 불량품) 여부, 게임이나 광고 어뷰징, 지진 해일 재난 예측

✔ Confusion Matrix

Q. 어떤 기준으로 보는게 덜 혼란스러울까? 사이킷런 기준
1종 오류 남자 임신, 2종 오류 여자 임신 (주민번호 1번 남자, 2번 여자)

  • 1종 오류 : 스팸 메일이 아닌데 스팸메일로 예측

🔥Precision 예측값이 1인 것 중에 True인 값

  • 스팸메일 분류, 무고한 피고인에게 유죄 선고

🔥Recall 실제값이 1인 것 중에 True인 값

  • 암환자가 아닌데 암환자로 예측, 양불 여부

Q. cv에 kfold 지정하면 그냥 cv=숫자를 지정할 때와 어떤 차이? random_state 고정, 랜덤 여부를 결정할 수 있다.


퀴즈

8/10
틀린것
6. 성능점수(F1 score) : 정밀도와 재현율의 조화 평균
9. "정답인데 못 찾은 것이 많다." == Recall이 낮다.

그외
2. LightGBM만의 특징 : Leaf_wise tree growth, GOSS, EFB
5. 실제 양성을 양성으로(TP) 양성인데 음성으로(FN) 판단한 비율을 의미하는 지표 : Recall
10. "정답이 아닌데도 정답이라고 한 것이 많다." == Precision이 낮다.


매니저님이 공유해준 면접 질문

  • Cross Validation은 무엇이고 어떻게 해야하나요?
  • 회귀 / 분류시 알맞은 metric은 무엇일까요?
  • 알고 있는 metric에 대해 설명해주세요(ex. RMSE, MAE, recall, precision …)
  • 정규화를 왜 해야할까요? 정규화의 방법은 무엇이 있나요?
  • Local Minima와 Global Minima에 대해 설명해주세요.
  • 차원의 저주에 대해 설명해주세요
  • dimension reduction기법으로 보통 어떤 것들이 있나요?

댓글