#!/usr/bin/env python3
Simple Grid Search
머신러닝의 성능을 높이는 방법에는 여러가지가 있지만
여기서는 매개변수를 튜닝하여 일반화 성능을 높이는 것이 목표입니다.
가장 널리 사용하는 방법은 grid search그리드 서치 이며
관심있는 매개변수들을 대상으로 가능한 모든 조합을 시도해보는 것입니다.
SVM의 경우
커널의 폭에 해당하는 gamma와 규제 매개변수 C가 중요합니다.
SVM에 더 자세한 정보는 이전 포스팅을 참조하세요
매개변수 C와 gamma에 [0.001, 0.01, 0.1, 1, 10, 100] 값을 적용해보면
조합의 수는 총 6x6=36개가 나오며
모든 조합을 살펴보기 위해 SVM 매개변수 설정 테이블을 다음처럼 만들 수 있습니다.
매개 변수 설정 테이블
간단한 grid search의 경우는 아래처럼 코드를 짤 수 있습니다.
# library import
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# data load
iris = load_iris()
# data partition
x_train, x_test, y_train, y_test = \
train_test_split(iris.data, iris.target,
test_size=0.3, random_state=0)
print('train set size:{}, test set size:{}'.format(x_train.shape, x_test.shape))
# train set size:(105, 4), test set size:(45, 4)
# grid search
best_score = 0
values = [0.001, 0.01, 0.1, 1, 10, 100]
for g in values:
for c in values:
svc = SVC(gamma=g, C=c).fit(x_train, y_train)
score = svc.score(x_test, y_test)
if score > best_score:
best_score = score
best_param = {'C':c, 'gamma':g}
print('best score ==> {:.3f}'.format(best_score))
print('best parameter ==> {}'.format(best_parameter))
# best score ==> 0.978
# best parameter ==> {'C': 100, 'gamma': 0.001}
>> grid search를 통해 C=100, gamma: 0.001일 때 가장 좋은 결과가 나온 것을 확인할 수 있습니다.
이 결과를 보면 이 데이터셋에서 모델 정확도가 97.8%라고 보고할 수 있습니다.
하지만 이런 주장은 다음과 같은 이유로 잘못될 수도 있습니다.
1. 이 정확도는 새로운 데이터까지 이어지지 않을 수 있습니다.
매개변수를 조정하기 위해 테스트 세트를 이미 사용했기 때문에 테스트세트는 모델이 얼마나 좋은지 평가하는 데 사용할 수 없습니다.
즉 평가를 위해서는 모델을 만들 때 사용하지 않은 독립된 데이터셋이 필요하고
다음 장에서 독립된 데이터셋을 다루는 방법을 살펴보겠습니다.
참고 자료:
[1]Introduction to Machine Learning with Python, Sarah Guido
'모델 평가와 성능 향상 > 그리드 서치' 카테고리의 다른 글
nested cross-validation (1) | 2018.04.05 |
---|---|
asymmetric parameter with grid search (0) | 2018.04.05 |
cross-validation result analysis (2) | 2018.04.05 |
parameter overfitting (0) | 2018.04.04 |