짜리몽땅 매거진
[ML] 랜덤 포레스트 모델 하이퍼파라미터 튜닝하기 본문
하이퍼파라미터 튜닝은 머신 러닝 모델의 성능을 최적화하는 중요한 과정이다. 하이퍼파라미터는 모델 학습 전에 설정되는 파라미터로, 학습 과정 자체를 제어한다. 이러한 하이퍼파라미터의 적절한 조정은 모델의 성능을 크게 향상시킬 수 있다.
하이퍼파라미터 튜닝의 중요성
하이퍼파라미터 튜닝은 모델의 성능을 최대화하고, 과적합을 방지하는 데 중요하다. 특히, 대규모 데이터셋과 복잡한 모델에서 하이퍼파라미터의 영향이 크기 때문에, 적절한 튜닝 과정을 거치는 것이 중요하다. 이 과정은 시간과 자원이 많이 소모되기 때문에, 효율적인 방법을 선택하는 것이 중요하다.
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] Feature Selection (7) | 2024.07.31 |
---|---|
[ML] TSP알고리즘으로 최적 노선 추천하기(+ k-means, Gradient Boosting) (0) | 2024.07.02 |
[ML] 평가 지표 (0) | 2024.06.23 |
[ML] KNN 알고리즘 (0) | 2024.06.22 |
[ML] 데이터 스케일링 (0) | 2024.06.05 |