그리드 서치로 하이퍼파라미터 튜닝
2024. 8. 12. 14:17ㆍML
로지스틱 회귀의 C값이나 의사 결정 트리의 깊이 값과 같이 별도로 최적화하는 알고리즘의 파라미터를 하이퍼파라미터라고 합니다. 머신러닝 기초 부분에서는 이 값을 정해진 값으로 땡치는 경향이 있지만, 제대로 된 방법으로 하이퍼파라미터를 최적화 할 수 있습니다. 하이퍼파라미터를 최적화 하는 방법은 여러가지가 있지만 가장 간편한 것은 그리드 서치로서, 리스트로 지정된 여러 하이퍼파라미터 값 중 최적의 조합을 찾는 방법입니다.
우선 오늘의 데이터인 위스콘신 유방암 데이터를 준비하겠습니다. 이 데이터는 첫번째 속성이 1이면 양성, 0이면 음성을 나타냅니다.
import pandas as pd
import numpy as np
#위스콘신 유방암 데이터 불러오기
df = pd.read_csv('https://archive.ics.uci.edu/ml/''machine-learning-databases/''breast-cancer-wisconsin/wdbc.data',header=None)
from sklearn.preprocessing import LabelEncoder
#0->환자코드, 1->양성/악성, 2~->데이터
X = df.loc[:,2:].values
y = df.loc[:,1].values
le = LabelEncoder()
y = le.fit_transform(y)
le.transform(['M','B'])
#훈련/시험 데이터 분할
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.20,stratify=y,random_state=1)
#파이프라인으로 표준화와 차원축소 실행
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
pipe_lr = make_pipeline(StandardScaler(),PCA(n_components=2))
pipe_lr.fit(X_train,y_train)
그리드서치를 수행하여 선형 SVM을 사용할 경우에 사용할 최적의 하이퍼파라미터 값들을 도출하고, 적용 시 점수까지 확인합니다.
#그리드 서치 -> 모든 하이퍼파라미터 경우의 수 조합
from os import pipe
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
pipe_svc = make_pipeline(StandardScaler(),SVC(random_state=1))
#튜닝하려는 매개변수 리스트 지정
param_range = [0.0001,0.001,0.01,0.1,1.0,10.0,100.0,1000.0]
#선형 SVM의 경우 규제 매개변수 C만 튜닝. RBF 커널 SVM에서는 C와 Gamma 매개변수 튜닝.
param_grid = [{'svc__C':param_range,'svc__kernel':['linear']},{'svc__C':param_range,'svc__gamma':param_range,'svc__kernel':['rbf']}]
gs = GridSearchCV(estimator=pipe_svc,param_grid=param_grid,scoring='accuracy',cv=10, refit=True,n_jobs=-1)
gs = gs.fit(X_train,y_train)
print(gs.best_params_)
print(gs.best_score_)
비슷한 방식을 로지스틱 회귀에도 적용해 보겠습니다.
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
pipe_lr = make_pipeline(StandardScaler(),PCA(n_components=2),LogisticRegression(random_state=1,penalty='l2'))
# 튜닝하려는 매개변수 리스트 지정
param_range = [0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0]
# 로지스틱 회귀의 경우 규제 매개변수 C만 튜닝
param_grid = [{'logisticregression__C': param_range}]
gs = GridSearchCV(estimator=pipe_lr, param_grid=param_grid, scoring='accuracy', cv=10, refit=True, n_jobs=-1)
gs = gs.fit(X_train, y_train)
print(gs.best_params_)
print(gs.best_score_)
'ML' 카테고리의 다른 글
데이터 차원 축소를 위한 PCA, LDA, K-PCA (0) | 2024.08.07 |
---|---|
모델 복잡도 제한을 위한 L1 / L2 규제 (1) | 2024.08.03 |
이진분류 모델들에 대한 간단한 정리 (0) | 2024.08.01 |