티스토리 뷰
반응형
성능 개선 1번 : 릿지 회귀 모델
L2 규제를 적용한 선형 회귀 모델
릿지 회귀 모델은 성능이 좋은 편은 아니다. 캐글러도 잘 안쓴다.
선형 회귀 모델모다 과대적합이 적은 모델이다.
하이퍼파라미터 최적화(모델 훈련)
모델 훈련 단계에서 그리드 서치 기법 사용
교차 검증 평가점수는 보통 에러 값이기 때문에 낮을수록 좋다.
alpha는 릿지 모델의 파라미터
그리드 서치를 이용하지 않으면 alpha에 각각 값을 전달하여 교차 검증으로 모델 성능을 각가 측정해야 한다.
릿지 모델 생성
https://www.kaggle.com/werooring/ch6-modeling
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
from sklearn import metrics
ridge_model = Ridge()
그리드 서치 객체 생성
비교 검증해볼 하이퍼 파라미터 값 목록, 대상 모델, 교차 검증용 평가 수단(평가 함수)
3가지가 그리드 서치에 들어가야 한다.
대상 모델은 베이스라인으로 만들었으니, 목록과 평가 함수만 더 준비하면 된다.
릿지 모델에서 중요한 하이퍼 파라미터는 alpha로, 값이 클수록 규제 강도가 세진다.
# 하이퍼파라미터 값 목록 ①
ridge_params = {'max_iter':[3000], 'alpha':[0.1, 1, 2, 3, 4, 10, 30, 100, 200, 300, 400, 800, 900, 1000]}
# 교차 검증용 평가 함수(RMSLE 점수 계산)
rmsle_scorer = metrics.make_scorer(rmsle, greater_is_better=False)
# 그리드서치(with 릿지) 객체 생성 ②
gridsearch_ridge_model = GridSearchCV(estimator=ridge_model, # 릿지 모델
param_grid=ridge_params, # 값 목록
scoring=rmsle_scorer, # 평가지표
cv=5) # 교차 검증 분할 수
GridSearchCV() 함수이 주요 파라미터
- estimator : 분류 및 회귀 모델
- param_grid : 딕셔너리 형태로 모델의 하이퍼파라미터명과 여러 하이퍼파라미터 값을 지정
- scoring : 평가지표. 사이킷런에서 기본적인 평가지표를 문자열 형태로 제공함. 예를 들어, 정확도는 ‘accuracy’, F1 점수는 ‘f1’, ROC-AUC는 ‘roc_auc’, 재현율은 ‘recall’로 표시함. 사이킷런에서 제공하는 평가지표를 사용하지 않고 별도로 만든 평가지표를 사용해도 됨. 앞의 코드에서는 mertics.make_scorer를 활용해 별도로 만든 평가지표를 사용. make_scorer는 평가지표 계산 함수와 평가지표 점수가 높으면 좋은지 여부 등을 인수로 받는 교차 검증용 평가 함수임
- cv : 교차 검증 분할 개수(기본값은 5)
그리드 서치 수행
log_y = np.log(y) # 타깃값 로그변환
gridsearch_ridge_model.fit(X_train, log_y) # 훈련(그리드서치)
가장 좋은 성능을 보인 값을 best_params_ 속성
이 최적 값으로 훈련한 모델(최적 예측기)을 best_estimator_ 속성
print('최적 하이퍼파라미터 :', gridsearch_ridge_model.best_params_)
최적 하이퍼파라미터 : {'alpha': 0.1, 'max_iter': 3000}
성능 검증
# 예측
preds = gridsearch_ridge_model.best_estimator_.predict(X_train)
# 평가
print(f'릿지 회귀 RMSLE 값 : {rmsle(log_y, preds, True):.4f}')
릿지 회귀 RMSLE 값 : 1.0205
값이 바뀐게 없다..
왜 릿지 모델을 안쓰는지 알 것 같다.
라쏘 회귀 모델
라쏘 회귀 모델은 L1 규제를 적용한 선형 회귀 모델
이것 또한 릿지처럼 성능이 좋지 않다.
하이퍼파라미터 최적화
from sklearn.linear_model import Lasso
# 모델 생성
lasso_model = Lasso()
# 하이퍼파라미터 값 목록
lasso_alpha = 1/np.array([0.1, 1, 2, 3, 4, 10, 30, 100, 200, 300, 400, 800, 900, 1000])
lasso_params = {'max_iter':[3000], 'alpha':lasso_alpha}
# 그리드서치(with 라쏘) 객체 생성
gridsearch_lasso_model = GridSearchCV(estimator=lasso_model,
param_grid=lasso_params,
scoring=rmsle_scorer,
cv=5)
# 그리드서치 수행
log_y = np.log(y)
gridsearch_lasso_model.fit(X_train, log_y)
print('최적 하이퍼파라미터 :', gridsearch_lasso_model.best_params_)
최적 하이퍼파라미터 : {'alpha': 0.00125, 'max_iter': 3000}
성능 검증
# 예측
preds = gridsearch_lasso_model.best_estimator_.predict(X_train)
# 평가
print(f'라쏘 회귀 RMSLE 값 : {rmsle(log_y, preds, True):.4f}')
라쏘 회귀 RMSLE 값 : 1.0205
역시나 개선된 게 없다..
출처 : 머신러닝 딥러닝 문제해결 전략
반응형