[파이썬][scikit-learn] scikit-learn에서 RandomizedSearchCV

처리 중인 데이터셋에 대한 최적의 하이퍼파라미터를 찾는 것은 머신러닝 프로세스에서 매우 중요합니다. 그러나 수많은 가능한 조합을 시도하는 것은 비효율적이고 시간이 매우 소요될 수 있습니다.

이러한 문제를 해결하기 위해 scikit-learn에서는 RandomizedSearchCV 클래스를 제공합니다. RandomizedSearchCV는 주어진 하이퍼파라미터 공간에서 지정된 횟수만큼 랜덤하게 조합을 선택하여 검색하는 기능을 제공합니다.

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier

# 데이터 준비
X = ...
y = ...

# 모델 초기화
model = RandomForestClassifier()

# 하이퍼파라미터 공간 정의
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10]
}

# RandomizedSearchCV 객체 생성
cv = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=10, cv=5)

# 모델 학습 및 최적의 하이퍼파라미터 탐색
cv.fit(X, y)

# 최적의 하이퍼파라미터 출력
print(cv.best_params_)

위의 코드 예제에서는 랜덤 포레스트 분류기를 사용하고, n_estimators, max_depth, min_samples_split와 같이 세 가지 하이퍼파라미터를 탐색합니다.

param_grid에는 가능한 하이퍼파라미터 조합을 정의합니다. n_estimators는 트리의 개수, max_depth는 최대 깊이, min_samples_split는 노드를 분할하기 위한 최소 샘플 수를 의미합니다.

RandomizedSearchCV 객체를 생성할 때 n_iter 파라미터를 통해 랜덤한 조합을 몇 번 선택할지, cv 파라미터를 통해 몇 개의 폴드로 교차 검증할지를 설정합니다.

fit() 메서드로 모델을 학습하면서 최적의 하이퍼파라미터를 탐색하고, best_params_ 속성을 통해 최적의 하이퍼파라미터를 확인할 수 있습니다.

RandomizedSearchCV를 사용하여 하이퍼파라미터 탐색을 수행하면, 많은 실험을 효율적으로 수행할 수 있고, 최적의 결과를 얻을 수 있습니다.