[ML] 머신 러닝, 더 빠르고 정확하게 - 3. 모델 평가와 하이퍼파라미터 고르기
01. k겹 교차 검증(k-fold cross validation)
트레이닝 셋과, 테스트 셋으로 데이터를 나눴다.
딱 이 테스트 셋에서만 성능이 좋거나 안 좋을 수도 있다..
교차 검증은 이 문제를 해결하는 방법~
k겹 교차검증은 전체 데이터를 k개의 같은 사이즈로 나눈다..
그리고 하나를 테스트 셋으로 두고, 나머지를 트레이닝 셋으로 두기를 k번 반복해 구한 성능의 평균을 모델의 성능으로 보는 것
모델의 성능을 여러번 다른 데이터로 검증하여 평가에 대한 신뢰 상승
k : 데이터 셋을 몇 개로 나눌 건지 정하는 변수
가장 일반적으로 5 사용... 10겹,, 20겹,, 교차검증
03. scikit-learn으로 k겹 교차 검증 해보기
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
logistic_model = LogisticRegression(max_iter=2000)
cross_val_score(logistic_model, X, y.value.ravel(), cv=5) : k겹 교차검증
np.average( cross_val_score(logistic_model, X, y.value.ravel(), cv=5) ) => 성능들의 평균
05. 그리드 서치
하이퍼 파라미터 : 학습을 하기 전에 미리 정해 줘야 하는 변수 또는 파라미터들
모델을 학습 시키기 전에 사람이 미리 정해줘야하는 변수들
하이퍼 파라미터에 어떤 값을 넣어주느냐에 따라 성능에 큰 차이가 있을 수 있다.
좋은 하이퍼파라미터 고르는 방법 : Grid Search
하이퍼파라미터의 후보 값을 정한 후
모든 후보 값의 조합(그리드)으로 테스트 후 가장 좋은 후보 값을 선정~ simple ~~
근데 후보 값들은 어떻게 정하는건가 ? -> 구글링을 통해 sklearn에 사용하는 default를 참고하라
07. scikit-learn으로 그리드 서치 해보기
from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV
# 딕셔너리로 하이퍼파라미터 만들기
hyper_parameter = {
'alpha' : [0.01, 0.1, 1, 10],
'max_iter' : [100, 500, 1000, 1500, 2000]
}
lasso_model = Lasso()
hyper_parameter_tuner = GridSearchCV(lasso_model, hyper_parameter, cv=5)
hyper_parameter_tuner.fit(X,y)
# 워닝 -> iter이 적어서 최적의 결과 내지 못했다는 경고
hyper_parameter_tuner.best_params_ : 최적의 하이퍼파라미터 값을 저장하는 변수