-
[머신러닝] HPO 최적의 하이퍼 파라미터 찾기 GridSearch 예제머신러닝 배우기 2023. 12. 11. 22:50
▶︎ HPO (= Hyper-Parameter Optimization)
→ 하이퍼파라미터 튜닝이나 모델 튜닝으로 불리며, 사람이 지정해줘야하는 하이퍼파라미터를 최적의 조합으로 찾아주는 것을 뜻한다.
→ 하이퍼파라미터를 잘 찾아야 하는 이유는 하이퍼파라미터가 모델의 학습 과정을 제어하고(과적합을 방지하고) 모델의 성능에 영향을 미치기 때문이다.
▶︎ HPO 기법의 종류
1. Grid Search
: 사용자가 후보값들을 정해주고, 모든 경우의 수를 조합하여 교차 검증을 수행하여 최적의 조합을 찾는 방법이다. 가장 널리 사용되고 직관적이다.
2. Random Search
: 분포를 지정해주며 컴퓨터가 랜덤하게 파라미터 조합을 선택하여 탐색하는 방법이다. 전통적인 머신러닝보단 딥러닝에서 더 많이 활용된다.
3. Bayesian Optimization
: 베이지안 통계를 기반으로 확률 모델을 사용하여 하이퍼파라미터 조합의 함수 값을 최대화하는 조합을 선택하는 방법이다
4. Genetic Algorithms
: 유전 알고리즘을 사용하여 하이퍼파라미터의 조합을 진화시켜나가면서 최적의 조합을 찾는 방법이다
▶︎ Grid Search 사용법
from sklearn.model_selection import GridSearchCV from sklearn.모델_클래스 import 모델_생성자 # 모델 생성자와 탐색할 하이퍼파라미터 그리드 정의 param_grid = {'parameter1': [value1, value2, ...], 'parameter2': [value1, value2, ...], ...} # 모델 생성자 및 매개변수 그리드로 GridSearchCV 객체 생성 grid_search = GridSearchCV(모델_생성자(), param_grid, cv=교차검증_횟수, scoring='평가지표') # 모델_생성자: 사용할 머신러닝 모델의 생성자(클래스)를 지정합니다. # param_grid: 탐색할 하이퍼파라미터 그리드를 딕셔너리 형태로 정의합니다. # cv: 교차 검증을 수행할 fold 수를 지정합니다. # scoring: 모델의 성능을 평가할 지표를 선택합니다. (예: 'accuracy', 'precision', 'recall', 'f1', 등) # 데이터에 모델을 훈련하고 최적의 하이퍼파라미터를 찾음 grid_search.fit(X_train, y_train) # 최적의 하이퍼파라미터 및 모델의 성능 출력 print("Best Parameters:", grid_search.best_params_) print("Best Score:", grid_search.best_score_)
▶︎ Grid Search 서포트벡터머신 예제
from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC # param_grid dict에 조합을 찾고 싶은 Hyper-params 값들을 리스트업합니다. param_grid = {'C' : [0.1, 1, 10, 100, 1000], 'gamma' : [1, 0.1, 0.01, 0.001, 0.0001], 'kernel' : ['rbf','poly']} grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) # refit : 찾아진 가장 좋은 params로 estimator를 setting할 지 여부 (setting해줘야 곧바로 predict가 가능) # verbose : 설명의 자세한 정도 (verbose를 3과 같이 바꾸면 더 자세하게 매 param set 마다의 결과를 확인할 수 있습니다.) grid.fit(X_train_scaled, y_train) print('The best parameters are ', grid.best_params_) # Result # The best parameters are {'C': 0.1, 'gamma': 1, 'kernel': 'poly'}
'머신러닝 배우기' 카테고리의 다른 글
[머신러닝] PCA와 feature selection 과의 비교 (0) 2023.12.12 [머신러닝] 클러스터링의 대표, K-means Algorithm (1) 2023.12.12 [머신러닝] Feature Scaling 피쳐 스케일링. 언제 어떤 Scaler를 써야할까? (Min-Max, 표준화, Robust Scaling) (0) 2023.12.11 [머신러닝] SVM 서포트벡터머신 쉽게 이해하기 (1) 2023.12.11 [머신러닝] 변수가 모델에 얼마나 큰 영향을 끼치니? 확인하는 두가지 방법 feature importance, permutation importance (0) 2023.12.11