머신러닝 (Machine Learning)/python Scikit-learn library

Model Selection 모듈(학습/테스트 분리,교차검증)

DS지니 2021. 2. 10. 16:44
728x90
반응형

사이킷런 Model Selection 모듈

1. 학습데이터와 테스트 데이터 세트 분리(train_test_split())

2. 교차 검증 분할 및 평가

3. 하이퍼 파라미터 튜닝을 위한 다양한 함수와 클래스 제공

 

>> 더 자세한 코드 github
https://github.com/gggggeun/study/blob/main/1.%20%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0(Scikit_learn)/3.%20Scikit-learn%20Model%20Selection%20%EB%AA%A8%EB%93%88.ipynb
 

gggggeun/study

Contribute to gggggeun/study development by creating an account on GitHub.

github.com


1. 학습/테스트 데이터 세트 분리 - train_test_split()

 

<파라미터>

  • test_size : 전체 데이터에서 테스트 데이터 세트 크기 결정. defalt=0.25 (25%)
  • shuffle : 데이터 분리 전 전체 데이터를 미리 섞는 것. defalt=True
  • random_state : 랜덤으로 나뉜 세트들을 호출할 때마다 동일한 세트들로 생성하기 위해 주어진 난수값.
  • 반환값(튜플) : 학습용 feature, 테스트용 feature, 학습용 label, 테스트용 label

 

 

 

 

 

 

<주의>

학습을 위한 데이터 양이 적을 땐 적절치 않음. -> split하지 않고, 교차검증 사용하기

 

 


 

2.  교차검증 - cross_val_score()

 

 cross_val_score()는 estimator로 분류가 입력되면 Stratified KFold CV 방식으로, 회귀면 KFold 방식으로 분할한다.

 

 

1) 교차검증의 종류

 

1. KFold CV : 가장 보편적인 교차 검증 기법. 회귀분석

   :  k-1개의 train세트와 1개의 test(or 검증)세트로 k번 검증 평가를 해서 평균으로 최종평가를 냄

 

  • 회귀에서 Stratified KFold는 지원하지 않고, KFold만 사용가능. 회귀의 연속된 숫자값을 결정값별로 분포를 정할      필요 없기 때문.
  • 분류에서 사용할 때 문제점 : 레이블 데이터가 불균형일 때 너무 편파적으로 나뉨.

2. Stratified KFold CV : 불균형한 분포도를 가진 레이블에 쓰임. 분류분석

 

  • Stratified Kfold 는 Kfold가 레이블 데이터가 제대로 분배되지 못하는 경우의 문제를 해결해 준다. 
  • 원본 데이터의 레이블 분포를 먼저 고려한뒤 이 분포와 동일하게 학습과 검증 데이터 세트를 분배하는 방식
  • 레이블 분포에 따라 학습/테스트 세트를 나눔

 

 

2) 사이킷런에서 교차검증하기

from sklearn.model_selection import cross_val_score
cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_job=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

<파라미터>

  • estimator : regressior or classifier
  • X : 피처 데이터 세트
  • y : 레이블 데이터 세트
  • scoring : 예측 성능 평가 지표
  • cv : 교차 검증 폴드 수
  • 반환 값 : 성능 지표 측정값

 

 

 

 

 


 

3. 교차 검증 + 최적 하이퍼 파라미터 튜닝을 한번에하기- GridSearchCV

 

데이터 세트를 cross-validation을 위한 학습/테스트 세트로 자동으로 분할한 뒤에 하이퍼 피라미터 그리드에 기술된 모든 파라미터를 순차적으로 적용해 최적의 파라미터를 찾을 수 있게 해준다.

 

GridSearchCV는 사용자고 튜닝하고자 하는 여러 종류의 하이퍼 파라미터를 다양하게 테스트하면서 최적의 파라미터를 편리하게 찾게 해주지만 동시에 순차적으로 파라미터를 테스트하므로 수행시간이 상대적으로 오래 걸리는 것에 유념해야 한다.

 

 

<GridSearchCV 주요 파라미터>

  • estimator : classifier, regressor, pipeline 사용가능
  • param_grid : key + 리스트 값을 가지는 딕셔너리가 주어진다. estimator의 튜닝을 위해 파라미터명과 사용될 여러 파라미터 값을 지정합니다.
  • scoring : 평가 방법. 보통 문자열(ex.'accuracy')로 지정하나 별도의 성능 평가 지표 함수도 지정할 수 있습니다.
  • cv : 교차검증을 위해 분할되는 학습/테스트 세트의 개수를 지정
  • refit : defalt=True 가장 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator 객체를 해당 하이퍼 파라미터로 재학습시킵니다.

 

 

 

 

<GridSearchCV 속성>

  • .cvresults

    • rank_test_score : 성능이 좋은 순위를 나타냄. 이때의 파라미터가 최적의 하이어 파라미터이다.(param)
    • mean_test_score : cv의 폴딩 테스트 세트에 대해 총 수행한 평가 평균값
  • .bestparams : 최적의 파라미터

  • .best_score : 최적의 정확도

  • .best_estimator : GridSearchCV의 refit으로 이미 학습된 estimator 반환

 

 

728x90
반응형