하이퍼파라미터 튜닝
하이퍼파라미터란 앞의 여러 모델에 설명한 여러 파라미터를 직접 사용자가 설정하는 것을 말하며
하이퍼파라미터 튜닝은 성능을 최적화 하기 위해 파라미터를 조정하는 것을 말한다
Grid Search & Random Search
Grid Search는 파라미터의 범위를 지정하고 해당 범위의 모든 파라미터를 입력하여
범위 내에서 가장 결과가 좋은 파라미터를 자동으로 학습한다
Random Search 는 Grid Search에서 범위 내의 모든 파라미터를 사용하는 것이 아니라 지정한 수 만큼의 파라미터를 범위 내에서 랜덤으로 가져와 그 중에서 가장 결과가 좋은 파라미터를 자동으로 학습한다
당연하지만 grid search를 사용하는 것이 더욱 정확한 결과를 얻을 수 있겠지만 그 만큼 시간이 더 걸린다는 단점이 있다
사용방법
import
#random search
from sklearn.model_selection import RandomizedSearchCV
#grid search
from sklearn.model_selection import GridSearchCV
코드로 임포트를 한다
파라미터 선언
다음으로는 파라미터를 선언해주어야 하는데
선언은 딕셔너리 형태로 선언을 하며, 파라미터이름 : 범위, 로 지정해주면 된다
ex) 결정 트리의 max_depth 튜닝용 파라미터
param = {'max_depth' : range(1,10)}
모델 선언
grid search와 random search를 사용하기 위해서는 당연하지만
튜닝을 할 모델을 선언해 주어야 한다
이 게시글에서는 결정 트리를 선언해서 사용해보겠다
from sklearn.tree import DecisionTreeClassifier
#학습할 모델
model_base = DecisionTreeClassifier()
#random search 모델
model_rs = RandomizedSearchCV( model_dt, #모델
param, #파라미터
cv=5, # 검증할 k-fold
n_iter=20, # 시도 횟수
scoring='accuracy' #기준
)
#grid search 모델
model_gs = GridSearchCV( model_dt, #모델
param, #파라미터
cv=5, # 검증할 k-fold
scoring='accuracy' #기준
)
형태로 선언해주면 된다
grid search와 random search는 n_iter 을 빼면 옵션이 똑같다
모델학습
model_rs.fit(x_train, y_train)
model_gs.fit(x_train, y_train)
코드로 학습을 시킬 수 있다
학습 결과와 성능 평가
#최적 파라미터
print(model_rs.best_params_)
print(model_gs.best_params_)
#최고 점수
print(model_rs.best_score_)
print(model_gs.best_score_)
#변수 중요도
print(model_rs.best_estimator_.feature_importances_)
print(model_gs.best_estimator_.feature_importances_)
위 코드를 사용해 최적의 파라미터와 해당 파라미터에 해당하는 점수, 그리고 변수의 중요도를 볼 수 있다
또한 모델에 학습이 적용되었으므로
별도의 모델 선언 없이
y_pred = model_rs.predict(x_test)
y_pred = model_gs.predict(x_test)
코드로 y값을 예측하고 평가를 진행 할 수 있다
+ 하이퍼 파라미터별 결과 시각화
result = pd.DataFrame(model_gs.cv_results_)
코드로 결과를 데이터 프레임으로 저장 할 수 있다
이후 데이터에서 param_선택한 하이퍼 파라미터 이름으로 되어있는 인덱스와 mean_test_score으로 결과를 그릴 수 있다
ex)
sns.lineplot(x = 'param_max_depth', y = 'mean_test_score', data = result, marker = 'o')
plt.grid()
파라미터를 여러 개 넣었으면, hue를 추가하자
'파이썬 > 머신러닝-지도학습' 카테고리의 다른 글
파이썬 머신러닝 데이터 정규화 (0) | 2023.09.21 |
---|---|
파이썬 머신러닝 지도학습 - 모델의 성능 예측 k분할 교차 검증(K-Fold Cross Validation) (0) | 2023.09.17 |
파이썬 머신러닝 지도학습 - 앙상블 - XGBoost (분류, 회귀) (0) | 2023.09.17 |
파이썬 머신러닝 지도학습 - 앙상블 -Random forest(랜덤 포레스트) (분류, 회귀) (0) | 2023.09.17 |
파이썬 머신러닝 지도학습 - 앙상블 (0) | 2023.09.16 |