RandomForestClassifier의 GridSerchCV 사용

사당동씩씩이·2023년 11월 23일
post-thumbnail

sklearn으로 시험을 준비하던 중 후기를 보니 많은 사람들이 좀더 깊은 과정을 수행하면 감점이 되는 경우를 보았다.
당연하겠지만 분석가의 주관이 많이 들어갈 수록 점수가 낮아지는 것은 당연할 수 있다.

작업2유형의 분류문제중 가장 사용이 쉬운(?) RandomForestClassifier를 사용하던 중 하이퍼파라미터를 제한시간이 있는 시험속에서 어떻게 사용할지 고민을 해봐야했다.

결론: GridSerchCV를 통해 추출 된 하이퍼파라미터를 사용한다.
비교를 통해 얻어는 값이 내가 많지 않은 경험적 선택보다 더 나을 확율이 높기 때문!

  • RandomForestClassifier 준비 :
    X, y 변수는 split -> EDA -> 전처리완료된 값
    random_state를 지정해 둠으로 비교 가능성 업
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(random_state = 1)
  • GridSerchCv import
from sklearn.model_selection import GrideSerchCV
gs = GrideSerchCv(rf,param_grid=pram)
  • 파라미터 준비
# 방법1 특정 값을 지정하여 넣기
params = {'n_estimators':[100,200,300,400,500], 'max_depth':[1,2,3,4,5]}

# 방법2 랜덤하게 생성 -> 배열에 여러게 넣어주는게 좋음
from scipy.stats import randint
params = {
    'n_estimators': randint(100, 1000),  # 100에서 1000 사이의 값에서 랜덤 선택
    'max_depth': randint(1, 10),         # 1에서 10 사이의 값에서 랜덤 선택
}
  • Serch
    n_jobs를 -1로 지정하여 최대한 사용가능한 모든 리소스 사용 (시험용)
gs = GridSearchCV(rf, param_grid=params, cv=5, scoring='roc_auc', n_jobs=-1)
gs.fit(X, y)

print(f"params: {gs.best_params_}")
print(f"score: {gs.best_score_}")
  • RnadomizedSerchCv 사용 시
    n_iter : 무작위 탐색 실행할 조합의 수
rs = RandomizedSearchCV(rf, param_distributions=params, n_iter=5, cv=5, scoring='roc_auc', random_state=1, n_jobs=-1)
rs.fit(X, y)

print(f"Best params: {rs.best_params_}")
print(f"Best score: {rs.best_score_}")
profile
N잡러 대충 이것저것 해보며 대충 사는 중

0개의 댓글