📚 Hyperparameter란
일반적으로 모델에서 학습을 통해서 값이 결정되는 값을 파라미터라고 한다. 이 중에서 사용자가 값을 결정할 수 있는 파라미터를 하이퍼 파라미터라고 부른다. 하이퍼파라미터는 여러 가지 값을 대입해 보면서 최적의 값을 선택해야 한다. 이렇게 파라미터 값을 변경하면서 최적 값을 찾는 과정을 "모델 튜닝" 이라고 부른다.
📌주의점!
하이퍼 파라미터 튜닝 시, test set을 사용해서는 안된다. Test set은 모델의 최종 성능 평가를 위해서 사용되므로 모델의 학습 과정에서는 절대 사용되어서는 안된다. 따라서 validation set을 추가하여 사용해야 한다.
📚 K-fold crossvalidation
Cross validation은 모델 과적합을 감소시키고 모형의 일반화 가능성을 높이기 위해서 사용한다.
학습 데이터를 K개의 데이터셋으로 나누고 번갈아 가면서 학습/테스트를 진행함. 일반적으로 k는 5~10 사이의 값을 사용한다.
그리고 각 split마다 산출되는 평가 수치(accuracy, F1 score 등)의 평균값으로 최적의 파라미터를 선정한다.
k-fold로 최적의 파라미터 값을 선정한 후에는, 해당 파라미터로 다시 전체 train set으로 학습하고 test set으로 평가를 진행한다.
📚 Grid Search
파라미터 값으로 입력할 수 있는 후보가 많을 때, 하나씩 값을 입력해보면서 최적의 파라미터 값을 구하는 방법.
Grid-search is used to find the optimal hyperparameters of a model which results in the most ‘accurate’ predictions
✅ Example
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
iris = pd.read_csv('iris_data.csv')
iris_np = iris.values
#독립/종속변수 선택
iris_features = iris_np[:,:-1]
iris_labels = iris_np[:,-1]
#기본 전처리
from sklearn import preprocessing
le = preprocessing.LabelEncoder() # categorical 변수의 값을 숫자로 변환
input_classes =['versicolor','virginica']
le.fit(input_classes)
iris_labels = le.transform(iris_labels
#train/test 분리
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_features, iris_labels, test_size = 0.3, random_state=0)
iris 데이터를 불러오고 전처리, 학습데이터 분리 등을 진행한다.
lr_model = LogisticRegression(max_iter=10000)
from sklearn.model_selection import GridSearchCV
LR_params = {
'penalty' : ['l1', 'l2'], # 'none' 포함 가능
'C': [0.01, 0.05, 0.1, 0.5, 1, 5, 10],
'solver':['saga']
}
grid_search = GridSearchCV(lr_model, param_grid=LR_params, cv=5)
grid_search.fit(X_train, y_train)
penalty = none인 경우에는 자동으로 C 값을 무시하고 그리드서치를 진행한다.
#최적 파라미터 값 출력
grid_search.best_params_
#최적 파라미터로 trainset 다시 학습
best_model2 = LogisticRegression(C=0.1, penalty='l1', solver='saga', max_iter=2000)
best_model2.fit(X_train, y_train)
y_preds = best_model2.predict(X_test)
accuracy_score(y_test, y_preds)
최적의 파라미터로 다시 전체 trainset에 대해서 학습을 진행하고, test set에 대해서 평가를 진행한다.
trainset으로 다시 학습하지 않고 그냥 Grid search의 결과를 그대로 사용하고자 하는 경우 위와 같이 적용 가능
📚 Reference
이상엽, 연세대학교 언론홍보영상학부 부교수, 22-1학기 기계학습 이론과 실습
'머신러닝, 딥러닝 > 머신러닝' 카테고리의 다른 글
TF-IDF (Term Frequency - Inverse Document Frequency) (0) | 2022.05.15 |
---|---|
[머신러닝] 데이터 불균형, Oversampling 방법 (0) | 2022.04.18 |
[머신러닝] Confusion Matrix, ROC Curve (0) | 2022.04.11 |
[머신러닝] Logistic Regression (0) | 2022.04.11 |
[머신러닝] 군집화(Clustering) (0) | 2022.03.28 |
댓글