실습의 목표/ 데이터셋
● 회귀 알고리즘의 사용
=> Bike Sharing Demand | Kaggle
● 회귀의 평가방법
✅ 1에 가깝고 클수록 예측 잘 됨 => R Squared (결정계수)
✅ 오차 측정하기 때문에 작을수록 예측 잘 됨 => MAE, MSE, RMSE, RMSLE, MAPE
✅ 평가 목적에 따라 다른 평가지표 사용
● Label Smoothing
✅ 로그 변환 통해 한쪽에 치우치고 뾰족한 분포 -> 정규분포 형태
✅ 데이터 정규화(Regularization)에 많이 사용되는 테크닉 & 모델의 일반화 성능을 높여주기도 합
✅ 회귀 모델에서 사용할 수 있는 레이블 스무딩(Label Smoothing) 기법. ⇒ log1p
log 적용 -> exp 적용 -> 원래 값으로 복원
● HyperParameter Tunning
✅ GridSearchCV, RandomSearchCV
● Boosting 알고리즘 사용해보기
✅ 약한 트리 모델을 여러번 순차적으로 학습
=> 이전에 발생한 오차를 줄여나가도록 학습하는 앙상블 방식
💡 GradientBoostingRegressor : 클래스 => sklearn.ensemble
RandomizedSearchCV : 클래스 => sklearn.model.selection
1. Label Smoothing
# 학습(훈련)에 사용할 정답값
# 예) 기출문제의 정답
y_train = np.log1p(train[label_name])
2. GradientBoostingRegressor
✅ 이름에 왜 Gradient 가 들어갈까요❓
📝기울기를 구해서 일정 거리만큼 내려가고 거기서 다시 기울기 구해서 최소값에 가까워지기를 반복
3. RandomizedSearchCV
✅ np.random 이용
=> n_estimator와 learning_rate를 랜덤하게 지정
✅ n_iter => 무작위로 탐색할 개수를 설정하는 파라미터, 너무 많아지면 시간 오래 걸림
✅ n_iter * cv 만큼 학습이 진행됩니다!
3-1. RandomizedSearchCV 파라미터
- n_iter: CV가 검증해볼 파라미터 조합의 수
- scoring : 교차검증을 하는 방법 선택
- n_jobs : 컴퓨터에서 사용할 코어의 수, 전체 사용 -1
- cv : 교차검증 진행할 횟수
- verbose : 함수 수행시 발생하는 상세한 정보들을 표준 출력으로 자세히 내보낼 것인가
💡 최적의 모델이 매번 다르게 나오는 이유는 랜덤값이 매번 달라지기 때문인가요?
💫 어떤 랜덤값에서 어떤 스코어가 나왔는지를 확인해 보고 좋은 점수가 나오는 구간을 찾기
=> 그 구간으로 다시 랜덤값 생성 구간을 좁혀서 찾기
=> 이 과정을 반복하여 랜덤한 최적값을 찾음.
💡 score에 NaN값이 나온다면 파라미터에 오류가 있을 확률이 높습니다!
💫RandomizedSearchCV에서는 error_score default가 np.nan
=> error_score = 'raise' 설정으로 오류를 일으켜 traceback을 확인
💡 분류 기본 metric => Accuracy
회귀 기본 metric => R Sqaure Score
+ 데일리 퀴즈 📝
1번문제❗
📝다음은 OneHotEncoder 의 문서의 일부
다음 항목 중 test에 모르는 값이 들어왔을 때 제외하고자 할 때 사용할 수 있는 기능은 무엇일까요?
*
OneHotEncoder(
*,
categories='auto',
drop=None,
sparse=True,
dtype=<class 'numpy.float64'>,
handle_unknown='error',
)
💡 handle_unknown="ignore" 을 설정
=> test에만 등장하는 값은 피처로 만들지 않습니다.
2번문제❗
📝 최적의 매개변수 값을 찾기 위해 하이퍼파라미터 값을 바꾸는 동시에 교차검증까지 진행하는 방법
💡 그리드 서치( Grid Search )
3번문제❗
📝 하이퍼파라미터 최적화방법 중 **랜덤서치**에 대한 설명 중 옳지 **않은** 것
💡 모델의 하이퍼 파라미터 후보군 들을 완전 탐색하여 하이퍼 파라미터를 검색
5번문제❗
📝 RandomizedSearchCV 로 최적의 매개변수를 찾는 과정을 수행
=> cv_results_ 값으로 다음과 같은 fold 마다의 점수를 얻게 되었을 때 n_iter 와 cv 에 지정해 준 값은 어떻게 될까요?
reg = RandomizedSearchCV(model, param_distributions=param_distributions, n_iter=?, cv=?, n_jobs=-1)
💡paramas 컬럼에서 행의 개수 => n_iter
split_test(열)의 개수 => cv
6번문제❗
💡그리드서치는 하이퍼파라미터에 지정해준 모든 조합을 시도
랜덤서치는 모든 조합을 시도하지 않고 각 반복마다 임의의 값을 지정한 횟수 만큼 평가
13번문제❗
📝 다음과 같이 RandomizedSearchCV 를 수행했을 때 train, valid 를 나누는 fold 의 수는 몇 개일까요?
💡 cv의 수와 동일