[머신러닝] 하이퍼파라미터 / 최적의 하이퍼파라미터 찾기란 무엇인가? / Random Forest와 하이퍼파라미터
2025. 2. 27. 22:11ㆍAI & DS/머신러닝
하이퍼파라미터(Hyperparameter)란?
- 하이퍼파라미터(Hyperparameter)는 모델이 학습하기 전에 설정해야 하는 값(설정값, 옵션)
- 모델이 직접 학습하는 것이 아니라, 사람이 설정해야 하는 값 -> 모델의 성능을 조정하는 중요한 역할
하이퍼파라미터 vs 모델이 학습하는 파라미터
- 모델이 학습하는 파라미터 (모델 내부에서 자동으로 학습됨) : 데이터를 보고 자동으로 최적화됨
- 로지스틱 회귀의 가중치(W)와 편향(b)
- 신경망(딥러닝)에서 뉴런 간의 가중치 값
- 하이퍼파라미터 (사람이 직접 설정해야 함) : 학습 전에 사람이 직접 설정해야 하고, 모델이 자동으로 찾지 못함
- 랜덤 포레스트의 n_estimators (트리 개수)
- KNN의 K 값 (몇 개의 이웃을 볼 것인지)
- 신경망에서 learning rate (학습률)
랜덤 포레스트에서 최적의 하이퍼파라미터 찾기
랜덤 포레스트에는 여러 개의 하이퍼파라미터가 있음 -> 예를 들어, 다음 두 가지를 조정할 수 있음
하이퍼파라미터 | 설명 |
n_estimators | 몇 개의 결정 트리를 만들 것인가? (트리 개수) |
max_depth | 각 트리의 최대 깊이는 얼마로 할 것인가? |
- 적절한 하이퍼파라미터를 찾는 과정이 중요하다.
- 예를 들어,
- n_estimators = 10, max_depth = 5 : 너무 단순한 모델 (과소적합, underfitting)
- n_estimators = 100, max_depth = 10 : 좋은 성능을 보임
- n_estimators = 500, max_depth = 50 : 너무 복잡한 모델 (과적합, overfitting)
- 예를 들어,
최적의 하이퍼파라미터 찾기 : GridSearchCV
- GridSearchCV 또는 RandomizedSearchCV : 자동으로 최적의 값을 찾아줌
- 모든 조합을 테스트해서 가장 성능이 좋은 하이퍼파라미터를 자동으로 찾아주는 방법
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 1. 랜덤 포레스트 모델 생성
rf_model = RandomForestClassifier()
# 2. 탐색할 하이퍼파라미터 범위 설정
params = {
'n_estimators': [50, 100, 150, 200], # 트리 개수
'max_depth': [5, 10, 15] # 트리 깊이
}
# 3. GridSearchCV 설정 (5-Fold 교차 검증 사용)
grid_search = GridSearchCV(rf_model, param_grid=params, cv=5, scoring='accuracy')
# 4. 모델 학습 (최적의 하이퍼파라미터 찾기)
grid_search.fit(X_train, y_train)
# 5. 최적의 하이퍼파라미터 출력
print("최적의 파라미터:", grid_search.best_params_)
최적의 파라미터: {'max_depth': 10, 'n_estimators': 150}
# 즉, 트리 개수 150개, 깊이 10일 때 가장 좋은 성능을 보였음
최적의 파라미터로 학습된 랜덤 포레스트 모델 가져오기
최적의 모델 선택 (best_rf_model = grid_search.best_estimator_)
best_rf_model = grid_search.best_estimator_
- grid_search.best_estimator_ : 최적의 하이퍼파라미터로 학습된 랜덤 포레스트 모델을 가져옴
- 즉, 가장 성능이 좋은 모델을 선택하여 이후 예측에 사용
📌 왜 이걸 할까?
- GridSearchCV는 여러 개의 모델을 비교해서 가장 좋은 모델을 찾는 과정
- 최적의 모델(best_estimator_)을 저장해서 테스트 데이터에서 예측을 수행하기 위해 사용
예측 수행 (best_rf_model.predict())
rf_pred = best_rf_model.predict(X_test_scaled)
- X_test_scaled(테스트 데이터)를 입력하여 클래스를 예측
- rf_pred에는 모델이 예측한 값이 들어감 (예: [0, 1, 1, 0, ...])
[0, 1, 1, 1, 0, 0, 1, 1, 0, ...]
# 테스트 데이터에 대해 모델이 양성(0)인지 악성(1)인지 예측
모델 평가 (Confusion Matrix 출력)
rf_matrix = confusion_matrix(y_test, rf_pred)
print("Random Forest Confusion Matrix:")
print(rf_matrix)
- 혼동 행렬(Confusion Matrix)을 계산하여 모델의 성능을 평가
- y_test(실제 값)과 rf_pred(예측 값)를 비교
Random Forest Confusion Matrix:
[[ 59 4]
[ 1 107]]
'AI & DS > 머신러닝' 카테고리의 다른 글
[머신러닝] 데이터가 너무 한쪽으로 치우쳐있는 문제 해결하기 - bin/로그 변환/이상치 제거/Box-Cox 변환 (0) | 2025.02.28 |
---|---|
[머신러닝] 회귀 모델 - Linear Regression(선형 회귀)/Bagging Regressor(배깅 회귀)/Boosting Regressor(부스팅 회귀) (0) | 2025.02.28 |
[머신러닝] 분류 학습 예측 모델 - KNN / Random Forest / 3가지 모델의 단점 및 원인 (0) | 2025.02.27 |
[머신러닝] 분류 학습 모델 - Logistic Regression (0) | 2025.02.27 |
[머신러닝] Train set/Test set/Features/Target 이란? (0) | 2025.02.27 |