分享

R语言lightgbm快速上手

 阿越就是我 2024-01-26 发布于上海

💡专注R语言在🩺生物医学中的使用


设为“星标”,精彩不错过


lightGBM是由微软在2017年提出的算法,是一个快速的、分布式的、高性能的梯度提升框架,基于决策树算法,可用于排序、分类、以及许多其他机器学习任务。本质上还是一种集成算法,也是GBDT的一一种改进方法,和xgboost有诸多相似之处,也有很多独特的优势。

其主要优势有:

  • 更快的训练速度和更高的效率;
  • 降低内存使用率;
  • 更好的准确性;
  • 支持并行化;
  • 能够处理大规模数据

目前在R语言中实现lightgbm可以通过lightgbm包。lightgbm包在设计时参考了xgboost,所以在使用方面二者有很多相似之处(可以说是一模一样!)。

安装

install.packages("lightgbm")

lightgbm是支持GPU的,如果要使用GPU,可以按照官方教程进行配置:https://lightgbm./en/latest/R/index.html#installing-a-gpu-enabled-build

我们这里就不演示了。

快速上手

加载R包和数据。

library(lightgbm)

data(bank, package = "lightgbm")
dim(bank)
## [1] 4521   17
bank[1:5, c("y""age""balance")]
##     y age balance
## 1: no  30    1787
## 2: no  33    4789
## 3: no  35    1350
## 4: no  30    1476
## 5: no  59       0
# 结果变量
table(bank$y)
## 
##   no  yes 
## 4000  521

这是一个2分类数据,共有4521行,17列。

然后就是训练模型了。由于参考了xgboost的设计思路,所以使用上真的和xgboost太像了,部分细节这里不再重复说了,可以参考之前的推文:R语言xgboost快速上手

lightgbm提供了2个函数用于训练模型,其中lightgbm()lgb.train()的轻量化实现,这个特性和xgboost是一模一样的,而且各种参数的名字也基本上一样的。

在支持的格式上,也是和xgboost保持一致,只支持x/y接口,不支持R语言中经典的公式接口。

预测变量要么是矩阵,要么是专门为lightgbm开发的lgb.Dataset。结果变量需要改为数值型,不能是因子型或者字符型。

下面是使用lightgbm()训练模型的示例:

y <- as.numeric(bank$y == "yes")
X <- data.matrix(bank[, c("age""balance")]) # 只选了2个自变量

# 训练
fit <- lightgbm(
  data = X
  , label = y
  , params = list(
    num_leaves = 4L
    , learning_rate = 1.0
    , objective = "binary"
  )
  , nrounds = 10L
  , verbose = -1L
)

# 训练结果
summary(predict(fit, X))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01192 0.07370 0.09871 0.11593 0.14135 0.65796

除此之外,lightgbm的专用格式可以通过lgb.Dataset()进行包装。包装后就可以使用lgb.train()进行训练了,它的params参数也是接受一个列表:

# 专用格式
dtrain <- lgb.Dataset(X, label = y)

# 参数设置
params <- list(
  objective = "binary"
  , num_leaves = 4L
  , learning_rate = 1.0
)

# 训练模型
fit <- lgb.train(
  params
  , data = dtrain
  , nrounds = 10L
  , verbose = -1L
)

lightgbm的超参数非常多,大家可以参考官方文档,大部分参数都和xgboost差不多,也可以参考之前的关于xgboost的推文。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多