Scikit-learn로 그리드 서치

Python에서의 하이퍼파라미터 튜닝

Alex Scriven

Data Scientist

GridSearchCV 객체

 

GridSearchCV 객체 소개:

sklearn.model_selection.GridSearchCV(
    estimator,
    param_grid, scoring=None, fit_params=None,
    n_jobs=None, refit=True, cv='warn',
    verbose=0, pre_dispatch='2*n_jobs',
    error_score='raise-deprecating',
    return_train_score='warn')
Python에서의 하이퍼파라미터 튜닝

그리드 서치 단계

 

그리드 서치 단계:

  1. 하이퍼파라미터를 튜닝할 알고리즘(추정기) 선택
  2. 튜닝할 하이퍼파라미터 지정
  3. 각 하이퍼파라미터의 값 범위 정의
  4. 교차 검증 방식 설정
  5. 그리드에서 ‘최선’을 고를 점수 함수 정의
  6. 추가 유용한 정보나 기능 포함
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 입력 항목

주요 입력:

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'estimator'

 

estimator 입력:

  • 본질적으로 우리가 사용할 알고리즘입니다
  • 이미 KNN, 랜덤 포레스트, GBM, 로지스틱 회귀를 다뤘습니다

 

기억하세요:

  • GridSearchCV 객체당 추정기는 하나만 사용합니다
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'param_grid'

param_grid 입력:

  • 테스트할 하이퍼파라미터와 값을 설정합니다

목록 대신:

max_depth_list = [2, 4, 6, 8]
min_samples_leaf_list = [1, 2, 4, 6]

다음처럼 작성합니다:

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'param_grid'

param_grid 입력:

기억하세요: param_grid 딕셔너리의 키는 유효한 하이퍼파라미터여야 합니다.

예: 로지스틱 회귀 추정기에서

# Incorrect
param_grid = {'C': [0.1,0.2,0.5],
              'best_choice': [10,20,50]}
ValueError: Invalid parameter best_choice for estimator LogisticRegression
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'cv'

cv 입력:

  • 교차 검증 방식을 선택합니다
  • 정수를 주면 k-겹 교차 검증을 수행하며 보통 5 또는 10을 사용합니다

k-겹 위키백과

Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'scoring'

 

scoring 입력:

  • 최적 그리드 칸(모델)을 고를 점수를 지정합니다
  • 직접 정의하거나 scikit-learn의 metrics 모듈을 사용합니다

내장 스코어링 목록 확인:

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'refit'

 

refit 입력:

  • 최적 하이퍼파라미터로 학습 데이터를 다시 적합합니다
  • GridSearchCV 객체를 추정기처럼(예측용) 사용할 수 있게 합니다
  • 매우 유용한 옵션입니다
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'n_jobs'

n_jobs 입력:

  • 병렬 실행을 돕습니다
  • 여러 모델을 순차가 아닌 동시에 생성합니다

유용한 코드:

import os
print(os.cpu_count())

다른 작업도 하려면 모든 코어 사용에 주의하세요!

Python에서의 하이퍼파라미터 튜닝

GridSearchCV 'return_train_score'

 

return_train_score 입력:

  • 수행한 학습 단계의 통계를 기록합니다
  • 바이어스-분산 트레이드오프 분석에 유용하지만 계산 비용이 듭니다
  • 최적 모델 선택에는 도움되지 않고 분석용입니다
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 객체 구성하기

 

직접 GridSearchCV 객체 만들기:

# Create the grid
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}

#Get a base classifier with some set parameters. rf_class = RandomForestClassifier(criterion='entropy', max_features='auto')
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 객체 구성

 

모든 요소 결합:

grid_rf_class = GridSearchCV(
    estimator = rf_class,
    param_grid = parameter_grid,
    scoring='accuracy',
    n_jobs=4,
    cv = 10,
    refit=True,
    return_train_score=True)
Python에서의 하이퍼파라미터 튜닝

GridSearchCV 객체 사용하기

 

refitTrue로 설정했으므로 객체를 바로 사용할 수 있습니다:

#Fit the object to our data
grid_rf_class.fit(X_train, y_train)

# Make predictions
grid_rf_class.predict(X_test)
Python에서의 하이퍼파라미터 튜닝

Lass uns üben!

Python에서의 하이퍼파라미터 튜닝

Preparing Video For Download...