멋쟁이 사자처럼 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기법으로 보통 어떤 것들이 있나요?
댓글