과대적합을 피하기 위해 결정트리의 분화를 방지하는 역할을 한다.
모델 성능을 최적화시킬 매개변수를 찾아주는 다양한 시도로 하이퍼파라미터를 이용하는데,
실제로 학습하기 전에 수행한다.
KNN 알고리즘
- n_neighbors : 검색할 이웃의 수 ( 보통 평균, 최빈값 사용 )
Descision Tree 알고리즘
- max_depth : 트리의 최대 깊이 (default: None)
- min_samples_split : 노드를 분할하기 위한 최소 샘플 데이터 수 ( default: 2 )
- min_ samples_leaf : 분할할 시에 왼쪽, 오른쪽 리프노드에서 가져야할 최소 샘플 데이터 수 ( default : 1)
- n_estimators : 생성할 tree의 개수 ( default : 100)
1. 모델 튜닝
param = {'n_neighbors': range(3, 11)}
param = {'max_depth': range(1,51)}
2-1. Grid Search
파라미터 범위를 지정하고 모든 파라미터 값 범위를 사용해서 학습
Random Search에서 수행 횟수를 뺀것 (n_iter)
# 불러오기
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import *
model = GridSearchCV(DecisionTreeRegressor(), # 기본 모델
param, # 파라미터 범위
cv=5, # k분할 개수
scoring='r2')
2-2. Random Search
파라미터 범위를 지정하고 넓은 범주에서 몇개 선택해서 조합하여 학습
- 기본 모델 이름
- 파라미터 변수
- cv: K-Fold 분할 개수 > cross validation가 들어가 있다. (기본값=5)
- n_iter: 시도 횟수(기본값=10)
- scoring: 평가 방법
# 불러오기
from sklearn.model_selection import RandomizedSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import *
# Random Search 선언
# cv=5
# n_iter=20
# scoring='r2'
model = RandomizedSearchCV(DecisionTreeRegressor(), # 기본 모델
param, # 파라미터 범위
cv=5, # k분할 개수
n_iter=20 # 몇 개를 선택할 것인지
scoring='r2') # 사용할 평가 지표
# 학습하기
model.fit(x_train, y_train)
3. 중요 정보 확인
- model.cv_results_['mean_test_score']: 테스트로 얻은 성능
- model.best_params_: 최적의 파라미터
- model.best_score_: 최고의 성능
# 중요 정보 확인
print('=' * 80)
print(model.cv_results_['mean_test_score'])
print('-' * 80)
print('최적파라미터:', model.best_params_)
print('-' * 80)
print('최고성능:', model.best_score_)
print('=' * 80)
- best_estimator_.model.best_estimator_ : 변수 중요도
# 변수 중요도
plt.figure(figsize=(5, 5))
plt.barh(y=list(x), width=model.best_estimator_.feature_importances_)
plt.show()
'KT AIVLE School > 머신러닝' 카테고리의 다른 글
Random Forest 및 앙상블 (0) | 2024.10.04 |
---|---|
클래스 불균형 (0) | 2024.10.04 |
K-Fold Cross Validation (0) | 2024.10.02 |
기본 알고리즘 4가지 (0) | 2024.09.30 |
Graphviz 사용 준비 (2) | 2024.09.27 |