AI/MachineLearning

Grid Search

oaho 2023. 2. 27. 01:47
반응형

💡 KNN 알고리즘의 경우 K 값 = n_neighbors 옵션 값, Decision Tree알고리즘에서 max_depth 옵션 값을 어떻게 설정해야하는가 ❓

 

파라미터 값 설정에 따라 모델의 성능이 달라진다 ❗

 

 

방법 :

▪ Grid Search

1. 성능을 테스트할 파라미터 값의 범위 지정(딕셔너리 형태)

2. 위 파라미터 값 범위를 모두 사용하는 Grid Search 모델 선언 후 학습

3. 학습 데이터에 대해 가장 좋은 성능을 보인 파라미터 값으로 자동으로 학습

4. 이후 예측 및 평가 과정을 바로 진행

 

▪ Random Search

1. 성능을 테스트할 파라미터 값의 범위 지정(딕셔너리 형태)

2. 위 파라미터 값 범위에서 몇 개 선택할 지 정하여 Grid Search 모델 선언 후 학습

3. 학습 데이터에 대해 가장 좋은 성능을 보인 파라미터 값으로 자동으로 학습

4. 이후 예측 및 평가 과정을 바로 진행

 

K-Fold Cross Validation을 위해 cv 값 지정 => 실제 수행되는 횟수 : 파라미터 조합 수 X cv 값

 

 

 Random
Search
범위지정 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
무작위수행 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
최적값 9 선정
Grid
Search
범위지정 6, 7, 8, 9, 10, 11, 12
수행 6, 7, 8, 9, 10, 11, 12
최적값 10 선정

 

 

성능예측

 

1. 모듈 불러오기

from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.model_selection import cross_val_score, GridSearchCV

 

 

2. 선언하기

model_dt = DicisionTreeRegressor(random_state=1)

 

 

3. 성능예측

cv_score = cross_val_score(model_dt, x_train, y_train, cv=5)

 

5번의 cross validation 프로세스를 거쳐서 test데이터셋의 5번의 정확성을 계산한다.

 

 

입력 :

print(cv_score)
print(cv_score.mean())

 

출력 :

 

 

모델 튜닝

 

Grid Search로 튜닝 진행

GridSearchCV 알고리즘을 사용하는 모델을 선언한다. 

다음 정보를 최종 모델에 파라미터로 전달한다.

  • 기본 모델 이름
  • 파라미터 변수
  • cv : K-Fold 분할 개수(기본값=5)
  • n_iter : 시도 횟수(기본값=10)
  • scoring : 평가 방법

 

1. 파라미터 선언

param = {'max_depth' : range(1, 51)}

 

2. 선언하기

model_dt = DecisionTreeRegressor(random_state=1)

model = GridSearchCV(model_dt,
                     param,
                     cv=5,
                     scoring='r2')

 

3. 학습하기

model.fit(x_train, y_train)

 

4. 결과확인

 

model.cv_results : 성능 테스트와 관련된 많은 정보가 포함되어 있음

-> 이 중 중요한 정보만 추출해서 확인

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)

 

변수 중요도 시각화하기

model.best_estimator_

model.figure(figsize=(5, 5))
plt.barh(y=list(x), width=model.best_estimator_.feature_importances_)
plt.show()

=>

 

5. 실제 성능 평가

 

학습을 통해 예상한 성능과 실제 평가에 따른 성능의 차이가 있을 수 있다.

y_pred = model.predict(x_test)

print('MAE:', mean_absolute_error(y_test, y_pred))
print('R2-Score:', r2_score(y_test, y_pred))

 

=>

 

 

반응형