-
GridSearchCV () - 파라매터 와 교차검증을 동시에 하는 API머신러닝(MACHINE LEARNING) 2021. 4. 13. 23:08반응형
GridSearchCV 를 알아보자¶
-GridSearchCV 는 교차 검증(여러가지 기법들이 존재한다.) 과 하이퍼 파라미터 튜닝(weight)값을 둘다 할 수 있는 API 이며,
- 순차적으로 파라미터를 입력시켜, 최적의 파라미터를 도출 할 수 있도록 도와준다.
- GridSearchCV 는 class sklearn.model_selection.GridSearchCV(estimator, param_grid, , scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2n_jobs', error_score=nan, return_train_score=False) 로 구성이 되있다.
- GridSearchCV 는 Grid 에 포함된 여러 parameter 들의 수정해서 최적의 값을 찾도록 도와준다.
GridSearchCV클래스의 생성자로 들어가는 주요 parameter(순차적용됨.)¶
- estimator => classifier , regressor , pipeline 이 사용될 수 있다.
- param_grid => 딕셔너리를 입력해서 파라매터를 조정합니다,
- scoring => scoring 값에 들어가는 측정 인자를 입력합니다.
- cv => 교차 검증을 위한 분할되는 학습 / 데이터 세트의 개수를 지정한다.
- refit =>(중요!) default(기본값) 이 True 이며, True 일시 최적의 하이퍼 패러미터로 계속 학습을 진행시킨다.
In [5]:from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import GridSearchCV from sklearn.model_selection import train_test_split #데이터를 로딩하고, 학습 데이터와 테스트 데이터 분리 iris_data = load_iris() X_train,X_test,Y_train,Y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state = 11) dtree = DecisionTreeClassifier() #파라미터를 dict형태로 준다. tree 모델의 경우 parameter 가 max_depth , max_samples_split 등 등 을 가져 2가지를 파라매터 변수로 줬다. parameters = {'max_depth': [1,2,3], 'min_samples_split':[2,3]}
In [9]:import pandas as pd # param_grid 의 하이퍼 파라미터를 3개의 train,test set fold 로 나누어 수행 설정. grid_dtree = GridSearchCV(dtree, param_grid = parameters, cv=3, refit = True) grid_dtree.fit(X_train,Y_train) # scores 를 매긴다. scores_df = pd.DataFrame(grid_dtree.cv_results_) scores_df[['params','mean_test_score','rank_test_score']]
Out[9]:params mean_test_score rank_test_score 0 {'max_depth': 1, 'min_samples_split': 2} 0.675000 5 1 {'max_depth': 1, 'min_samples_split': 3} 0.675000 5 2 {'max_depth': 2, 'min_samples_split': 2} 0.958333 3 3 {'max_depth': 2, 'min_samples_split': 3} 0.958333 3 4 {'max_depth': 3, 'min_samples_split': 2} 0.966667 1 5 {'max_depth': 3, 'min_samples_split': 3} 0.966667 1 In [13]:from sklearn.metrics import accuracy_score # 이제 최적의 parameter 값이 4,5 번째 값인 걸 알아냈다. print(grid_dtree.best_params_) # 이제 최고 성능을 가진 파라매터값으로 성능을 평가해보자. estimator = grid_dtree.best_estimator_ pred = estimator.predict(X_test) print(" 최적의 파라매터로 실행 예측 값 : {0:.4f}".format(accuracy_score(Y_test,pred)))
{'max_depth': 3, 'min_samples_split': 2} 최적의 파라매터로 실행 예측 값 : 0.9333
grid_dtree = GridSearchCV(~)에서 class 를 만들어 주었고, 여기에 여러 가지 parameter 들을 넣은 결과 제일 best 인 parameter 가 best_estimator_(best_params_ 에는 dict값만 저장이 되있음) 에 저장이 되있다. 따라서 estimator 를 grid_dtree.best_estimator_로 선언하여, 제일 좋은예측성능 값을 가진 모델로 학습을 진행시켜주었다.
반응형'머신러닝(MACHINE LEARNING)' 카테고리의 다른 글
LightGBM 데이터 분류 (0) 2021.04.14 XGboost (Ensemble 학습법) (0) 2021.04.14 교차 검증을 위한 Cross_val_score() 함수 사용법 (0) 2021.04.13 K-Fold 와 Stratified-KFold 기법 (2) 2021.04.13 Train_Test_Split 함수 사용Train_Test_Split 함수 사용 (0) 2021.04.13