반응형
LightGBM
- XGBoost보다 학습 시간이 적고, 메모리 사용량도 적은편
- 리프 중심 트리 분할(Leaf Wise)
ㄴ 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화
ㄴ 균형 잡힌 트리를 유지하면서 분할하면 과적합에 더 강한 구조를 가지지만 균형을 맞추기 위한 시간이 많이 필요
ㄴ 리프 중심 트리는 최대 손실 값(max delta loss)을 가지는 리프 노드를 지속적으로 분할하여
트리의 깊이가 깊어지고 비대칭 트리가 생성된다.

장점
- Histogram + Leaf-wise로 XGBoost보다 일반적으로 빠름
- Approximate 분할로 메모리 사용량 감소
- Leaf-wise로 복잡한 패턴을 더 잘 학습
- 카테고리형 피처의 자동 변환과 최적 분할 (원-핫 인코딩 불필요)
- 대규모 데이터 처리 가능
- GPU 가속 지원
단점
- Leaf-wise 방식은 깊은 비대칭 트리를 만들기 때문에 작거나 노이즈가 많은 데이터에서 과적합 위험 ↑
- 적은 데이터에서 과적합 발생 (10000건 이하)
- 소형 데이터에 비효율적
- 일반 트리보다 복잡한 구조로 모델 설명력이 떨어짐
하이퍼 파라미터
from lightgbm import LGBMClassifier, LGBMRegressor
LGBMClassifier(
boosting_type: str = 'gbdt',
num_leaves: int = 31,
max_depth: int = -1,
learning_rate: float = 0.1,
n_estimators: int = 100,
subsample_for_bin: int = 200000,
objective: Union[str, Callable[[Union[numpy.ndarray, NoneType], numpy.ndarray], Tuple[numpy.ndarray, numpy.ndarray]], Callable[[Union[numpy.ndarray, NoneType], numpy.ndarray, Union[numpy.ndarray, NoneType]], Tuple[numpy.ndarray, numpy.ndarray]], Callable[[Union[numpy.ndarray, NoneType], numpy.ndarray, Union[numpy.ndarray, NoneType], Union[numpy.ndarray, NoneType]], Tuple[numpy.ndarray, numpy.ndarray]], NoneType] = None,
class_weight: Union[Dict, str, NoneType] = None,
min_split_gain: float = 0.0,
min_child_weight: float = 0.001,
min_child_samples: int = 20,
subsample: float = 1.0,
subsample_freq: int = 0,
colsample_bytree: float = 1.0,
reg_alpha: float = 0.0,
reg_lambda: float = 0.0,
random_state: Union[int, numpy.random.mtrand.RandomState, numpy.random._generator.Generator, NoneType] = None,
n_jobs: Union[int, NoneType] = None,
importance_type: str = 'split',
**kwargs: Any,
)
LGBMRegressor(
boosting_type: str = 'gbdt',
num_leaves: int = 31,
max_depth: int = -1,
learning_rate: float = 0.1,
n_estimators: int = 100,
subsample_for_bin: int = 200000,
objective: Union[str, Callable[[Union[numpy.ndarray, NoneType], numpy.ndarray], Tuple[numpy.ndarray, numpy.ndarray]], Callable[[Union[numpy.ndarray, NoneType], numpy.ndarray, Union[numpy.ndarray, NoneType]], Tuple[numpy.ndarray, numpy.ndarray]], Callable[[Union[numpy.ndarray, NoneType], numpy.ndarray, Union[numpy.ndarray, NoneType], Union[numpy.ndarray, NoneType]], Tuple[numpy.ndarray, numpy.ndarray]], NoneType] = None,
class_weight: Union[Dict, str, NoneType] = None,
min_split_gain: float = 0.0,
min_child_weight: float = 0.001,
min_child_samples: int = 20,
subsample: float = 1.0,
subsample_freq: int = 0,
colsample_bytree: float = 1.0,
reg_alpha: float = 0.0,
reg_lambda: float = 0.0,
random_state: Union[int, numpy.random.mtrand.RandomState, numpy.random._generator.Generator, NoneType] = None,
n_jobs: Union[int, NoneType] = None,
importance_type: str = 'split',
**kwargs: Any,
)반응형
'개발 > Python' 카테고리의 다른 글
| IsolationForest Hyper Parameters and Attributes (0) | 2025.11.22 |
|---|---|
| LocalOutlierFactor Hyper Parameters and Attributes (0) | 2025.11.22 |
| AdaBoost Hyper Parameters and Attributes (0) | 2025.11.22 |
| 분류 모델 평가 옵션 (F1 Score) (0) | 2025.11.21 |
| GradientBoosting Hyper Parameters and Attributes (0) | 2025.11.20 |
댓글