lightGBM怎么使用libsvm格式的数据

lightGBM怎么使用libsvm格式的数据,在网上搜索了一下并没有相关的使用例子。

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:机器学习(三):基于LightGBM的分类预测
  • 除此之外, 这篇博客: LightGBM参数中的 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的增长效果是相似的,并且会导致我们的训练过程变得缓慢。

  • 您还可以看一下 CSDN就业班老师的【数据分析-随到随学】机器学习模型及应用课程中的 案例:客户信贷违约预测——LightGBM模型超参调优小节, 巩固相关知识点

LightGBM支持使用libsvm格式的数据进行训练和预测。在使用libsvm格式的数据时,数据文件应该以如下格式存储:

<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
...

其中,<label> 是一个二元的类标签,可以是1或-1。 <index> 是每个特征在特征向量中的维度,即特征的编号,从1开始计数。 <value> 是该特征的值。

以下是一个例子:

1 1:0.53 3:0.20 4:0.67
-1 1:0.13 2:0.67 3:0.80 5:0.12
1 4:0.94 5:0.45
-1 2:0.10 3:0.88 4:0.34

使用LightGBM训练libsvm格式的数据可以使用以下代码:

import lightgbm as lgb
from sklearn.datasets import load_svmlight_file

# 载入训练数据和标签
train_X, train_y = load_svmlight_file('train_data.libsvm')

# 构建LightGBM的数据集
lgb_train = lgb.Dataset(train_X, train_y)

# 设置LightGBM的参数
params = {
    'boosting_type': 'gbdt',
    'objective': 'binary',
    'metric': 'binary_logloss',
    'num_leaves': 31,
    'learning_rate': 0.05
}

# 开始训练
gbm = lgb.train(params, lgb_train, num_boost_round=100)

预测也可以使用相似的方式载入数据,然后使用gbm.predict()函数来进行预测。