23  lightGBM

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

其主要优势有:

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

23.1 安装

install.packages("lightgbm")

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

我们这里就不演示了。

23.2 快速上手

加载R包和数据。

library(lightgbm)

data(bank, package = "lightgbm")
dim(bank)
## [1] 4521   17

bank[1:5, c("y", "age", "balance")]
##         y   age balance
##    <char> <int>   <int>
## 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的推文。

这个包和xgboost真的是一模一样,我就不多介绍了,大家结合之前的xgboost的推文,自己了解下吧。

23.3 推荐学习资源

  1. lightgbm官方文档:https://lightgbm.readthedocs.io/en/latest/index.html
  2. lightgbm中文文档:https://lightgbm.apachecn.org/#/docs/6