大家好,我是Peter~
LightGBM是一种经典的机器学习算法,它的背景、原理和特点都非常值得研究。LightGBM的算法产生了一些特点,例如高效、可扩展和高准确性。本文将简要介绍LightGBM的特点、原理以及一些基于LightGBM和随机搜索优化的案例。
在机器学习领域,梯度提升机(Gradient Boosting Machines, GBMs)是一类强大的集成学习算法,它们通过逐步添加弱学习器(通常是决策树)来最小化预测误差,从而构建一个强大的模型。GBMs通常用于最小化预测误差,从而构建一个强大的模型,这可以通过最小化残差或损失函数来实现。这种算法被广泛使用,并经常被用于决策树等弱学习器构建的强大模型的最小化预测误差。
在大数据时代,数据集的规模急剧增长,传统的GBMs由于其计算和存储成本高昂,难以有效地扩展。
为了解决这些问题,Microsoft在2017年推出了LightGBM(Light Gradient Boosting Machine),一个更快速、更低内存消耗、更高性能的梯度提升框架。
官方学习地址:https://lightgbm.readthedocs.io/en/stable/
1、基于直方图的决策树算法:
2、带深度限制的leaf-wise树生长策略:
3、单边梯度采样(GOSS):
4、互斥特征捆绑(EFB):
5、支持并行和分布式学习:
6、缓存优化:
7、支持多种损失函数:
8、正则化和剪枝:
9、模型解释性:
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")
加载公开的iris数据集:
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]
In [5]:
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
同时创建LightGBM数据集:
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表示不显示}
In [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中文网其他相关文章!