밍꽁✨
코딩하는 감자
밍꽁✨
전체 방문자
오늘
어제
  • 분류 전체보기 (27)
    • python (16)
      • 파이썬 머신러닝 완벽가이드 (6)
      • 코딩테스트 (4)
      • 머신러닝&딥러닝 (2)
      • 파이썬 기초 (4)
    • Qgis (1)
    • Tableau (6)
    • 빅데이터 분석 기사 (0)
    • 금융데이터 뚝딱이기 (4)
      • 신협 대학생 인턴십 (1)
      • 기사 스크랩 (3)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • LGBM
  • 인프런
  • Python기초
  • python
  • sys.stdin.readline()
  • 파이썬기초
  • bisect_right
  • 역머니무브
  • 태블로
  • 파이썬
  • NLP
  • 코딩테스트
  • 기사스크랩
  • bisect_left
  • Light GBM
  • 머신러닝
  • 웰컴투태블로월드
  • 피처백터화
  • 신협인턴십
  • Tableau

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
밍꽁✨

코딩하는 감자

[python] LGBMClassifier 단번에 성능 높이기
python/파이썬 머신러닝 완벽가이드

[python] LGBMClassifier 단번에 성능 높이기

2022. 3. 26. 14:25
반응형

Light GBM은 XGBoost보다 개선된 성능과 빠른 수행률을 보여주어 많은 대회의 상위 랭커들이 활용하는 모델이라고 할 수 있습니다!

저는 LGBMClaasifier 모델을 활용할 때 특히 주의해야 할 부분을 짚어보려고 하는데요, LGBMClassifier hyper parameter 중 'boost_from_averge' 설정입니다.

 

Light GBM이 버전업 됨에 따라 boost_from_average 파라미터의 디폴트 값이 False에서 True로 변경되었습니다.

레이블 값이 극도로 불균형한 분포인 데이터의 경우 boost_from_average = True 값은 재현율과 roc_auc_score를 매우 저하시킵니다!

Light GBM 2.1.0이상 버전이거나, 불균형한 데이터 세트에서 예측 성능이 매우 저조할 경우 LightGBM 객체 생성 시 boost_from_average = False로 파라미터를 설정해야 합니다.


하나의 예시로 실습 데이터에 많이 활용되는 kaggle의 신용카드 사기 검출을 활용해보겠습니다.

먼저, 예측에 필요한 함수들을 생성하겠습니다.

* get_clf_eval : 모델 평가

from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, roc_auc_score

def get_clf_eval(y_test, pred=None, pred_proba=None):
    print('오차행렬 \n', confusion_matrix(y_test, pred))
    print('정확도 :', accuracy_score(y_test, pred))
    print('정밀도 : ',precision_score(y_test, pred))
    print('재현율 :', recall_score(y_test, pred))
    print('f1 score :', f1_score(y_test, pred))
    print('roc auc score :', roc_auc_score(y_test, pred_proba))

* get_model_train_eval : model만 바꿔서 학습 및 예측

def get_model_train_eval(model, ftr_train = None, ftr_test = None, tgt_train=None, tgt_test=None):
    model.fit(ftr_train, tgt_train)
    pred = model.predict(ftr_test)
    pred_proba = model.predict_proba(ftr_test)[:,1]
    get_clf_eval(tgt_test, pred, pred_proba)

* get_preprocessed_df : 전처리 및 필요없는 컬럼 삭제

from sklearn.preprocessing import StandardScaler

def get_preprocessed_df(df=None):
    df_copy = df.copy()
    scaler = StandardScaler()
    amount_n = scaler.fit_transform(df['Amount'].values.reshape(-1,1))
    df_copy.insert(0,'Amount_scaled', amount_n)
    df_copy.drop(['Time','Amount'],axis=1, inplace=True)
    return df_copy

boost_from_average의 True / False 비교

** 저는 Logistic Regression과 LGBM의 예측 성능을 비교하였습니다.

 

1) boost_from_average = True의 경우

X_train, X_test, y_train, y_test = get_train_test_dataset(card_df)

print('##logistic 성능 예측')
get_model_train_eval(lr_clf, X_train, X_test, y_train, y_test)

print('##LGBMClassifier 성능 예측')
lgbm_clf = LGBMClassifier(n_estimators=1000, num_leaves=64, n_jobs=-1, boost_from_average=True)
get_model_train_eval(lgbm_clf,X_train, X_test, y_train, y_test )

결과 : Logistic Regression의 roc 점수가 0.95인 반면 LGBMClassifier의 roc는 0.49에 밖에 못미치는 것을 볼 수 있습니다.

2) boost_from_average=False의 경우

X_train, X_test, y_train, y_test = get_train_test_dataset(card_df)

print('##logistic 성능 예측')
get_model_train_eval(lr_clf, X_train, X_test, y_train, y_test)

print('##LGBMClassifier 성능 예측')
lgbm_clf = LGBMClassifier(n_estimators=1000, num_leaves=64, n_jobs=-1, boost_from_average=False)
get_model_train_eval(lgbm_clf,X_train, X_test, y_train, y_test )

결과 : LGBMClassifier가 Logistic Regression에 비해 높은 성능을 보임을 알 수 있습니다.


앞서와 같이 데이터에 따라 다른 파라미터 설정이 요구되며, 분류 지도학습 시 레이블 값이 극도로 불균형한 분포를 띄는 경우 LGBMClassifier의 파라미터 중 boost_from_average=False로 설정해주어야 합니다 ! 

반응형

'python > 파이썬 머신러닝 완벽가이드' 카테고리의 다른 글

[NLP] pipeline을 활용한 직관적인 코드짜기!  (0) 2022.05.03
[NLP] 피처백터화 / 희소행렬  (0) 2022.05.02
[NLP] NLP 기초, 텍스트 전처리의 모든 것  (0) 2022.04.30
[python] SMOTE를 활용한 오버샘플링  (0) 2022.03.26
[python] 교차검증을 간단하게 cross_val_score()  (0) 2022.03.15
    'python/파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
    • [NLP] 피처백터화 / 희소행렬
    • [NLP] NLP 기초, 텍스트 전처리의 모든 것
    • [python] SMOTE를 활용한 오버샘플링
    • [python] 교차검증을 간단하게 cross_val_score()
    밍꽁✨
    밍꽁✨
    감자의 데이터 분석 일지

    티스토리툴바