目录
一、简介
二、优缺点
三、样例代码
四、总结
一、简介
LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升(Gradient Boosting)算法的机器学习模型。它是由微软团队于2017年开发的,旨在解决大规模数据下的效率和准确性问题。
LightGBM的原理如下:
-
基于梯度提升:LightGBM使用梯度提升算法来训练多个弱分类器,每个弱分类器都试图学习最佳的预测函数来减少当前模型的残差。
-
基于直方图的决策树算法:LightGBM使用直方图算法替代了传统的决策树算法。直方图算法把连续的特征分成离散的bins,并在训练过程中对特征的bins进行选择,从而减少了计算量,并提高了训练速度。
-
基于Leaf-wise的生长策略:LightGBM采用了基于叶子生长的策略,即每次选择能够最大程度降低损失函数的叶子节点进行生长,而不是像传统的深度优先生长策略遍历所有节点。这样可以提高训练速度,但也容易过拟合。
二、优缺点
LightGBM的优点如下:
-
高效性:LightGBM使用直方图和叶子生长策略,大大减少了模型的计算量,训练速度更快。它还支持并行训练和特征并行化,能够处理大规模的数据集。
-
准确性:LightGBM具有较低的误差率,能够处理复杂的模型和大规模的数据集,并且在大多数情况下具有较高的准确性。
-
鲁棒性:LightGBM对噪声和离群值具有较好的鲁棒性,可以处理不完整的数据和缺失值。
LightGBM的缺点如下:
-
容易过拟合:由于采用了基于叶子生长的策略,LightGBM容易过拟合训练数据,尤其是在数据集较小或特征较少时。
-
内存消耗较大:LightGBM在训练过程中需要存储额外的直方图和梯度信息,因此对内存消耗较大,特别是在处理大规模数据时。
三、样例代码
from sklearn.datasets import load_iris
import lightgbm as lgb
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import warnings
warnings.filterwarnings('ignore')iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=[i[:-5].replace(' ','_') for i in iris.feature_names])
df['target'] = iris.targettr_x, te_x, tr_y, te_y = train_test_split(df.drop(columns='target'), df['target'], test_size=0.2)
tr_lgb_dt = lgb.Dataset(tr_x, label=tr_y.values)
te_lgb_dt = lgb.Dataset(te_x, label=te_y.values)lgb_param = {'objective': 'multiclass','metric': ['multi_logloss', 'multi_error'],'num_class': 3,'n_jobs': 4,'num_iterations': 300,'learning_rate': 0.02,'max_depth': 4,'lambda_l2': 0.8,'verbose': -1
}
eval_result={}
lgb_model = lgb.train(lgb_param, train_set=tr_lgb_dt , valid_sets=[tr_lgb_dt, te_lgb_dt], verbose_eval=20,callbacks=[lgb.log_evaluation, lgb.early_stopping(50, first_metric_only=True), lgb.record_evaluation(eval_result)])# plot loss
plt.title('training losses')
for data_name, metric_res in eval_result.items():for metric_name, log_ in metric_res.items():plt.plot(log_, label = f'{data_name}-{metric_name}', color='steelblue' if 'train' in data_name else 'darkred', linestyle=None if 'train' in data_name else '-.',alpha=0.7)plt.legend()
plt.show()
plt.savefig(fname="LightGBM_iris_result.png")
下方InsCode选择查看文件里的LightGBM_iris_result.png即可查看可视化结果
四、总结
LightGBM是一种高效、准确的梯度提升算法模型,适用于大规模数据集和复杂的模型训练。它在训练速度和准确性上有一定的优势,但也存在一些容易过拟合和内存消耗大的缺点。