AI/ML

[ML] 머신 러닝, 더 빠르고 정확하게 - 3. 모델 평가와 하이퍼파라미터 고르기

jooeun 2024. 7. 31. 02:53

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_ : 최적의 하이퍼파라미터 값을 저장하는 변수