ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 사이킷런 ( Scikit-learn ) - 5
    Python Machine Learning/Scikit-learn 2020. 7. 22. 16:58

    cross_val_score( )

    - 사이킷런에서는 교차 검증을 좀 더 편리하게 수행할 수 있게 해주는 API를 제공하는데 그 중 대표적인 것이 cross_val_score( )입니다. 

     

    앞서 설명한 KFold로 데이터를 학습하고 예측하는 코드를 보면 다음과 같은 과정을 거칩니다.

    1. 폴드 세트를 설정하고

    2. for루프에서 반복으로 학습 및 테스트 데이터의 인덱스를 추출한 뒤

    3. 반복적으로 학습과 예측을 수행하고 예측 성능을 반환.

     

    이러한 과정을 한꺼번에 수행해주는 API가 cross_val_score( ) 입니다.

    cross_val_score( ) API의 기본 선언 형태는 

    cross_val_score( estimaor, X, y= None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

    이며 이 중 estimator, X, y, scoring, cv가 주요 파라미터로

    estimator는 사이킷런의 분류 알고리즘 클래스인 Classifier 또는 회귀 알고리즘 클래스인 Regressor를 의미하고,

    X는 피처 데이터 세트, y는 레이블 데이터 세트, scoring은 예측 성능 평가 지표를 기술하며, cv는 교차 검증 폴드 수를 의미합니다.

     

    cross_val_score( )는 classifier가 입력되면 Stratified K폴드 방식으로 레이블값의 분포에 따라 학습/테스트 세트를 분할하고 수행 후 반환 값은 scoring 파라미터로 지정된 성능 지표 측정값을 배열 형태로 반환합니다.

     

    다음 예제를 보면 교차 검증 폴드 수는 5, 성능 평가 지표는 정확도인 accuracy 입니다.

    --> cv로 지정된 횟수만큼 scoring 파라미터로 지정된 평가 지표로 평가 결과값을 배열로 반환한 후 이를 평균해 평가 수치로 사용.

    --> 앞서 StratifiedKFold의 수행 결과를 비교해 보면 각 교차 검증별 정확도와 평균 검증 정확도가 모두 동일하며 그 이유는 cross_val_score( )가 내부적으로 StratifiedKFold을 사용하기 때문이며 즉 Estimator를 학습( fit ), 예측( predict ), 평가 ( evaluation )시켜주므로 간단하게 교차 검증을 수행 가능.

     

    GridSearchCV

    - 지금 단계에서 머신러닝 알고리즘을 구성하는 하이퍼 파라미터에 관해 언급하는 것은 이른감이 있지만 하이퍼 파라미터는 머신러닝 알고리즘을 구성하는 주요 구성 요소이며, 이 값을 조정해 알고리즘의 예측 성능을 개선할 수 있습니다.

    - 사이킷런은 GridSearchCV API를 이용해 Classifier나 Regressor와 같은 알고리즘에 사용되는 하이퍼 파라미터를 순차적으로 입력하면서 편리하게 최적의 파라미터를 도출할 수 있는 방안을 제공합니다.

     

    간단한 예제로 붓꽃 데이터를 예측 분석하는데 GridSearchCV를 이용해보면 

    우선 train_test_split( )을 이용해 학습 데이터와 테스트 데이터를 먼저 분리하고 학습 데이터에서 GridSearchCV를 이용해 최적 하이퍼 파라미터를 추출하고, 결정 트리 알고리즘을 구현한 DecisionTreeClassifier의 중요 하이퍼 파라미터인

    max_depth와 min_samples_split의 값을 변화시키면서 최적화를 진행하는 순으로 진행해보겠습니다.

     

     

     

    --> 데이터를 로딩하고 학습 데이터와 테스트 데이터 분리.

     

    --> 파라미터를 딕셔너리 형태로 설정.

     

    주요 칼럼별 의미

    1. params 칼럼 : 수행할 때마다 적용된 개별 하이퍼 파라미터값
    2. reank_test_score : 하이퍼 파라미터별로 성능이 좋은 score 순위.
    3. mean_test_score : 개별 하이퍼 파라미터별로 cv의 폴딩 테스트 세트에 대해 총 수행한 평가 평균값.

    --> param_grid의 하이퍼 파라미터들을 3개로 나누어서 테스트 수행 설정.  
    # refit=True 가 default 임. True이면 가장 좋은 파라미터 설정으로 재학습 시킴.

    --> 붓꽃 Train 데이터로 param_grid의 하이퍼 파라미터들을 순차적으로 학습/평가 .

    --> GridSearchCV 결과는 cv_results_ 라는 딕셔너리로 저장됨. 이를 DataFrame으로 변환.

    --> 결과는 하이퍼 파라미터 max_depth와 min_samples_split을 순차적으로 6번 변경하면서 학습 및 평가를 수행한 것.

    --> 인덱스 번호 4번과 5번이 결과 예측 성능이 1위라는 의미로 그 때의 mean_test_score 칼럼 값이 공동 1등

     

    --> GridSearchCV 객체의 fit( ) 을 수행하면 최고 성능을 나타낸 하이퍼 파라미터의 값과 그 때의 평가 결과 값이 각각

    best_params_ , best_score_ 속성에 기록됩니다. ( = cv_results_의 rank_test_score가 1 )

     

    --> refit = True이면 GridSearchCV가 최적 성능을 나타내는 하이퍼 파라미터로 Estimator를 학습해 best_estimator_로 저장되며, 이미 학습된 best_estimator_를 이용해 앞에서 train_test_splt( )으로 분리한 테스트 데이터 세트에 대해 예측하고 성능을 평가합니다.

    --> 학습 데이터를 GridSearchCV를 이용해 최적 하이퍼 파라미터 튜닝을 수행한 뒤에 별도의 테스트 세트에서 이를 평가하는 것이 일반적인 머신러닝 모델 적용 방법입니다.

     

Designed by Tistory.