오답노트

[ML] HyperParameter Tuning 본문

Python/ML

[ML] HyperParameter Tuning

권멋져 2022. 8. 24. 22:46

HyperParameter Tuning

Hyper Parameter를 설정하여 모델을 최적화할 수 있는 알고리즘에서 모델을 최적하기 위한 Hyper Parameter 설정하는 것을 말한다.

 

Random Search

Random Search 는 값의 범위와 시도 횟수를 정해서, 값의 범위 내에서 시도 횟수만큼 무작위로 값을 선택해서 모델링을 하고, 그 중 가장 성능이 좋은 모델을 선정하는 방법이다.

 

cv 는 교차검증할 때 데이터 셋을 나눌 개수다.

n_iter는 임의로 시도할 횟수를 지정할 수 있다.

 

from sklearn.tree import DecisionTreeClassifier, plot_tree

# 값의 범위 설정
params2 = {'max_depth' : range(1,10), 'min_samples_leaf' : range(10,100)}

# 모델 선언
model2 = DecisionTreeClassifier()
model2_rs = RandomizedSearchCV(model2, params2,cv=5,n_iter=5)

# 모델링
model2_rs.fit(x_train_s,y_train)

# 모델 성능
print(model2_rs.best_score_)

# 선택된 hyper parameter
print(model2_rs.best_params_)

 

 

Grid Search

Random Search와 다르게 무작위 선택이 아닌 값의 범위를 모두 시도하고 그 중에서 가장 성능이 좋은 모델을 선정하는 방법이다.

 

model = KNeighborsClassifier()

params = { 'n_neighbors' : range(3,31,2), 'metric' : ['euclidean', 'manhattan']  }

model_gs = GridSearchCV(model, params, cv=5)

print(model_gs.best_params_)
print(model_gs.best_score_)

pred = model_gs.predict(x_val_s)
print(classification_report(y_val, pred))

'''
              precision    recall  f1-score   support

           0       0.59      0.72      0.65       738
           1       0.65      0.51      0.57       762

    accuracy                           0.61      1500
   macro avg       0.62      0.61      0.61      1500
weighted avg       0.62      0.61      0.61      1500
'''