pythonML

[pythonML] XGBoost 하이퍼파라미터

독립성이 강한 ISFP 2023. 6. 13. 16:10
728x90
반응형

General Parameters (부스터 매개변수)

  • booster: 어떤 부스터(booster)를 사용할지 지정 (default= gbtree)
    • gbtree: 트리 기반의 앙상블 모델을 사용하는 부스터(xgboost의 기본 부스터)
      • 비선형 패턴을 학습, 복잡한 상호작용을 모델링하는 데 강점
    • gblinear: 선형 회귀 모델을 사용하는 부스터.
      • 선형 모델은 변수 간의 선형 관계를 학습, 입력 변수의 선형 조합으로 예측을 수행.
      • 따라서, 변수 간의 선형 관계가 중요한 경우에 유용.
    • dart(Dropout Additive Regression Trees): 트리 기반 모델의 진화형인 부스터.
      • 트리에 드롭아웃 기법을 적용하여 앙상블의 다양성을 높이는 방법.
      • 드롭아웃은 트리의 일부 노드를 임의로 제거하여 다양한 트리 앙상블을 생성하는 데 사용됩.
      • 모델의 안정성을 높이고 과적합 감소.
  • verbosity: 메시지 출력의 상세도를 지정(default=1)
    • 유효한 값은 0 (무음), 1 (경고), 2 (정보), 3 (디버그)입니다.  
    • verbosity 값을 높일수록 더 자세한 메시지를 확인 가능.
  • <General parameters 들 중 자동으로 설정되는 하이퍼 파라미터들>
    • validate_parameters (default: True)
    • nthread (default: maximum)
    • disable_default_eval_metric (default= false)
    • num_feature(default= 자동으로 세팅)
preds = bst.predict(dtest, iteration_range=(0, num_round))

Additional parameters for Dart Booster (booster=dart)

Parameters for Tree Booster(부스터 매개변수)

  • eta: 학습률 (default=0.3, alias: learning_rate)
    • 각 부스팅 단계에서 새로운 특성의 가중치를 직접 얻을 수 있으며, eta는 이러한 특성의 가중치를 축소시킴
    • 값을 작게 설정하면 모델이 보수적(신중)으로 업데이트가 됨. 각 트리의 기여를 줄여주고, 모델이 더 일반화되도록 도움
    • 값을 크게 설정하면 빠른 학습 속도를 제공할 수 있지만, 과적합의 위험성이 커짐
    • 범위: [0, 1]
  • gamma: 리프 노드에서 추가 분할을 수행하기 위해 필요한 최소 손실 감소량(default=0, alias: min_split_loss)
    • 값이 크면 보수적인 모델을 만들어 과적합을 방지하고 일반화 성능을 향상시킬 수 있습니다.
      그러나 너무 크게 설정하면 중요한 패턴을 놓칠 수 있으므로 적절한 균형을 찾아야 합니다.
    • 보통 작은 값이나 0에 가까운 값을 선택하는 것이 모델의 성능을 향상시키는 데 도움이 됩니다.
    • 범위: [0, ∞]
  • max_depth: 트리의 최대 깊이 (default=6) -> 가장 먼저 설정
    • 깊이가 제한된 트리는 각각의 결정 경계를 더 간단하게 만들며, 모델이 데이터에 과적합되는 것을 방지할 수 있습니다.
    • 값을 작게 설정하면 모델의 단순성을 증가, 분산 감소, 편향 증가 → 데이터의 다양한 패턴을 잡아내지 못함, 일반화 능력 향상
    • 값을 증가시키면 모델의 복잡성, 분산 증가, 편향 감소 → 과적합 가능성, BUT 더 복잡한 패턴을 학습 가능
    • 범위: [0, ∞]
  • min_child_weight: 각 리프 노드에서 최소한의 샘플 가중치 합을 지정 (default=1)
    • 트리 분할 단계에서 인스턴스 가중치의 합이 min_child_weight보다 작은 리프 노드가 생성된다면, 분할 작업이 중단됩니다.
    • 값을 크게 설정하면 모델이 더 보수적으로 분할되고, 모델의 단순성과 일반화를 높이는 데 도움이 됩니다.
      이는 모델의 과적합을 줄이는 데 도움이 될 수 있습니다.
    • 값을 작게 설정하면  모델이 더 자세하게 학습할 수 있도록 하지만, 너무 작은 값은 노이즈에 민감하게 반응할 수 있습니다.
    • 일반적으로는 작은 값이나 0에 가까운 값을 선택하여 모델의 복잡성을 조절하고 일반화 성능을 향상시키는 것이 좋습니다.
    • min_child_weight를 조정할 때는 데이터의 크기와 복잡성을 고려해야 합니다.
    • 범위: [0, ∞]
  • max_delta_step : 각 리프 노드의 출력값이 허용되는 최대 변화량 (default=0)
    • 값이 0이면 제약이 없음을 의미. 양수 값으로 설정하면 업데이트 과정을 더 보수적(신중)으로 만들어줄 수 있습니다.
      예를 들어, max_delta_step 값을 1로 설정하면 각 리프 노드의 출력값이 1보다 크게 변하지 않도록 제한됩니다.
    • 보통은 이 매개변수가 필요하지 않지만, 클래스가 극도로 불균형한 로지스틱 회귀에서 도움이 될 수 있습니다.
      1-10의 값으로 설정하면 업데이트를 제어하는 데 도움이 될 수 있습니다.
    • 범위: [0, ∞]
  • subsample: 훈련 데이터의 일부를 무작위로 샘플링하는 비율 (default=1 훈련 데이터의 전체를 사용)
    • subsample=0.8로 설정하면 각 트리의 학습에 80%의 훈련 데이터만을 사용 -> 과적합을 방지.
    • 각 부스팅 반복(iteration)마다 랜덤 샘플링 수행.
    • 일반적으로 데이터셋이 크거나 복잡성이 높을 때, 작은 subsample 값을 설정하여 모델의 일반화 성능을 향상
    • 범위: (0, 1]

      1. sampling_method: 학습 인스턴스(행)를 샘플링하는 방법 (subsample 하는 방법)(default= uniform)
        1. uniform: 각 학습 인스턴스는 선택될 확률이 동일합니다. 즉, 모든 학습 인스턴스가 동등한 기회를 갖고 선택됩니다. 일반적으로 모델의 성능을 향상시키기 위해 subsample 값이 0.5 이상으로 설정될 때 사용됩니다.
        2. gradient_based: 각 훈련 인스턴스의 선택 확률은 경사도의 정규화된 절댓값에 비례합니다. 이 방법을 사용할 때는 subsample 값을 0.1 이하로 설정하여도 모델의 정확도에 손실이 없을 수 있습니다. 그러나 이 샘플링 방법은 tree_method가 gpu_hist로 설정되어 있는 경우에만 지원되며, 다른 트리 메소드는 uniform 샘플링만 지원합니다. 
  • colsample_bytree, colsample_bylevel, colsample_bynode: 열(column)의 일부를 선택하는 비율 (default=1)
    • 모든 colsample_by* 파라미터들은 (0, 1] 범위를 가집니다.
    • 1보다 작은 값(0과 1 사이)을 설정하면 선택된 비율만큼 특성이 무작위로 선택됩니다.
    •  colsample_by* 파라미터들은 누적적으로 작동합니다. ex. 64개의 피처가 있을 경우, 첫번째 노드 분할할때 8개의 피처 , 그 밑에 두번째 노드를 분할할때 8개의 피처 그 밑에 세번째 노드를 분할할때 8개의 피처 선택...
    • Python이나 R 패키지를 사용하는 경우, DMatrix의 feature_weights를 설정하여 컬럼 샘플링을 사용할 때 각 피처가 선택될 확률을 정의할 수 있습니다. sklearn 인터페이스의 fit 메서드에도 유사한 파라미터가 있습니다. 
      • colsample_bytree: 각 트리에서 사용할 열의 서브샘플 비율. 각 전체 특성 중 일부 특성만을 선택하여 사용하는 비율지정.
      • colsample_bylevel: 각 수준(레벨)에서 사용할 열의 서브샘플 비율. 각 트리의 레벨마다 열을 무작위로 선택하는 비율을 조절. 새로운 깊이 수준에 도달할 때마다 한 번의 서브샘플링이 발생. 현재 트리에서 선택된 열의 집합에서 열이 서브샘플링됩니다.
      • colsample_bynode: 각 노드(분할)에서 열의 서브샘플 비율. 새로운 분할이 평가될 때마다 한 번의 서브샘플링이 발생. 현재 수준에서 선택된 열의 집합에서 열이 서브샘플링됩니다.
  • lambda: 정규화(regularization) 제어 (default=1, alias: reg_lambda)
    • lambda는 L2 정규화 항의 가중치를 조절합니다.
    • L2 정규화는 모델의 가중치 값들을 제한하고 제어함으로써 모델의 복잡성을 줄이고, 과적합을 방지하고, 일반화 성능을 향상키는 방법 중 하나입니다. 
    • 값이 클수록 정규화의 강도가 강해지며, 모델이 보다 일반화되고 단순해집니다.
    • 값이 작을수록 정규화의 강도가 약해지며, 모델은 보다 복잡해질 수 있습니다. (일반적으로 작은 값이나 0에 가까운 값을 선택합니다.)
    • 범위: [0, ]
  • alpha: 정규화(regularization) 제어 (default=0, alias: reg_alpha)
    • alpha는 L1 정규화 항의 가중치를 조절합니다.
    • L1 정규화는 모델의 가중치 값들을 작게 유지하려는 경향이 있는 정규화 방법입니다.
      이는 불필요한 특성의 영향을 줄이고, 모델의 일반화 성능을 향상시킬 수 있습니다.
    • 값이 크면 L1 정규화의 효과가 강해지며, 가중치가 더 많이 0으로 수렴하게 됩니다.
    • 작은 값이나 0에 가까운 값으로 설정할수록 L1 정규화의 영향이 줄어들고, 가중치들이 더 자유롭게 조정될 수 있습니다. (일반적으로 작은 값이나 0에 가까운 값을 선택합니다.)
    • 범위: [0, ∞]
  • tree_method: 트리 구축 알고리즘을 지정(default= auto)
    • auto: xgboost가 데이터셋의 크기에 따라 가장 적합한 알고리즘을 자동으로 선택(exact, approx, hist, gpu_hist 중에서)하므로, 사용자는 알고리즘을 직접 선택할 필요가 없습니다. 일반적으로 CPU 사용 시 auto를 선택하는 것이 좋습니다.
      • exact: 정확한 트리 학습 알고리즘. 완전히 수직적인 트리 분할을 수행하여 노드를 분할. 비교적 작은 데이터셋이나, 분할 후보의 수가 적을 때 사용, 메모리 사용량이 많음.
      • approx: 근사 트리 학습 알고리즘. 트리 분할을 근사적으로 수행하여 계산 속도를 높임. 매우 큰 데이터셋에 적합, 메모리 사용량이 작음.
      • hist: 데이터의 분포 정보를 이용한 히스토그램 기반 트리 학습 알고리즘.  데이터를 히스토그램 버킷으로 변환하여 트리 분할. 큰 데이터셋에 적합, 메모리 사용량이 작고 계산 속도가 빠름.
      • gpu_hist: 대용량 데이터셋에서 XGBoost 모델의 학습 및 예측 속도를 향상시키는 데 효과적. GPU를 이용한 병렬 처리로 인해 대량의 데이터를 효율적으로 처리, 시간과 자원을 절약. GPU 가속화를 지원하는 환경에서는 gpu_hist 알고리즘을 사용하는 것이 좋음.
  • scale_pos_weight: 양성 클래스(positive class)에 대한 가중치를 설정 (default=1)
    • 이진 분류 문제에서 불균형한 클래스 분포를 가진 데이터셋을 다룰 때 사용
    • default = 1 : 클래스의 가중치를 동등하게 취급한다는 의미.
    • 양성 클래스의 비율이 낮고(0.1) 음성 클래스의 비율이 높을 경우(0.9), scale_pos_weight를 적절히 설정하여 양성 클래스에 더 큰 가중치를 부여할 수 있음.
      (일반적으로는 음성 클래스 샘플의 합을 양성 클래스 샘플의 합으로 나눈 비율을 고려하여 적절한 값을 선택)
      이를 통해 XGBoost는 불균형한 클래스 분포를 고려하여 모델을 학습하고, 예측 시에 불균형을 조정하여 더 정확한 결과를 얻을 수 있음.
    • 더 자세한 사항은 "Parameters Tuning"을 참조하고, 예제로 Higgs Kaggle 경진대회에서 확인할 수 있습니다. 
  • max_leaves: 트리에 추가될 수 있는 최대 노드 수 (default=0)
    • 이 파라미터는 XGBoost의 tree_method가 'exact'일 때는 사용되지 않습니다.
    • 트리의 성장을 제한함으로써 모델의 복잡성을 제어하는 데 도움을 줍니다.
    • 값이 너무 작으면 모델이 너무 간단해져서 훈련 데이터에 대한 적합도가 낮아짐
    • 값이 너무 크면 과적합 발생
  • max_bin: 연속형 변수를 이산적인 구간으로 나누는 최대 개수 (default=256)
    • tree_method가 hist, approx 또는 gpu_hist로 설정된 경우에만 사용됩니다.
    • 연속적인 특성들을 버킷화하기 위해 사용되는 이산형(bin)으로 나눌 수 있는 최대 개수입니다.
    • 숫자를 늘리면 계산 시간이 늘어나는 대신 분할의 최적성이 향상됩니다.
    • 일반적으로 데이터가 매우 크거나 변수가 많은 경우 max_bin 값을 상대적으로 크게 설정하는 것이 좋습니다.
  • monotone_constraints: 변수의 단조성을 제한하는 제약 조건
    • 변수의 단조성: 변수의 값이 증가함에 따라 예측 값도 증가하거나 감소하는 경향을 가지는 것을 의미합니다.
    • 이 파라미터를 사용하면 각 변수에 대해 단조성을 지정할 수 있습니다.
    • 단조성 제약을 설정함으로써 모델이 특정 변수에 대해 일정한 방향으로 예측을 수행하도록 유도할 수 있습니다.
      자세한 내용은 "Monotonic Constraints"
  • refresh_leaf (default=1)
  • process_type (default= default)
  • grow_policy (default= depthwise)
  • predictor[default= auto]
  • num_parallel_tree [default=1]

Learning Task Parameters(학습 작업 매개변수)

  • objective : 목적 함수로, 모델이 학습하는 데 사용하는 손실 함수.  목적 함수는 모델의 학습 과정에서 최적화되는 대상.(default=reg:squarederror)
    • reg:squarederror
      • 제곱 손실을 가지는 회귀.
      • 예측 값과 실제 값 사이의 차이를 제곱하여 손실을 계산.
    • reg:squaredlogerror
      • 로그를 적용한 제곱 손실을 사용한 회귀.
      • 실제 값과 예측 값의 로그를 취한 후 제곱 손실을 계산. -> 모든 입력 레이블은 -1보다 커야 함.
      • 이 목적 함수를 사용할 때 rmsle(metric rmsle)의 가능한 문제에 대한 이슈를 참고해야 함.
    • reg:logistic
      • 로지스틱 회귀.
      • 이진 분류 문제를 해결하기 위해 사용.
      • 로지스틱 함수를 활용하여 예측 확률을 계산하고, 이를 기반으로 손실을 최소화하는 방향으로 학습.
    • reg:pseudohubererror
      • 의사 휴버 손실을 가지는 회귀
      • 절댓값을 두 번 미분 가능한 함수로, 절댓값 손실과 제곱 손실의 특성을 결합
      • 이상치에 민감하지 않으면서도 점진적으로 가중치를 감소시키는 효과를 가짐.
    • reg:absoluteerror
      • 절댓값 손실을 사용한 회귀. 예측 값과 실제 값 사이의 차이의 절댓값을 계산하여 손실을 계산.
      • L1 손실을 최소화하는 함
    • binary:logistic
      • 이진 분류를 위한 로지스틱 회귀.
      • 모델은 입력 데이터를 기반으로 각 클래스에 속할 확률을 출력.
    • binary:hinge
      • 이진 분류를 위한 힌지 손실.
      • 모델은 입력 데이터를 기반으로 0 또는 1의 예측을 생성
      • 이진 분류에서 힌지 손실은 확률 대신 하드 예측 값을 출력하는 데 사용될 수 있습니다.
      • 힌지 손실은 SVM (Support Vector Machine)에서 주로 사용되는 손실 함수입니다.
    • count:poisson:
      • 카운트 데이터를 위한 포아송 회귀. 포아송 분포의 평균을 출력.
      • 포아송 회귀에서는 기본적으로 max_delta_step가 0.7로 설정(최적화 보호를 위해 사용됨).
    • multi:softmax
      • 다중 클래스 분류.
      • num_class(클래스의 개수)도 설정해야 함.
    • multi:softprob
      • softmax와 같지만 각 데이터 포인트가 각 클래스에 속할 확률을 포함하는 ndata * nclass 벡터로 출력.
      • 이는 ndata * nclass 행렬로 다시 변형할 수 있음. 결과에는 각 데이터 포인트가 각 클래스에 속할 확률이 포함됨.
    • reg:gamma
      • 로그 링크를 가진 감마 회귀. 감마 분포의 평균 값을 출력합니다.
      • 예를 들어 보험 청구 심각도 모델링이나 감마 분포를 따를 수 있는 다른 결과에 유용할 수 있습니다.
    • reg:tweedie
      • 로그 링크를 가진 트위디(reg:tweedie) 회귀.
      • 보험에서 전체 손실 모델링이나 트위디 분포를 따를 수 있는 다른 결과에 유용할 수 있습니다.
  • base_score(자동으로 세팅)
  • eval_metric: 모델의 성능을 평가하는 데 사용되는 지표. (default:  목적 함수에 따라 자동으로 할당됨)
    • 회귀의 경우 rmse(평균 제곱근 오차)가 사용되고,
    • 분류의 경우 logloss(로그 손실)가 사용됩니다.
    • rank:map의 경우 mean average precision(평균 정밀도)가 사용됩니다.

 

 

https://xgboost.readthedocs.io/en/latest/parameter.html

 

XGBoost Parameters — xgboost 2.0.0-dev documentation

update: Starts from an existing model and only updates its trees. In each boosting iteration, a tree from the initial model is taken, a specified sequence of updaters is run for that tree, and a modified tree is added to the new model. The new model would

xgboost.readthedocs.io

 

728x90
반응형