안녕하세요 여러분, 저는 Peter입니다~
LightGBM은 고전적인 기계 학습 알고리즘이며 그 배경, 원리 및 특성은 매우 연구할 가치가 있습니다. LightGBM의 알고리즘은 효율성, 확장성 및 높은 정확성과 같은 기능을 제공합니다. 이 글에서는 LightGBM의 특징과 원리, 그리고 LightGBM과 랜덤 검색 최적화를 기반으로 한 몇 가지 사례를 간략하게 소개하겠습니다.
기계 학습 분야에서 GBM(Gradient Boosting Machines)은 약한 학습기(일반적으로 의사결정 트리)를 점진적으로 추가하여 예측 오류를 최소화하는 강력한 앙상블 학습 알고리즘 클래스입니다. GBM은 종종 예측 오류를 최소화하여 강력한 모델을 구축하는 데 사용되며, 이는 잔차 또는 손실 함수를 최소화하여 달성할 수 있습니다. 이 알고리즘은 의사결정 트리와 같이 약한 학습기로 구축된 강력한 모델의 예측 오류를 최소화하기 위해 널리 사용되고 자주 사용됩니다.
빅데이터 시대에는 데이터 세트의 크기가 급격히 증가했으며 기존 GBM은 높은 컴퓨팅 및 저장 비용으로 인해 효과적으로 확장하기가 어렵습니다.
이러한 문제를 해결하기 위해 Microsoft는 2017년에 더 빠르고, 더 낮은 메모리 소비와 더 높은 성능의 그라디언트 부스팅 프레임워크인 LightGBM(Light Gradient Boosting Machine)을 출시했습니다.
공식 학습 주소: https://lightgbm.readthedocs.io/en/stable/
1. 히스토그램 기반 의사결정 트리 알고리즘:
2. 깊이 제한이 있는 리프형 트리 성장 전략:
3. 단방향 기울기 샘플링(GOSS):
4. EFB(상호 배타적 기능 번들링):
5. 병렬 및 분산 학습 지원:
6. 캐시 최적화:
7. 다양한 손실 함수 지원:
8. 정규화 및 가지치기:
9. 모델 해석 가능성:
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")
# 加载数据集data = load_iris()X, y = data.data, data.targety = [int(i) for i in y]# 将标签转换为整数
X[: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]])
y[:10]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
lgb_train = lgb.Dataset(X_train, label=y_train)
# 设置参数范围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表示不显示}
# 初始化模型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}
# 使用最佳参数训练模型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 중국어 웹사이트의 기타 관련 기사를 참조하세요!