>  기사  >  기술 주변기기  >  LightGBM 실전 + 무작위 검색 매개변수 조정: 정확도 96.67%

LightGBM 실전 + 무작위 검색 매개변수 조정: 정확도 96.67%

PHPz
PHPz원래의
2024-06-08 22:45:30673검색

LightGBM 실전 + 무작위 검색 매개변수 조정: 정확도 96.67%

안녕하세요 여러분, 저는 Peter입니다~

LightGBM은 고전적인 기계 학습 알고리즘이며 그 배경, 원리 및 특성은 매우 연구할 가치가 있습니다. LightGBM의 알고리즘은 효율성, 확장성 및 높은 정확성과 같은 기능을 제공합니다. 이 글에서는 LightGBM의 특징과 원리, 그리고 LightGBM과 랜덤 검색 최적화를 기반으로 한 몇 가지 사례를 간략하게 소개하겠습니다.

LightGBM 알고리즘

기계 학습 분야에서 GBM(Gradient Boosting Machines)은 약한 학습기(일반적으로 의사결정 트리)를 점진적으로 추가하여 예측 오류를 최소화하는 강력한 앙상블 학습 알고리즘 클래스입니다. GBM은 종종 예측 오류를 최소화하여 강력한 모델을 구축하는 데 사용되며, 이는 잔차 또는 손실 함수를 최소화하여 달성할 수 있습니다. 이 알고리즘은 의사결정 트리와 같이 약한 학습기로 구축된 강력한 모델의 예측 오류를 최소화하기 위해 널리 사용되고 자주 사용됩니다.

빅데이터 시대에는 데이터 세트의 크기가 급격히 증가했으며 기존 GBM은 높은 컴퓨팅 및 저장 비용으로 인해 효과적으로 확장하기가 어렵습니다.

  • 예를 들어, 수평 분할 결정 트리 성장 전략의 경우 균형 잡힌 트리를 생성할 수 있지만 종종 모델의 식별 능력이 저하되는 반면 리프 기반 성장 전략의 경우 개선될 수 있습니다. 정확도가 높으면 과적합되기 쉽습니다.
  • 또한 대부분의 GBM 구현은 각 반복에서 기울기를 계산하기 위해 전체 데이터 세트를 순회해야 하는데, 이는 데이터 양이 많을 때 비효율적입니다. 따라서 모델의 정확도를 유지하면서 대규모 데이터를 효율적으로 처리할 수 있는 알고리즘이 필요합니다.

이러한 문제를 해결하기 위해 Microsoft는 2017년에 더 빠르고, 더 낮은 메모리 소비와 더 높은 성능의 그라디언트 부스팅 프레임워크인 LightGBM(Light Gradient Boosting Machine)을 출시했습니다.

공식 학습 주소: https://lightgbm.readthedocs.io/en/stable/

LightGBM의 원리

1. 히스토그램 기반 의사결정 트리 알고리즘:

  • 원리: LightGBM은 히스토그램 최적화 기술을 사용하여 연속 특성 값을 생성합니다. ​​특정 빈(즉, 히스토그램 버킷)으로 분할되어 노드가 분할될 때 계산해야 하는 데이터의 양이 줄어듭니다.
  • 장점: 이 방법은 메모리 사용량을 줄이면서 계산 속도를 높일 수 있습니다.
  • 구현 세부정보: 각 기능에 대해 알고리즘은 히스토그램을 유지하여 다양한 버킷에 기능의 통계 정보를 기록합니다. 노드 분할을 수행할 때 모든 데이터를 순회하지 않고도 이러한 히스토그램의 정보를 직접 활용할 수 있습니다.

2. 깊이 제한이 있는 리프형 트리 성장 전략:

  • 원리: 전통적인 수평 분할과 달리 리프형 성장 전략은 매번 현재의 모든 리프 노드에서 가장 큰 분할 이익을 갖는 노드를 선택하는 것입니다. 나뉘다.
  • 장점: 이 전략을 사용하면 의사결정 트리가 데이터의 비정상적인 부분에 더 집중하게 되어 일반적으로 정확도가 향상됩니다.
  • 단점: 특히 데이터에 노이즈가 있는 경우 쉽게 과적합으로 이어질 수 있습니다.
  • 개선 조치: LightGBM은 최대 깊이 제한을 설정하여 과적합을 방지합니다.

3. 단방향 기울기 샘플링(GOSS):

  • 원리: 데이터 세트의 큰 기울기 샘플의 경우 GOSS 알고리즘은 데이터의 일부(일반적으로 기울기가 큰 샘플링)만 유지하여 데이터의 양을 줄입니다. 손실이 없도록 하면서 계산합니다. 정보가 너무 많습니다.
  • 장점: 이 방법은 정확도를 크게 떨어뜨리지 않고 훈련 속도를 높일 수 있습니다.
  • 응용 시나리오: 데이터 왜곡이 심각한 상황에 특히 적합합니다.

4. EFB(상호 배타적 기능 번들링):

  • 원리: EFB는 기능 수를 줄이고 계산 효율성을 향상시키는 기술입니다. 이는 상호 배타적인 특성(즉, 동시에 0이 아닌 특성)을 결합하여 특성 차원을 줄입니다.
  • 장점: 메모리 사용 효율성과 훈련 속도가 향상되었습니다.
  • 구현 세부정보: 기능의 상호 배타성을 통해 알고리즘은 동시에 더 많은 기능을 처리할 수 있으므로 처리되는 실제 기능 수를 줄일 수 있습니다.

5. 병렬 및 분산 학습 지원:

  • 원리: LightGBM은 다중 스레드 학습을 지원하며 병렬 교육에 여러 CPU를 사용할 수 있습니다.
  • 장점: 멀티 코어 프로세서의 훈련 속도가 크게 향상됩니다.
  • 확장성: 또한 분산 학습을 지원하고 여러 기계를 사용하여 모델을 공동으로 훈련할 수 있습니다.

6. 캐시 최적화:

  • 원리: 데이터를 읽는 방법이 최적화되었으며 더 많은 캐시를 사용하여 데이터 교환 속도를 높일 수 있습니다.
  • 장점: 특히 대규모 데이터 세트의 경우 캐시 최적화를 통해 성능을 크게 향상시킬 수 있습니다.

7. 다양한 손실 함수 지원:

  • 특징: 일반적으로 사용되는 회귀 및 분류 손실 함수 외에도 LightGBM은 다양한 비즈니스 요구 사항을 충족하는 맞춤형 손실 함수도 지원합니다.

8. 정규화 및 가지치기:

  • 원리: 모델 복잡성을 제어하고 과적합을 방지하기 위해 L1 및 L2 정규화 용어가 제공됩니다.
  • 구현: 과적합을 더욱 방지하기 위해 역방향 가지치기 전략을 구현했습니다.

9. 모델 해석 가능성:

  • 특징: LightGBM은 의사결정 트리를 기반으로 한 모델이기 때문에 모델 해석성이 뛰어나고 기능 중요도 및 기타 방법을 통해 모델의 의사결정 논리를 이해할 수 있습니다.

LightGBM의 특징

Efficiency

  • 속도 이점: 히스토그램 최적화 및 리프별 성장 전략을 통해 LightGBM은 정확성을 보장하면서 훈련 속도를 크게 향상시킵니다.
  • 메모리 사용량: LightGBM은 다른 GBM 구현보다 적은 메모리를 필요로 하므로 더 큰 데이터 세트를 처리할 수 있습니다.

정확성

  • 최고 우선 성장 전략: LightGBM이 채택한 잎별 성장 전략은 데이터를 더 밀접하게 맞출 수 있으며 일반적으로 수평 분할보다 더 나은 정확도를 달성할 수 있습니다.
  • 과적합을 방지하는 방법: 최대 깊이 제한과 역방향 가지치기를 설정하여 LightGBM은 과적합을 방지하면서 모델 정확도를 향상시킬 수 있습니다.

확장성

  • 병렬 및 분산 학습: LightGBM은 멀티스레딩 및 분산 컴퓨팅을 지원하도록 설계되어 최신 하드웨어의 컴퓨팅 성능을 최대한 활용할 수 있습니다.
  • 다중 플랫폼 지원: LightGBM은 Windows, macOS, Linux 등 여러 운영 체제에서 실행될 수 있으며 Python, R, Java 등 여러 프로그래밍 언어를 지원합니다.

사용 용이성

  • 매개변수 조정: LightGBM은 사용자가 특정 문제에 따라 조정할 수 있도록 다양한 매개변수 옵션을 제공합니다.
  • 사전 훈련된 모델: 사용자는 사전 훈련된 모델에서 시작하여 모델링 프로세스를 가속화할 수 있습니다.
  • 모델 해석 도구: LightGBM은 사용자가 모델의 의사 결정 프로세스를 이해하는 데 도움이 되는 기능 중요도 평가 도구를 제공합니다. ➢ inmport library
in [1] :

import numpy as npimport lightgbm as lgbfrom sklearn.model_selection import train_test_split, RandomizedSearchCVfrom sklearn.datasets import load_irisfrom sklearn.metrics import accuracy_scoreimport warningswarnings.filterwarnings("ignore")

로드 데이터 공개 홍채 데이터 세트로드 :
in [2] :

# 加载数据集data = load_iris()X, y = data.data, data.targety = [int(i) for i in y]# 将标签转换为整数

in [3] :

X[:3]
out [3]:

array([[5.1, 3.5, 1.4, 0.2], [4.9, 3. , 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]])
In [4]:

y[:10]
Out[4]:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Divide the data

In [5]:
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

같은 시간:

In [6]:
lgb_train = lgb.Dataset(X_train, label=y_train)

매개변수 설정

In [7]:
# 设置参数范围param_dist = {'boosting_type': ['gbdt', 'dart'],# 提升类型梯度提升决策树(gbdt)和Dropouts meet Multiple Additive Regression Trees(dart)'objective': ['binary', 'multiclass'],# 目标;二分类和多分类'num_leaves': range(20, 150),# 叶子节点数量'learning_rate': [0.01, 0.05, 0.1],# 学习率'feature_fraction': [0.6, 0.8, 1.0],# 特征采样比例'bagging_fraction': [0.6, 0.8, 1.0],# 数据采样比例'bagging_freq': range(0, 80),# 数据采样频率'verbose': [-1]# 是否显示训练过程中的详细信息,-1表示不显示}

매개변수 조정을 위한 무작위 검색

[8]:
# 初始化模型model = lgb.LGBMClassifier()# 使用随机搜索进行参数调优random_search = RandomizedSearchCV(estimator=model, param_distributinotallow=param_dist, # 参数组合 n_iter=100,  cv=5, # 5折交叉验证 verbose=2,  random_state=42,  n_jobs=-1)# 模型训练random_search.fit(X_train, y_train)Fitting 5 folds for each of 100 candidates, totalling 500 fits

가장 적합한 매개변수를 출력합니다. 조합:

In [9]:
# 输出最佳参数print("Best parameters found: ", random_search.best_params_)Best parameters found:{'verbose': -1, 'objective': 'multiclass', 'num_leaves': 87, 'learning_rate': 0.05, 'feature_fraction': 0.6, 'boosting_type': 'gbdt', 'bagging_freq': 22, 'bagging_fraction': 0.6}

최적 매개변수를 사용한 모델링

In [10]:
# 使用最佳参数训练模型best_model = random_search.best_estimator_best_model.fit(X_train, y_train)# 预测y_pred = best_model.predict(X_test)y_pred = [round(i) for i in y_pred]# 将概率转换为类别# 评估模型print('Accuracy: %.4f' % accuracy_score(y_test, y_pred))Accuracy: 0.9667

위 내용은 LightGBM 실전 + 무작위 검색 매개변수 조정: 정확도 96.67%의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.