주인장 아저씨 2021. 6. 1. 03:06

####### RandomForest ###########

ㅇ 결측값 있으면 자동으로 대체 못함

ㅇ 결측값 처리 꼭 해주고 모델링 해야

 

 

####### Gradient boosting 계열 (XGB, LGBM) ############

ㅇ boosting 방식에 gbdt나 dart를 적용해봐서 하나 선택

ㅇ xg 부스트와 lightgbm을 앙상블 하면 성능이 더 좋게 나옴. 서로 방향을 보완해주기때문

  (가중치를 0.5 0.5 나 잘나온거를 0.7로.  강건한 모델을 만들 수 있다.) 
ㅇ xg 부스트와 lightgbm은 결측값을 안넣어도 처리해주기 때문에 좋은것. 다른 모델은 none값 채워야한다

ㅇ boost 학습 시 범주형시 astype('category') 이렇게 하면 원핫인코딩 한 것 처럼 인식

ㅇ LGBM시 카테코리 형태로 지정하면 좀 더 세분화 된걸 디테일하게 하기 때문에 속도도 빠르고 좋음

   ( 대신 좋고 나쁘고는 결과를 봐야 알 수 있다. int형도 넣어봐서 더 좋은거 선택하기 )

ㅇ LGBM의 경우 적은(10,000건 이하)의 데이터 셋에 적용할 경우 과적합 발생 쉽다

ㅇ XGB 의 경우 Level Wise 방식으로 오버피팅에 강하지만 시간이 오래걸림

 

    ## XGB     

  ㅇ max_depth 값을 낮춘다.

  ㅇ min_child_weight 값을 높인다.

  ㅇ gamma 값을 높인다

  ㅇ subsample과 colsample_bytree를 낮춘다.

  ㅇ GBM의 경우 n_estimators에 지정된 횟수만큼 학습을 끝까지 수행하지만, XGB의 경우 오류가 더 이상 개선되지

     않으면 수행을 중지

 

 

 

 

    ## LGBM

ㅇ LGBM의 경우과적합을 방지하기 위해 num_leaves는 2^(max_depth)보다 작아야 한다. 예를 들어 max_depth가 7이기

   때문에,  2^(max_depth)=128이 되는데, 이 때 num_leaves를 이보다 작은 70~80 정도로 설정하는 것이 낫다.

학습데이터에 사용할 피처개수나 데이터 샘플링 레코드 개수 줄이기 위해 colsample_bytree, subsample 적용

ㅇ reg_lambda, reg_alpha와 같은 regularization적용

ㅇ learning_rate는 DOWN, n_estimators는 UP (물론 너무 키우면 과적합)

   (learning_rate는 후반부에 건드리는 것이 좋은데, 초반부터 너무 작은 학습률을 지정하면 효율이 크게 떨어질 수 있음)