-
Cross ValidationAI ML/ML 2021. 1. 19. 23:45
Cross Validation¶
Stratified K Fold¶
- Stratified K Fold : 불균형한 분포도를 가진 Label 데이터 집합을 위한 KFold 방식
- stratifiedkfold = StratifiedKFold(n_splits=4,random_state=0,shuffle=False)
- stratifiedkfold.split(X,y): y값을 추가 인자로 받습니다.
In [1]:from sklearn.model_selection import StratifiedKFold skf = StratifiedKFold(n_splits=3)
In [2]:skf
Out[2]:StratifiedKFold(n_splits=3, random_state=None, shuffle=False)
TimeSeries Split¶
In [5]:import numpy as np from sklearn.model_selection import TimeSeriesSplit X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]]) y = np.array([1, 2, 3, 4, 5, 6]) tscv = TimeSeriesSplit(n_splits=3) print(tscv) TimeSeriesSplit(max_train_size=None, n_splits=3) for train, test in tscv.split(X): print("%s %s" % (train, test))
TimeSeriesSplit(max_train_size=None, n_splits=3) [0 1 2] [3] [0 1 2 3] [4] [0 1 2 3 4] [5]
★ 참고!¶
- 일반적으로 회귀에는 기본 k-겹 교차검증을 사용하고, 분류에는 StratifiedKFold를 사용한다.
- 또한, cross_val_score 함수에는 KFold의 매개변수를 제어할 수가 없으므로, 따로 KFold 객체를 만들고 매개변수를 조정한 다음에 cross_val_score의 cv 매개변수에 넣어야 한다.
교차 검증을 보다 간편하게 - Cross_val_score()¶
- cross_val_score 수행 후 반환 값은 scoring 파라미터로 지정된 성능 지표 측정값을 배열 형태로 반환
In [7]:from sklearn.model_selection import cross_val_score, cross_validate
GridSearchCV - 교차 검증과 하이퍼 파라미터 튜닝을 한 번에¶
- params_grid : 파라미터를 딕셔너리 형태로 설정
- GridSearchCV 객체의 fit 매서드에 인자 입력
- cv_result_라는 속성에 기록 → 딕셔너리 형태
In [14]:from sklearn.model_selection import GridSearchCV from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris
In [15]:iris = load_iris() iris_data = iris.data iris_target = iris.target # numpy ndarray X_train, X_test, Y_train, Y_test = train_test_split(iris_data, iris_target, test_size = 0.2, random_state = 11) dtree = DecisionTreeClassifier()
In [16]:parameters = {'max_depth' : [1,2,3], 'min_samples_split' : [2,3]}
In [17]:grid_dtree = GridSearchCV(dtree, param_grid=parameters, cv=3, refit=True) grid_dtree.fit(X_train, Y_train)
Out[17]:GridSearchCV(cv=3, estimator=DecisionTreeClassifier(), param_grid={'max_depth': [1, 2, 3], 'min_samples_split': [2, 3]})
In [18]:import pandas as pd scores_df = pd.DataFrame(grid_dtree.cv_results_)
In [20]:scores_df
Out[20]:mean_fit_time std_fit_time mean_score_time std_score_time param_max_depth param_min_samples_split params split0_test_score split1_test_score split2_test_score mean_test_score std_test_score rank_test_score 0 0.000998 0.000814 0.000665 0.000470 1 2 {'max_depth': 1, 'min_samples_split': 2} 0.675 0.675 0.675 0.675000 1.110223e-16 5 1 0.000666 0.000471 0.000664 0.000469 1 3 {'max_depth': 1, 'min_samples_split': 3} 0.675 0.675 0.675 0.675000 1.110223e-16 5 2 0.000663 0.000469 0.000666 0.000471 2 2 {'max_depth': 2, 'min_samples_split': 2} 0.925 1.000 0.950 0.958333 3.118048e-02 3 3 0.000665 0.000470 0.000000 0.000000 2 3 {'max_depth': 2, 'min_samples_split': 3} 0.925 1.000 0.950 0.958333 3.118048e-02 3 4 0.000333 0.000470 0.000666 0.000471 3 2 {'max_depth': 3, 'min_samples_split': 2} 0.925 1.000 0.975 0.966667 3.118048e-02 1 5 0.000666 0.000471 0.000000 0.000000 3 3 {'max_depth': 3, 'min_samples_split': 3} 0.925 1.000 0.975 0.966667 3.118048e-02 1 In [21]:# GridSearchCV의 refit으로 이미 학습된 estimator 반환 estimator = grid_dtree.best_estimator_
In [24]:from sklearn.metrics import accuracy_score pred = estimator.predict(X_test) accuracy_score(Y_test, pred)
Out[24]:0.9333333333333333
'AI ML > ML' 카테고리의 다른 글
Label Encoding + One Hot Encoding (0) 2021.01.21 How to deal with missing data (0) 2020.06.24 딥러닝에서 Learning Rate를 최적화하는 방법 (0) 2020.06.23