일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- parklab
- likelion
- pyhton
- 프로젝트
- 인턴10
- Python
- seaborn
- 마이온컴퍼니
- SQL
- ux·ui디자인
- 그리디
- GNN
- 멋사
- folium
- 파이썬
- GIS
- Plotly
- 멋쟁이사자처럼멋쟁이사자처럼
- BFS
- 마이온
- Join
- 멋쟁이사자처럼
- intern10
- DP
- likelionlikelion
- 알고리즘
- DFS
- 시각화
- TiL
- 멋재이사자처럼
- Today
- Total
지금은마라톤중
멋사 AI스쿨 TIL - (25) 본문
2023.03.22
● 각 하이퍼 파라미터 정의
objective [기본 = reg : squarederror ] : 지도학습의 손실 최소화 함수를 정의
n_estimators = 학습할 epoch 수
max_depth [기본 : 6] : 트리의 최대 깊이
n_jobs = 병렬 스레드를 몇 개 만들 것인지
● Early stopping
-> 몇번 돌려서 성능이 더 좋아지지 않으면 멈춰라!
천번을 돌려야할 때 , 전부 다 돌리면 비효율적이다 !
성능이 더 이상 나아지지 않는 경우 자동으로 프로그램을 멈추는 기능!
질문🙋🏻♂️ : EarlyStopping이 오버피팅을 방지한다면 매번 쓰는 게 좋나요? Earlystopping을 사용하게 되면 모든 데이터를 사용하여 훈련하지 못하고 조기에 종료되는 문제가 있어, 데이터가 너무 적을 때는 오히려 early stop을 너무 적게 설정하거나 하면 언더피팅이 되고 끝날 수도 있습니다. 학습 횟수를 길게 설정하고자 할 때 early stop 의 기준을 늘려주면 early stop 을 사용해도 괜찮습니다. early stop 도 하이퍼파라미터 이기 때문에 어떻게 설정하냐에 따라 좋은 성능을 내는 최적의 모델을 찾는데 영향을 줍니다. 이럴 때는 Early Stop 의 기준을 늘려서 사용해 주세요. 기존 10번이었다면 100번 등으로요 |
질문🙋🏻♂️ : early stop 의 기준을 늘려주면 부트스트래핑처럼 되는건가요 ? 부트스트래핑은 데이터를 샘플링 해서 병렬로 여러 개의 무작위 트리를 만드는 것을 의미합니다 early stop은 순차적인 방법, 부트스트래핑은 병령적인 방법 |
● 배깅과 부스팅
어떨 때는 배깅이 더 나은 성능을 내기도 하고 어떤 때는 부스팅이 더 나은 성능을 내기도 합니다. 배깅은 오버피팅에 좀 더 유연하고 부스팅은 개별 트리의 성능이 더 좋습니다. 배깅(bagging : bootstrap aggregating) => 각 트리의 결과를 집계aggregating 해서 사용합니다. 부스팅 => 순차적으로 트리를 개선해 나가기 때문에 마지막 트리가 잔차를 보완해서 만든 최종 모델이 되게 됩니다
질문🙋🏻♂️ : 이전에는 reg.best_estimator_.fit(X_train,X_test) 와 같이 최적의 모델(reg.bestestimator)을 활용해 학습을 했는데 catboost의 경우에는 그냥 model_cat.fit(X_train, y_train) 이렇게 해도 랜덤서치로 찾은 최적의 모델로 학습하는 건가요? 사이킷런의 랜덤서치CV는 해당 랜덤서치CV 안에 모델을 넣어줍니다. CatBoost 에서는 모델의 메서드로 동작합니다. (Chat GPT 답변) catboost 라이브러리에서 랜덤서치(Randomized Search)를 수행하면, 최적의 하이퍼파라미터를 찾아서 그것으로 모델을 만들어 줍니다. 이 모델은 model_cat 객체에 저장되며, 해당 모델을 사용하여 fit 메소드를 호출하여 모델 학습을 수행할 수 있습니다. 따라서 model_cat.fit(X_train, y_train)은 랜덤서치로 찾은 최적의 하이퍼파라미터를 사용하여 모델을 학습하는 것입니다. best_estimator_는 scikit-learn에서 최적의 모델을 반환하는 속성입니다. 이 속성은 모델이 아닌 모델 객체의 하이퍼파라미터를 포함합니다. catboost에서는 best_estimator_가 아니라 best_params_를 사용하여 최적의 하이퍼파라미터를 확인할 수 있습니다. 예를 들어, 랜덤서치를 수행한 결과를 확인하고자 할 때, print(model_cat.best_params_)와 같이 사용할 수 있습니다. |
● lightGBM, CatBoost 에서 category type 바꾸면 유리한 이유
category type : 문자열처럼 보이고 작동하지만 내부적으로는 정수의 배열로 표현됩니다.
이를 통해 데이터를 사용자 지정 순서로 정렬하고 데이터를 보다 효율적으로 저장할 수 있습니다.
lightGBM, CatBoost 에서는 범주형 피처를 인코딩 없이 사용할 수 있음
-> object type 변수들을 category type으로 바꿔줌
질문🙋🏻♂️ : 정확도만으로는 평가하기 어려운 문제가 암환자를 찾을 때 1000명 중에 1명이라면 다 암환자가 아니라고 예측하면 99.9% 정확도를 갖게 됩니다. 현실 세계에서 이런 사례가 또 있을까요? 현실세계에서 주식시장에서 상장폐지가 되는 회사는 드뭅니다. 그래서 상장 폐지여부를 예측할 때 대부분 폐지되지 않는다고 예측하면 이것도 정확도가 높게 나옵니다 |
● predict_proba() 를 사용하면 분류할 클래스별로 결과값을 확률로 출력하게 됩니다.
-> 넘파이 argmax() 로 가장 큰 확률을 가지는 클래스의 인덱스를 가져올 수 있습니다
질문🙋🏻♂️ : Precision과 Recall이 서로 반비례 관계를 가지는 이유가, 오버피팅과 언더피팅의 중간에서 왔다갔다 하기 때문일까요? 확률로 예측했을 때 다음과 같이 임계값을 설정해 볼 수 있습니다. 다음 임계값에 따라 Precision 과 Recall 에 속하는 샘플의 수가 달라집니다. 그래서 트레이드오프 관계라고 표현합니다. 0.3 보다 큰것을 양성이라고 볼 것인지? 0.5 보다 큰것을 양성이라고 볼 것인지? 0.7 보다 큰것을 양성이라고 볼 것인지? |
● 분류성능평가지표
정확도 (Accuracy) : 모델이 예측한 결과와 실제 결과가 얼마나 일치하는지를 측정합니다. 정확도는 전체 샘플 중에서 모델이 정확하게 예측한 샘플의 비율로 계산됩니다.
정밀도 (Precision) : 모델이 예측한 양성 클래스(positive class) 중에서 실제 양성 클래스인 것의 비율을 측정합니다.
재현율 (Recall) : 실제 양성 클래스 중에서 모델이 양성으로 예측한 것의 비율을 측정합니다.
F1 스코어 (F1 Score) : 정밀도와 재현율의 조화 평균값을 계산한 것입니다. 이 측정 지표는 정밀도와 재현율을 모두 고려하기 때문에 모델의 성능을 전반적으로 평가하는 데 유용합니다.
오차 행렬 (Confusion Matrix) : 실제 클래스와 모델이 예측한 클래스를 행과 열로 나타내는 행렬입니다. 오차 행렬을 통해 모델이 어떤 클래스를 잘 예측했고 어떤 클래스를 잘못 예측했는지를 시각적으로 확인할 수 있습니다
● 오버샘플링과 언더샘플링
클래스의 비율을 맞춰주는 방법 : 오버샘플링 ,언더샘플링
대표적인 오버샘플링기법 : SMOTE
● 가설 검정을 통해 1종 오류와 2종 오류를 구분할 수 있습니다.
precision - 1종 오류
실제로는 임신이 아닌데(0) 임신으로 예측(1), FP ‘남자가 임신 - 1종오류’로 외우기!
recall - 2종 오류
실제로는 임신인데(1) 임신이 아니라고 예측(0), F
'멋쟁이사자처럼 > Python' 카테고리의 다른 글
멋사 AI스쿨 TIL - (27) (0) | 2023.04.18 |
---|---|
멋사 AI스쿨 TIL - (26) (0) | 2023.04.18 |
멋사 AI스쿨 TIL - (24) (0) | 2023.03.23 |
멋사 AI스쿨 TIL - (23) (0) | 2023.03.23 |
멋사 AI스쿨 TIL - (22) (1) | 2023.03.16 |