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

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

by goatlab 2022. 7. 4.
728x90
반응형
SMALL

Grow Less Trees

 

 

모델에 트리 노드를 추가하는 데 필요한 시간을 줄여 학습 시간을 더욱 줄일 수 있다. 아래는 훈련 속도를 높이지만 훈련 정확도를 떨어뜨릴 수 있다.

 

Decrease num_iterations 매개변수 num_iterations는 수행할 부스팅 라운드 수를 제어한다. LightGBM은 의사결정 트리를 학습자로 사용하기 때문에 "트리의 수"로 생각할 수도 있다.

num_iterations을 변경하려고 하면 learning_rate도 바꾼다. learning_rate는 훈련 시간에는 영향을 미치지 않지만 훈련 정확도에는 영향을 미친다. 일반적으로 num_iterations를 줄이면 learning_rate을 늘려야 한다.

num_iterations와 learning_rate의 올바른 값을 선택하는 것은 데이터 목표에 크게 의존하므로 이러한 매개변수는 종종 하이퍼파라미터 조정을 통해 가능한 값 집합에서 선택된다.

훈련 시간을 줄이기 위해 num_iterations를 줄인다.
Use Early Stopping 조기 중지가 활성화된 경우 각 부스팅 라운드 후에 모델의 훈련 정확도는 훈련 프로세스에 사용할 수 없는 데이터가 포함된 검증 세트에 대해 평가된다. 그 정확도는 이전 부스팅 라운드의 정확도와 비교된다. 모델의 정확도가 몇 번의 연속 라운드 동안 개선되지 않으면 LightGBM은 훈련 프로세스를 중지한다.

"연속 라운드 수"는 매개변수 early_stopping_round에 의해 제어된다. 예를 들어, early_stopping_round=1는 "검증 세트의 정확도가 처음으로 향상되지 않으면 훈련을 중지하라"라고 할 것이다.

early_stopping_round를 설정하고 학습 시간을 줄일 수 있는 검증 세트를 제공한다.
Consider Fewer Splits 이전 섹션에서 설명한 매개 변수는 트리 수와 트리당 노드 수를 제어한다. 모델에 트리 노드를 추가하는 데 필요한 시간을 줄임으로써 교육 시간을 더욱 줄일 수 있다.

교육 속도를 높이지만 학습 정확도를 저하시킬 수 있다.
Enable Feature Pre-Filtering
When Creating Dataset
기본적으로 LightGBM Dataset 개체가 생성되면 min_data_in_leaf 값을 기준으로 일부 피쳐가 필터링된다.

간단한 예로 feature_1이라는 기능이 있는 1000개의 관측치 데이터 집합을 생각해 보면 feature_1은 25.0 (995개의 관측치)과 50.0 (5개의 관측치)의 두 값만 사용한다. min_data_in_leaf = 10인 경우 이 기능에 대한 분할이 없으므로 유효한 분할이 발생한다.

적어도 리프 노드 중 하나는 5개의 관측치만 가진다. LightGBM은 이 기능을 다시 고려한 후 매번 무시하는 대신, 데이터 세트가 구성될 때 교육 전에 이 기능을 필터링한다.

feature_pre_filter = False를 설정하여 이 기본 동작을 재정의한 경우 교육 시간을 줄이기 위해 feature_pre_filter = True로 설정한다.
Decrease max_bin or max_bin_by_feature When Creating Dataset LightGBM Training은 훈련 속도를 향상시키고 훈련에 필요한 메모리 요구 사항을 줄이기 위해 연속적인 기능을 별도의 빈에 버킷한다. 이 바이닝은 Dataset 구성 중에 한 번 수행된다. 노드를 추가할 때 고려되는 분할 수는 O (#feature * #bin)이므로 피쳐당 빈 수를 줄이면 평가해야 하는 분할 수를 줄일 수 있다.

max_bin은 피쳐가 버킷될 최대 빈 수를 제어한다. max_bin_by_feature를 전달하여 기능별로 이 최대 기능을 설정할 수도 있다.

max_bin 또는 max_bin_by_feature를 줄여 훈련 시간을 줄인다.
Increase min_data_in_bin
When Creating Dataset
일부 빈에는 관측치 수가 적을 수 있으며, 이는 빈의 경계를 가능한 분할점으로 평가하는 노력이 최종 모형을 크게 변경하지 않는다는 것을 의미할 수 있다. min_data_in_bin을 설정하여 빈의 입도를 제어할 수 있다.

min_data_in_bin을 늘려 훈련 시간을 단축한다.
Decrease feature_fraction 기본적으로 LightGBM은 교육 과정 중에 데이터 세트의 모든 기능을 고려한다. 이 동작은 feature_message를 0보다 큰 값과 <= 1.0으로 설정하여 변경할 수 있다. 예를 들어, feature_fraction을 0.5로 설정하면 LightGBM에서 각 트리를 구성하기 시작할 때 피쳐의 50%를 무작위로 선택하도록 한다. 이렇게 하면 각 트리 노드를 추가하기 위해 평가해야 하는 총 분할 수가 줄어든다.

feature_fraction을 줄여 훈련 시간을 줄인다.
Decrease max_cat_threshold LightGBM은 범주형 형상에 대한 최적의 분할을 찾기 위해 사용자 지정 접근 방식을 사용한다. 이 과정에서 LightGBM은 범주형 형상을 두 그룹으로 나누는 분할을 탐구한다. 이것들은 때때로 "k-vs.-rest" 분열이라고 불린다. max_cat_threshold 값이 클수록 더 많은 분할점과 검색할 수 있는 그룹 크기가 커진다.

max_cat_threshold를 줄여 학습 시간을 줄인다.

 

Use Less Data

 

Use Bagging 기본적으로 LightGBM은 각 반복에 대해 교육 데이터의 모든 관측치를 사용한다. 대신 LightGBM에 교육 데이터를 무작위로 샘플링하도록 지시할 수 있다. 교체하지 않고 여러 랜덤 샘플에 대해 훈련하는 과정을 "배깅"이라고 한다.

bagging_freq를 0보다 큰 정수로 설정하여 새 샘플을 그리는 빈도를 제어한다. bagging_fraction을 0.0 이상 1.0 미만으로 설정하여 샘플 크기를 제어한다. 예를 들어, {"bagging_freq": 5, "bagging_fraction": 0.75}은 LightGBM에 "5회 반복할 때마다 교체 없이 재샘플링하고 학습 데이터의 75% 샘플을 추출한다"고 말한다.

bagging_fraction을 줄여 학습 시간을 줄인다.
Save Constructed Datasets
with save_binary
이는 LightGBM CLI에만 적용된다. save_binary 매개 변수를 전달하면 교육 데이터 세트와 모든 유효성 검사 세트가 LightGBM에서 이해하는 이진 형식으로 저장된다. 이렇게 하면 데이터 세트를 구성할 때 비닝 및 기타 작업을 다시 수행할 필요가 없기 때문에 다음 번에는 교육 속도를 높일 수 있다.

 

https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html#deal-with-over-fitting

 

Parameters Tuning — LightGBM 3.3.5.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