«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Recent Posts
Today
Total
관리 메뉴

짜리몽땅 매거진

[ML] 랜덤 포레스트 모델 하이퍼파라미터 튜닝하기 본문

Data/Machine Learning

[ML] 랜덤 포레스트 모델 하이퍼파라미터 튜닝하기

쿡국 2024. 6. 25. 10:07

하이퍼파라미터 튜닝은 머신 러닝 모델의 성능을 최적화하는 중요한 과정이다. 하이퍼파라미터는 모델 학습 전에 설정되는 파라미터로, 학습 과정 자체를 제어한다. 이러한 하이퍼파라미터의 적절한 조정은 모델의 성능을 크게 향상시킬 수 있다.

 

하이퍼파라미터 튜닝의 중요성

하이퍼파라미터 튜닝은 모델의 성능을 최대화하고, 과적합을 방지하는 데 중요하다. 특히, 대규모 데이터셋과 복잡한 모델에서 하이퍼파라미터의 영향이 크기 때문에, 적절한 튜닝 과정을 거치는 것이 중요하다. 이 과정은 시간과 자원이 많이 소모되기 때문에, 효율적인 방법을 선택하는 것이 중요하다.

 

car_evaluation 샘플 데이터셋을 활용해 랜덤포레스트 모델링을 한 뒤, 하이퍼파라미터 튜닝을 진행해보자.


1. 모델링

from sklearn.ensemble import RandomForestClassifier

rfc1 = RandomForestClassifier(n_estimators=10, random_state=111)

#학습시키고 예측값 확인
rfc1.fit(X_train, y_train)
y_pred1_train =rfc1.predict(X_train) #train값 예측
y_pred1_test = rfc1.predict(X_test) #test값 예측

#정확도 확인하기
#train, test 학습 정확도
from sklearn.metrics import accuracy_score
print('모델 정확도 train {0:0.4f}'.format(accuracy_score(y_train, y_pred1_train)))
print('모델 정확도 test {0:0.4f}'.format(accuracy_score(y_test, y_pred1_test)))

 

사전에 미리 인코딩 작업과 train, test 데이터로 나눈 작업을 마친 train데이터를 학습시키고 정확도를 계산해 모델의 성능을 확인한다. 성능을 좀 더 높이기 위해 하이퍼파라미터 튜닝 기법을 적용해보자.

 

2. GridSearch로 튜닝하기

from sklearn.model_selection import GridSearchCV #이 모듈을 통해서 서칭을 하는 것

#하이퍼 파라미터를 지정하고, 그 안에 grid range를 설정해줘야 한다.
params = {
    'max_depth':[5,10,15],
    'min_samples_leaf':[1,5,10]
}

rf_clf = RandomForestClassifier(n_estimators=200, random_state=111)
grid_cv = GridSearchCV(rf_clf, param_grid = params, cv= 5 )
grid_cv.fit(X_train, y_train)
print(grid_cv.best_params_) #출력 결과 : {'max_depth': 15, 'min_samples_leaf': 1}

rfc4 = RandomForestClassifier(n_estimators=200, max_depth=15, min_samples_leaf=1 ,random_state=111) #rfc1모델

rfc4.fit(X_train, y_train)
y_pred4_train =rfc4.predict(X_train) #train값 예측
y_pred4_test = rfc4.predict(X_test) #test값 예측

# 튜닝한 값으로 모델 정확도 출력
from sklearn.metrics import accuracy_score
print('모델 정확도 train {0:0.4f}'.format(accuracy_score(y_train, y_pred4_train)))
print('모델 정확도 test {0:0.4f}'.format(accuracy_score(y_test, y_pred4_test)))

 

GridSearch를 통해 출력한 최적의 파라미터 값을 다시 모델에 입력해 학습시킨 후 정확도를 출력하면 성능이 향상된 것을 확인할 수 있다.

 

3. BayesianOptimization으로 튜닝하기

from bayes_opt import BayesianOptimization

# 하나의 함수를 만들어서 베이지안 그리드 진행
def rf_eval(n_estimators, max_depth, min_samples_leaf):
    rfc = RandomForestClassifier(
    n_estimators = int(n_estimators),
    max_depth = int(max_depth),
    min_samples_leaf = int(min_samples_leaf))

    return cross_val_score(rfc, X_train, y_train, scoring= 'accuracy', cv=5).mean()

optimizer = BayesianOptimization(
                f = rf_eval,
                pbounds={
                    'n_estimators':(100,300),
                    'max_depth':(10,30),
                    'min_samples_leaf':(2,10),
                }, random_state=111)
                
optimizer.maximize(n_iter=20, init_points=5)

 

다음과 같이 베이지안 최적화는 성능이 잘 나온 파라미터 값들을 알려준다. GridSearch에 비해 효율적이지만, 구현이 복잡할 수 있다.

'Data > Machine Learning' 카테고리의 다른 글

[ML] 평가 지표  (0) 2024.06.23
[ML] Kmeans 알고리즘 + DBSCAN  (0) 2024.06.23
[ML] KNN 알고리즘  (0) 2024.06.22
[ML] Feature Selection  (0) 2024.06.22
[ML] 데이터 스케일링  (0) 2024.06.05