AI SCHOOL

[ML] RandomizedSearchCV

moru_xz 2023. 3. 23. 00:42
  • RandomizedSearchCV
# 파라미터 지정
param_distributions = {
		# 100~300 사이의 랜덤한 정수값을 3개 array형태로 반환
    'n_estimators' : np.random.randint(100, 300, 10), 
    
        # 0.05 ~ 0.3 사이의 실수값 10개 uniform한 값(균일 분포) 반환
    'learning_rate' : np.random.uniform(low=0.05, high=0.3, size=10)}

reg1 = RandomizedSearchCV(model_gbr, parameters, n_iter=10, cv=5, n_jobs=-1, 
                          verbose=2, scoring='neg_root_mean_squared_error')
n_iter : CV 가 검증을 해볼 파라미터 조합의 수
scoring : 교차검증을 하는 방법 선택
n_jobs : 컴퓨터에서 사용할 코어의 수, 전체 사용 -1
cv : 교차검증 진행할 횟수
verbose : 함수 수행시 발생하는 상세한 정보들을 표준 출력으로 자세히 내보낼 것인가를 나타냄
subsample: 은 트리 모델 학습 시 사용되는 훈련 데이터 중 일부 샘플만 사용하도록 지정하는 하이퍼파라미터 예를 들어, subsample=0.8로 설정하면 각 트리 모델이 학습될 때 80%의 훈련 데이터만 사용하여 학습

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html

 


(GridSearch와 EDA 동일 -> 생략)

 

GradientBoostingRegressor

from sklearn.ensemble import GradientBoostingRegressor

model = GradientBoostingRegressor(random_state=42)
model

 

RandomizedSearchCV

-> numpy 사용해서 랜덤하게

 

from sklearn.model_selection import RandomizedSearchCV

param_distributions = {"n_estimators": np.random.randint(100, 300, 10),
                       "learning_rate": np.random.uniform(low=0.05, high=0.3, size=10)
                      }
reg = RandomizedSearchCV(model, 
                         param_distributions=param_distributions, 
                         n_iter=5,
                         scoring='neg_root_mean_squared_error',
                         cv=3, verbose=1, n_jobs=-1,
                         random_state=42)
reg.fit(X_train, y_train)

  • 최적의 파라미터
reg.best_estimator_

 

 

  • 최고점수
reg.best_score_

-> error를 보는 거라 작을 수록 성능이 좋다는 것을 직관적으로 보여주는 것 

 

abs(reg.best_score_)

 

  • 조합 순위 보기

pd.DataFrame(reg.cv_results_).sort_values("rank_test_score")

 

학습과 예측

# 실전 시험 문제(X_test)를 풀기

y_predict = (reg.best_estimator_).fit(X_train, y_train).predict(X_test)
y_predict[:5]

# 피처 중요도 
fi = pd.Series(reg.best_estimator_.feature_importances_)
fi.index = reg.best_estimator_.feature_names_in_
fi.sort_values().plot.barh()

bike 대회의 목적

- 회귀 알고리즘을 사용해 보기
- 회귀의 평가방법 익히기 => 
    1에 가깝고 클수록 잘 예측한 지표 => R Sqaure Score(결정 계수)
    오차를 측정하기 때문에 작을 수록 잘 예측한 지표 => MAE, MSE, RMSE, RMSLE, MAPE
    평가하고자 하는 목적에 따라 다른 평가지표를 사용하게 됩니다.
- Lable Smoothing =>
    로그 변환을 통해 한쪽에 치우치고 뾰족한 분포를 정규분포에 가깝게 변환하는 과정
    log를 적용하고 exp를 통해 원래 값으로 복원하는 방법
- HyperParameter Tunning => GridSearchCV, RandomSearchCV
- Boosting 알고리즘 사용해 보기
- Tree 계열 모델에서는 스케일링 방법은 분할 기법을 사용하기 때문에 모델의 성능에 큰 차이가 없습니다.
- 하지만 Transform 은 분포를 변경해 주기 때문에 모델이 데이터를 좀 더 잘 볼 수 있게 변환해 주는 효과가 있습니다.