데이터의 정제를 완료하면 모델을 통해 데이터를 학습하고 타겟 값을 예측한다. 머신러닝에 있어서 모델의 성능을 높이기 위해서 가장 중요한 작업은 데이터를 모델에 맞게 정제하는 과정이라고 생각한다. 그 다음으로는 모델의 파라미터 값을 조정하여 성능을 높이는 방법이 있다.
모델에 따라 수 많은 파라미터들이 존재하기 때문에, 사람이 모든 값을 하나씩 바꿔가며 실험하는 것은 많은 노력과 인력을 필요로 한다. 사이킷 런에서는 모델의 파라미터를 설정할 때, 사람이 일정 값을 설정해주면 모델이 그 조합들을 자동적으로 조합하여 실험을 실행시키는 메서드를 제공하는데 그것이 바로 GridSearchCV 이다.
greedy 알고리즘은 최적해를 구하는 데에 사용되는 근사적인 방법으로, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달한다.
이 아이디어를 착안하여 GridSearchCV 메서드가 나오게 되지 않았나 생각한다.(지극히 뇌피셜)
그렇다면 GridSearchCV에 대해 알아보자.
사이킷런의 공식 문서를 살펴보면 GridSearchCV는 다음과 같은 파라미터 값이 존재한다.
class sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)
출처 : https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
그 중 몇 가지 파라미터에 대해 살펴보자.
estimator : estimator는 머신러닝의 모델을 의미한다.
param_grid : param_gird 에는 딕셔너리나 리스트 값을 넣어주어야 한다. 해당 파라미터에 우리가 실험할 값들을 설정하여 넣어주면 GridSearchCV 메서드가 실험 값을 조합하여 최적의 값을 찾아준다.
예제 코드
from sklearn.neighbors import RandomForesetClassifier
from sklearn.model_selection import GridSearchCV
# 실험할 파라미터 값, 본 예제에서는 RandomForestClassifier의 파라미터들을 실험한다.
param_gird = {'n_estimators' : np.arange(100, 1000, 200, dtype=int),
'max_features' : [None, 'sqrt', 'log2'],
'criterion' : ['gini', 'entropy'],
'max_depth' : [None, 3, 5, 7]}
rf_clf = RandomForestClassifier()
param_gird 에는 사용할 모델의 파라미터 값(실험용)을 위의 예제처럼 딕셔너리 형태로 만들어주면 된다.
gs_rf = GridSearchCV(rf_clf, param_grid=param_grid)
gs_rf.fit(X_train, y_train)
print('Optimal n_estimators: {} Optimal max_features: {} Optimal max_depth: {} Optimal criterion: {}'.format(gs_rf.best_params_['n_estimators'],
gs_rf.best_params_['max_features'],
gs_rf.best_params_['max_depth'],
gs_rf.best_params_['criterion']))
>> Optimal n_estimators: 300 Optimal max_features: sqrt Optimal max_depth: None Optimal criterion: entropy
이제 GridSearchCV 를 사용하여 우리가 실험하고자 하는 파라미터 값을 학습해주면, 해당 gs_rf 객체에 저장된 가장 좋은 파라미터 값을 알아낼 수 있다.
내가 사용했던 데이터와 모델에서는 위 처럼 각각 최적의 파라미터를 찾아주는 것을 확인할 수 있다.
다른 모델에서도 비슷한 과정으로 실험을 진행하면 된다!
'데이터분석' 카테고리의 다른 글
pandas.qcut, 구간 나누기, categorical 변수 (0) | 2023.08.21 |
---|---|
data handling, map, np.where (0) | 2023.08.18 |
날짜 형식 데이터를 연, 월, 일로 변경하기 (0) | 2023.08.10 |
주피터 노트북 단축기 정리 (0) | 2022.11.18 |
DataFrame, Join Type의 종류, python (0) | 2022.11.11 |