본문 바로가기
Learning-driven Methodology/ML (Machine Learning)

[LightGBM] 매개변수 조정 (Parameters Tuning) (1)

by goatlab 2022. 6. 28.
728x90
반응형
SMALL

리프 방식 (최상 우선) 트리 매개변수 조정

 

LightGBM은 잎별 트리 성장 알고리즘을 사용하는 반면 다른 많은 인기 도구는 깊이별 트리 성장을 사용한다. 깊이별 성장과 비교할 때 잎별 알고리즘은 훨씬 빠르게 수렴할 수 있다. 그러나 적절한 매개변수와 함께 사용하지 않으면 잎사귀 성장이 과적합될 수 있다.

 

리프 방식 트리를 사용하여 좋은 결과를 얻으려면 다음과 같은 몇 가지 중요한 매개변수가 있다.

 

  1. num_leaves : 이는 트리 모델의 복잡성을 제어하는 ​​주요 매개변수이다. 이론적으로 깊이별 트리와 동일한 수의 잎을 얻도록 num_leaves = 2^(max_depth)을 설정할 수 있다. 그러나 이 간단한 변환은 실제로 좋지 않다. 그 이유는 고정된 수의 잎에 대해 leaf-wise tree가 일반적으로 depth-wise tree보다 훨씬 더 깊기 때문이다. 구속되지 않은 깊이는 과적합을 유발할 수 있다. 따라서, num_leaves를 조정하려고 할 때 2^(max_depth)보다 작게 설정해야 한다. 예를 들어, max_depth=7 깊이별 트리가 좋은 정확도를 얻을 수 있지만 num_leaves을 127로 설정하면 과적합이 발생할 수 있고 70를 80으로 설정하거나 깊이별보다 더 나은 정확도를 얻을 수 있다.
  2. min_data_in_leaf : 이것은 leaf-wise tree에서 과적합을 방지하기 위한 매우 중요한 매개변수이다. 최적값은 훈련 샘플의 수와 num_leaves을 큰 값으로 설정하면 나무가 너무 깊게 자라는 것을 방지할 수 있지만 under-fitting이 발생할 수 있다. 실제로 큰 데이터 세트에는 수백 또는 수천으로 설정하면 충분하다.
  3. max_depth : max_depth를 사용하여 트리 깊이를 명시적으로 제한할 수도 있다.

 

Add More Computational Resources

 

시스템에서 LightGBM은 OpenMP를 사용하여 많은 작업을 병렬화한다. LightGBM이 사용하는 최대 스레드 수는 매개변수 num_threads에 의해 제어된다. 기본적으로 이것은 OpenMP의 기본 동작을 따른다 (실제 CPU 코어당 스레드 하나 또는 환경 변수 값 OMP_NUM_THREADS이 설정되어 있는 경우). 최상의 성능을 위해 사용 가능한 실제 CPU 코어 수로 설정하면 된다.

 

사용 가능한 CPU 코어가 더 많은 머신으로 이동하여 더 빠른 훈련을 달성할 수 있다. 분산 (다중 머신) 학습을 사용하면 교육 시간을 줄일 수도 있다. 자세한 내용은 분산 학습 가이드를 참조하면 된다.

 

Use a GPU-enabled version of LightGBM

 

LightGBM의 GPU 지원 빌드를 사용하면 훈련이 더 빨라질 수 있다. 자세한 내용은 GPU 자습서를 참조하면 된다.

 

Grow Shallower Trees

 

LightGBM의 총 교육 시간은 추가된 총 트리 노드 수에 따라 늘어난다. LightGBM에는 트리당 노드 수를 제어하는 ​​데 사용할 수 있는 여러 매개변수가 있다.

 

아래는 훈련 속도를 높이지만 훈련 정확도를 떨어뜨릴 수 있다.

 

Decrease max_depth 이 매개변수는 각 트리의 루트 노드와 리프 노드 사이의 최대 거리를 제어하는 ​​정수입니다. max_depth훈련 시간을 줄이기 위해 줄인다.
Decrease num_leaves LightGBM은 깊이에 관계없이 해당 노드를 추가함으로써 얻은 이득을 기반으로 트리에 노드를 추가한다. 

Increase min_gain_to_split 새 트리 노드를 추가할 때 LightGBM은 이득이 가장 큰 분할점을 선택한다. 기본적으로 분할점 추가로 인한 훈련 손실의 감소가 발생한다. LightGBM은 min_gain_to_split0.0으로 설정되며, 이는 "너무 작은 개선이 없음"을 의미한다. 그러나 실제로는 훈련 손실의 아주 작은 개선이 모델의 일반화 오류에 의미 있는 영향을 미치지 않는다는 것을 알 수 있다. 훈련 시간을 줄이려면 min_gain_to_split을 늘린다.
Increase min_data_in_leaf and
min_sum_hessian_in_leaf
훈련 데이터의 크기와 기능의 분포에 따라 LightGBM은 소수의 관찰만 설명하는 트리 노드를 추가할 수 있다. 가장 극단적인 경우 훈련 데이터의 단일 관측값만 해당하는 트리 노드를 추가하는 것을 고려해야 한다. 이것은 잘 일반화될 가능성이 거의 없으며 아마도 과적합의 신호일 것이다.

이것은 max_depth 및 num_leaves와 같은 매개변수를 사용하여 간접적으로 방지할 수 있지만 LightGBM은 이러한 지나치게 특정한 트리 노드를 추가하는 것을 직접 방지하는 데 도움이 되는 매개변수도 제공한다.
  • min_data_in_leaf : 추가되기 위해 트리 노드에 속해야 하는 최소 관찰 수이다.
  • min_sum_hessian_in_leaf : 잎의 관측값에 대한 Hessian (각 관측값에 대해 평가된 목적 함수의 2차 도함수)의 최소 합입니다. 일부 회귀 목표의 경우 이는 각 노드에 포함되어야 하는 최소 레코드 수이다. 분류 목표의 경우 확률 분포에 대한 합계를 나타낸다.

 

https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html

 

Parameters Tuning — LightGBM 3.3.2.99 documentation

num_leaves. This is the main parameter to control the complexity of the tree model. Theoretically, we can set num_leaves = 2^(max_depth) to obtain the same number of leaves as depth-wise tree. However, this simple conversion is not good in practice. The re

lightgbm.readthedocs.io

 

728x90
반응형
LIST