LightGBM的优势。
-
更快的训练速度和更高的效率: LightGBM使用基于直方图的算法。例如,它将连续的特征值分桶(buckets)装进离散的箱子(bins),这是的训练过程中变得更快。
-
更低的内存占用:使用离散的箱子(bins)保存并替换连续值导致更少的内存占用。
-
更高的准确率(相比于其他任何提升算法) : 它通过leaf-wise分裂方法产生比level-wise分裂方法更复杂的树,这就是实现更高准确率的主要因素。然而,它有时候或导致过拟合,但是我们可以通过设置 max-depth 参数来防止过拟合的发生。
-
大数据处理能力: 相比于XGBoost,由于它在训练时间上的缩减,它同样能够具有处理大数据的能力。
-
支持并行学习
LightGBM的重要参数
-
task: 默认值=train,可选项=train,prediction;指定我们希望执行的任务,该任务有两种类型:训练 和 预测;
-
application: 默认值=regression,type=enum,options=options;
-
-
regression: 执行回归任务;
-
binary:二分类;
-
multiclass:多分类;
-
lambdarank:lambrank应用;
-
-
data: type=string;training data,LightGBM将从这些数据中进行训练;
-
num_iterations: 默认值为100,类型为int。表示提升迭代次数,也就是提升树的棵树;
-
num_leaves: 每个树上的叶子数,默认值为31,类型为int;
-
device: 默认值=cpu;可选项:cpu,gpu。也就是我们使用什么类型的设备去训练我们的模型。选择GPU会使得训练过程更快;
-
mindatain_leaf: 每个叶子上的最少数据;
-
feature_fraction: 默认值为1;指定每次迭代所需要的特征部分;
-
bagging_fraction: 默认值为1;指定每次迭代所需要的数据部分,并且它通常是被用来提升训练速度和避免过拟合的。
-
mingainto_split: 默认值为1;执行分裂的最小的信息增益;
-
max_bin: 最大的桶的数量,用来装数值的;
-
mindatain_bin: 每个桶内最少的数据量;
-
numthreads: 默认值为OpenMPdefault,类型为int。指定LightGBM算法运行时线程的数量;
-
label: 类型为string;指定标签列;
-
categorical_feature: 类型为string;指定我们想要进行模型训练所使用的特征类别;
-
num_class: 默认值为1,类型为int;仅仅需要在多分类的场合。
6.1 为了最好的拟合
-
numleaves:这个参数是用来设置组成每棵树的叶子的数量。numleaves 和 maxdepth理论上的联系是: numleaves = 2^(maxdepth)。然而,但是如果使用LightGBM的情况下,这种估计就不正确了:因为它使用了leafwise而不是depthwise分裂叶子节点。因此,numleaves必须设置为一个小于2^(maxdepth)的值。否则,他将可能会导致过拟合。LightGBM的numleave和max_depth这两个参数之间没有直接的联系。因此,我们一定不要把两者联系在一起。
-
mindatain_leaf : 它也是一个用来解决过拟合的非常重要的参数。把它的值设置的特别小可能会导致过拟合,因此,我们需要对其进行相应的设置。因此,对于大数据集来说,我们应该把它的值设置为几百到几千。
-
max_depth: 它指定了每棵树的最大深度或者它能够生长的层数上限。
6.2 为了更快的速度
-
bagging_fraction : 它被用来执行更快的结果装袋;
-
feature_fraction : 设置每一次迭代所使用的特征子集;
-
maxbin : maxbin的值越小越能够节省更多的时间:当它将特征值分桶装进不同的桶中的时候,这在计算上是很便宜的。
6.3 为了更高的准确率
-
使用更大的训练数据集;
-
num_leaves : 把它设置得过大会使得树的深度更高、准确率也随之提升,但是这会导致过拟合。因此它的值被设置地过高不好。
-
maxbin : 该值设置地越高导致的效果和numleaves的增长效果是相似的,并且会导致我们的训练过程变得缓慢。