티스토리 뷰

머신러닝

[13] Lightgbm

up_one 2025. 3. 4. 16:17

2025.02.24 - [머신러닝] - [12] Xgboost에서 데이터셋이 커질 때 학습 속도가 느린 문제점을 해결한 Lightgbm은 모든 데이터를 탐색하지 않고 상호배타적인 변수를 줄여 학습 속도를 개선시킨 모델입니다. 이번 글에서는 Lightgbm의 동작 원리에 대해 자세히 다뤄보겠습니다.

 

[12] Xgboost

2024.06.28 - [머신러닝] - [7] 앙상블 모델에서 언급된 Boosting 기반으로 만들어진 Xgboost는 Gradient Boosting 모델에 정규화 함수를 더해서 과적합을 방지하고 병렬 컴퓨팅을 통해 학습 속도를 개선시킨

up-one-coding.tistory.com

 

1. 동작 원리

XGBoost와 Lightgbm의 가장 큰 차이점은 트리에서 리프 노드가 생성되는 방법입니다. XGBoost는 level-wise 방식으로 트리가 균형적으로 생성되지만, Lightgbm은 leaf-wise 방식으로 Loss가 작아지는 방향으로 리프 노드가 분할되는 방식입니다. 이러한 leaf-wise 방식은 최대 손실값을 가지는 리프 노드, 즉 성능이 좋지 않은 리프 노드를 분할하여 예측 오류 손실을 최소화하는 장점과 모든 데이터를 탐색하지 않기 때문에 학습 속도가 상대적으로 빠르다는 장점을 가지고 있습니다.

level-wise와 leaf-wise 방식의 차이

 

Lightgbm에서 가장 중요한 것은 어떻게 탐색할 데이터를 줄일 것인지의 기준입니다. 그 방법은 GOSS(Gradient based One side Sampling)과 EFB(Exclusive Feature Bundling)입니다.

 

1. GOSS(Gradient based One side Sampling)

트리 기반 모델에서 Gradient (기울기)가 크다는 것은 잘못된 분할 방식을 가지고 있거나, 데이터 내의 이상치가 있어 훈련 성능이 안 좋다는 것을 의미합니다. 따라서 Gradient가 큰 샘플부터 우선적으로 학습시킨다면 전체 샘플에 대한 모델의 성능을 개선시킬 수 있습니다

Gradient가 작은 샘플   Gradient가 큰 샘플

 

Gradient가 큰 샘플을 우선적으로 학습시키는 방법은 Gradient을 크기에 따라 내림차순으로 정렬시켜 Graident가 작은 샘플과 큰 샘플로 분류한 후 이루어집니다. Gradient가 큰 샘플은 일정 비율을 가지고 학습시키고, Gradient가 작은 샘플은 일정 비율의 data를 샘플링해 전체 데이터 개수에 맞춰 조정시킨 후 학습시킵니다. 그 이유는 데이터의 전체적인 분포를 유지하면서도 계산량을 줄이기 위해서입니다.

 

2. EBF(Exclusive Feature Bundling)

EBF는 학습에 사용되는 변수 개수를 줄이기 위해 상호 배타적인 변수를 추려 하나의 Bundle로 만들고 차원을 줄이는 방법입니다. 방법은 'Minimum vertex color' 알고리즘을 활용하여 변수를 어떤 Bundling으로 묶을지 결정하고 변수를 최종적으로 줄입니다. 

 

Minimum vertex color 알고리즘의 선수 조건은 상호 배타적인 정점은 간선으로 연결되어 있지 않고, 강도가 두 정점 동시에 0이 아닌 것을 찾아서 conflict 횟수로 세는 것입니다.

 

  1. 원본 테이블에서 2개의 정점에서 동시에 0이 아닌 것을 찾아서 Conflict 횟수 찾기
  2. 각 Feature의 Degree 값 구하기
  3. Degree가 큰 순서대로 정렬시키고, Conflict가 나지 않은 것끼리 같은 색깔로 칠하기
  4. 같은 색상으로 칠해진 것끼리 하나의 bundle로 묶기

왼쪽 원본 데이터에서 파생된 Conflict와 Degree에 대한 테이블

 

원본 데이터에서 Conflict 횟수를 구하는 방법은 두 정점의 값이 둘 다 0이 아닌 것의 개수를 구하는 것입니다.

EX) 

X1과 X2는 총 6번의 Conflict을 가진다. (l1, l3, l5, l6, l8, l10)
X1과 X3은 총 2번의 Conflict을 가진다. (l8, l9)
X1과 X4은 총 1번의 Conflict을 가진다. (l8)
X1과 X5은 총 6번의 Conflict을 가진다. (l1, l3, l5, l6, l8, l10)

 

각 정점별로 모든 Conflict 횟수를 더한 값이 바로 Degree 값입니다. (X5의 Degree 값은 6+6+4+3 = 19) Degree 값을 큰 순서대로 정렬시킨 후 Conflict가 나지 않은 것끼리 하나의 색깔로 칠하고 같은 색깔인 것끼리 bundle로 묶어주는 것입니다.

EX)

X5에 A 색상
X5와 X1, X5와 X2은 Conflict이 발생하므로 B 색상
X3과 X4은 A 색상과 Conflict이 발생하지 않으므로 A 색상

 

최종적으로 (X5, X3, X4), (X1, X2) 2개의 bundle로 묶어 변수를 축소시킬 수 있습니다.

 

이와 같이 데이터 탐색을 줄이고 변수를 묶어 차원을 축소하는 방식을 가진 Lightgbm은 학습 시간과 메모리 사용량이 극히 감소된 장점을 가지고 있습니다. 다만 개수가 적은 데이터셋에 적용 시에 과적합이 발생할 수도 있는 문제점을 가지고 있습니다.

'머신러닝' 카테고리의 다른 글

[12] Xgboost  (0) 2025.02.24
[11] RandomForest Model  (0) 2025.02.13
[10] 로지스틱 회귀 모델  (1) 2025.02.11
[9] 정규화 모델 (Regularization)  (0) 2024.07.07
[8] 의사결정나무  (2) 2024.06.30
TAG more
글 보관함
최근에 올라온 글