LightGBM(Light Gradient Boosting Machine)是一种基于决策树的梯度提升框架,主要用于分类、回归和排序等多种机器学习任务。其核心原理是利用基分类器(决策树)进行训练,通过集成学习得到最优模型。LightGBM相比其他模型如XGBoost,在处理大规模数据集时具有更高的计算效率和可扩展性。
直方图算法:LightGBM使用直方图算法来加速决策树的构建过程。它将连续的特征值离散化为k个整数,形成直方图,从而减少计算复杂度。
单边梯度采样算法(GOSS):GOSS通过采样保留梯度大的样本并随机采样一些梯度小的样本,以减少计算复杂度,同时保持数据分布的准确性。
互斥特征捆绑算法(EFB):EFB通过将互斥特征捆绑在一起,减少特征数量,进一步加速训练过程。
并行学习:LightGBM支持特征并行和数据并行,通过分散规则和直方图加速训练,减少通信和计算开销。
支持类别特征lightGBM可以直接处理类别特征,无需转换为one-hot编码,大大提高了处理速度。
LightGBM以其高效率和准确性在多个领域得到广泛应用。由于其能够处理大规模数据集,适合于实时预测和大规模在线学习。此外,LightGBM在处理稀疏数据时表现出色,能够有效地减少特征维度,提高训练速度。
LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以快速处理海量数据等优点。
今天我们仍以Excel示例数据为例,简单演示一下LightGBM模型的基础操作。我们先用Rstudio打开示例数据。
#加载包
install.packages(lightgbm)
install.packages("Graphviz")
library(lightgbm)
library(Graphviz)
#准备数据
Train$结局 <- as.factor(Train$结局)
Train.matrix<-as.matrix(Train[,-ncol(Train)])
Test.matrix<-as.matrix(Test[,-ncol(Test)])
Train.labels<-as.numeric(Train$结局)
lgb.Train<-lgb.Dataset(data=Train.matrix,label=Train.labels-1) #LightGBM需要0和1标签
#设置LightGBM参数
params <- list(
objective="binary",
num_leaves=31,
learning_rate=0.1,
nrounds=1000)
#训练模型
lgb.model<-lgb.train(params=params,data=lgb.Train,
nrounds=params[['nrounds']],verbose=-1)
summary(lgb.model)
#预测测试集
pred <- predict(lgb.model, as.matrix(Test[, -ncol(Test)]))
head(pred)
pred
#绘制ROC曲线
library(pROC)
roc.curve<-roc(Test$结局,pred)
plot(roc.curve,legacy.axes=TRUE,main="ROC Curve for Clinical Data")
summary(roc.curve)
#真实值与预测值散点图
library(dplyr)
library(ggplot2)
library(tune)
# 整合预测值和真实值
lgb.res <- bind_cols(truevalue=Test$结局,estimator=pred)
ggplot(lgb.res,mapping=aes(truevalue,estimator))+
geom_point(alpha=0.3,size=2)+
geom_abline(intercept=0,slope=1,col="red")+
labs(x = "observed", y = "predicted") +
coord_obs_pred()
#模型解释
library(DALEX)
library(DALEXtra)
# 构建模型解释器
exp <- DALEXtra::explain_tidymodels(lgb.model,
Test.matrix,
y=Test.matrix,
label = "LightGBM")
#变量重要性
lgb_mp <- model_parts(exp)
plot(lgb_mp)
#模型诊断
plot(model_diagnostics(exp))
#waterfall图
library(shapviz)
shap <- shapviz(lgb.model,X_pred=Test.matrix)
# 每个变量对预测的贡献
sv_waterfall(shap,row_id = 1)
#基于SHAP值的变量重要性
sv_importance(shap,kind = "beeswarm")
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!

