관리 메뉴

DeseoDeSeo

[Machine Learning] 하이퍼 파라미터 튜닝(타이타닉 실습) 본문

Python

[Machine Learning] 하이퍼 파라미터 튜닝(타이타닉 실습)

deseodeseo 2023. 9. 6. 18:11

하이퍼 파라미터( Hyperparameter )

      : 최적의 훈련모델을 구현하기 위해 모델에 설정하는 변수

        ( 학습률, 훈련 반복횟수, 가중치 초기화 등을 결정함.)  ➜ 하이퍼파라미터 튜닝 기법을 적용하여 훈련 모델의 최적값들을 찾을 수 있음.

 

하이퍼 파라미터 튜닝
 :  n_estimators를 50 ~ 81까지 바꿔가면서 평과 결과를 확인
for i in range(50,81):
    forest_model1 = RandomForestClassifier(n_estimators=i)
    # 교차 검증으로 평가
    result = cross_val_score(forest_model1,x_train, y_train, cv=5).mean()
    print(f'n_estimators:{i}.score: {result}')

1. n_estimators를 제한   for
for i in range(50,81):  # 30
    # 2. max_depth를 제한 --> for
    for j in range(5,10):  # 5  - 5,6,7,8,9
        # 30번 * 5번 = 총 150번의 반복 과정을 돔.

✔ 최적의 하이퍼파라미터 조합을 찾기 위해서는 여러개의 for문이 필요 ( 복잡해지고 작업이 번거로워진다.)
      이 문제를 한번에 해결하는 방법

                                ↓
       한번에 여러개의 하이퍼파라미터를 튜닝해주는 함수 있음 --> GridSearchCV() 기술임. (cv =교차 검증)

GridSearchCV()
1. 하이퍼 파라미터 튜닝
 : gridearchCV(모델, 딕셔너리 형태로 저장했고 사용할 하이퍼 파라미터, cv)
    (1) 관심있는 하이퍼파라미터를 지정해야한다.
           n_estimators =[50,70,90,110,130,150] 
           max_depth= [3,4,5,6,7,8] # 트리 깊이
           max_features =[0.3, 0.4, 0.5, 0.6, 0.7]
      (2) 파라미터를 딕셔너리 형태로 저장해야한다.
param={ 'n_estimators' :[50,70,90,110,130,150],
             'max_depth': [3,4,5,6,7,8],  # 트리 깊이
         'max_features' : [0.3, 0.4, 0.5, 0.6, 0.7] }
from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(RandomForestClassifier(),param,cv=5)
2. 학습
grid.fit(x_train, y_train)
3. 최적의 파라미터 조합 찾기
grid.best_params_

4. 최적의 파라미터일 때 best_score_ 찾기
grid.best_score_

< 자세하게 찾아보기 >

param ={'n_estimators':[48,49,50,51,52],
           'max_depth':[6,7,8,9,10],
        'max_features':[0.6, 0.7, 0.8] }
grid1=GridSearchCV(RandomForestClassifier(), param, cv=5)
grid1.fit(x_train, y_train)
print(grid1.best_params_)
print(grid1.best_score_)

'max_depth': 8,  'max_features': 0.7,  'n_estimators': 130 
     ➜ 베스트 모델 생성
forest_mode1 = RandomForestClassifier(max_depth = 8, max_features = 0.7, n_estimators = 130)
forest_model1.fit(x_train, y_train)
# 학습한 모델로 예측
pred = forest_model.predict(x_test)
# 평가 결과 답안지 불러오기.
sub =pd.read_csv('./data/titanic/gender_submission.csv')
# 평가 결과를 답안지에 예측한 값 넣기
sub['Survived'] = pred
# 예측한 값 내보내기 -> kaggle
sub.to_csv('sbg_submission04.csv',index=False)