매직코드
article thumbnail

이전 포스팅과 연결됩니다

2021.07.30 - [머신러닝] - 파이썬 머신러닝 04-3. 분류 알고리즘 (결정트리, 앙상블 보팅, 배깅)

 

파이썬 머신러닝 04-3. 분류 알고리즘 (결정트리, 앙상블 보팅, 배깅)

데이터 분석에서 분류 알고리즘은 True/False로 결과를 나타내거나 카테고리로 나누는 경우 사용할 수 있다. 이미 알고있는 데이터의 레이블값을 통해 새로운 데이터가 어떤것으로 분류되는지 예

magicode.tistory.com

 

부스팅(boosting)

부스팅은 여러개의 알고리즘을 순차적으로 학습, 예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선해 나가면서 학습하는 방식이다. 대표적으로는 에이다부스트와 그래디언트부스트가 있다.

 

에이다부스트(Ada Boost)는 데이터들을 일단 분류한다.

첫번째 분류를 통해 잘못 분류된 값들이 있다면 그 값들에 좀 더 신경써서(가중치 부여) 다시 분류한다.

이 때 또 다른 잘못 분류된 값들이 있다면 역시나 그 오류값들에 좀 더 신경써서(가중치 부여) 다시 분류한다.

이렇게 여러번 분류를 시도하려 여러가지 기준을 만들어 데이터들을 분류한다.

출처 https://tkdguq05.github.io/2019/05/15/Boosting/

그래디언트 부스트(GBM)는 에이다부스트와 비슷하지만 오류값에 가중치를 두는 것이 아니라 경사 하강법을 이용해서 다음 분류기준을 찾아가는것이 차이점이다. 경사하강법은 반복적인 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 방법이다.

GBM은 많이 사용하는 알고리즘으로, 계속 발전되어 XGBoost, LightGBM 알고리즘들이 만들어졌다. 계산속도가 빨라졌다는 장점이 있지만 세부적인 계산방식이 조금씩 달라 정확도가 다를 수있다. 데이터 세트에 따라 사용하는 알고리즘이 달라진다.

 

XGBoost는 C언어 기반으로 만들어졌기 때문에 파이썬에서 사용하려면 파이썬래퍼 혹은 사이킷런 래퍼가 필요하다. 각 래퍼를 import해서 파이썬언어로 사용할 수 있도록 해야한다.

파이썬 래퍼와 사이킷런 래퍼는 같은 기능에 대해서 파라미터명을 다르게 사용하는 것을이 있으니 주의하자.

출처 https://ariz1623.tistory.com/208

XGBoost에서 과적합 문제가 심각하다면 아래와 같이 조절해볼 수 있다.

  • eta 값을 낮춘다 : 0.01~0.1 / eta 값을 낮출 경우 num_round(또는 n_estimators)는 반대로 높여줘야함.
  • max_depth 값을 낮춤
  • min_child_weight 값을 높임
  • gamma 값을 높임
  • subsample와 colsample_bytree를 조정 하는 것도 트리가 너무 복잡하게 생성되는 것을 막아 과적합 문제에 도움이 될 수 있다.

 

LightGBM역시 래퍼를 통해 파이썬에서 사용할 수 있다. LightGBM도 파이썬래퍼와 사이킷런 래퍼가 있다.

LightGBM 파이썬 래퍼 LightGBM 사이킷런 래퍼 XGBoost 사이킷런 래퍼
num_iterations n_estimators n_estimators
min_data_in_leaf min_child_samples -
bagging_fraction subsample subsample
feature_fraction colsample_bytree colsample_bytree
lambda_l2 reg_lambda reg_lambda
lambda_l1 reg_alpha reg_alpha

주요 하이퍼 파라미터를 정리해보자면 위 표와 같다. 대부분 비슷한 이름이라 더 헷갈릴때도, 쉽게 사용할 때도 있을 것 같다.

 


데이터 분석을 할 때 고려할 점

어떤 예측 결과를 원하는가?

누군가가 데이터를 주고 분석해주세요 하는 경우 어떤 분석결과를 원하는지, 분석을 통해 얻고자 하는 것이 무엇인지 확인해야 분석의 방향성을 잡을 수 있다.

 

어떤 분석 알고리즘을 이용할것인가?

통상적으로 예측값을 숫자로 나타내거나 연속성이 있으면 회귀 분석을,

True/False나 카테고리별로 예측하는 경우 분류 분석을 이용한다.

 

    1. 결정트리

    데이터형식에 크게 영향을 받지 않고 직관적이고 빠르다.

    결정트리 알고리즘만 단독으로 사용하는 경우에는 과적합이 되는 경향이 있어 대부분 앙상블로 이용한다.

 

    2. 랜덤 포레스트

    결정트리의 단점을 보완한 앙상블로 회귀와 분류 모두 가장 많이 사용한다.

    다만 텍스트 데이터 같이 매우 차원이 높고 희소한 데이터에는 잘 작동하지 않는다.

 

    3. GBM

    대용량의 데이터인 경우 랜덤 포레스트는 트리가 많아지기 때문에 시간이 오래걸린다.

    깊지 않은 트리를 사용하기 때문에 속도가 빠르고 랜덤 포레스트보다 매개변수 설정에 조금 더 민감하지만 더 높은 정확도를 제공한다.

    대회같이 짧은 시간에 높은 정확도를 원한다면 GBM을 사용한다.

    최적의 하이퍼 파리미터 설정을 위해 grid search를 이용할 수 있다.

 

    4. XGBoost

    대용량의 데이터 혹은 값이 너무 큰 데이터에 대해서 조금 더 빠르게 학습, 예측한다.

    회귀의 경우 릿지, 라쏘의 값이 오버피팅되었을 때 과적합에서 벗어난 평가를 할 수 있도록하는 모델로 사용되기도 한다.

 

    5. LightGBM

    대용량의 데이터 혹은 값이 너무 큰 데이터에 대해서 조금 더 빠르게 학습, 예측한다.

    때에 따라 GMB, XGBoost, LightGBM이 사용된다.

profile

매직코드

@개발법사

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!