• 机器学习-集成学习LightGBM


    前言

    LightGBM 是微软开发的一个强大的开源梯度提升框架。它旨在高效和可扩展,能够处理大型数据集和高维特征。LightGBM结合使用基于梯度的单边采样(GOSS)和独占特征捆绑(EFB)来降低计算成本并提高模型的准确性。

    LightGBM 支持各种目标函数,可用于回归和分类问题。它还提供了一些高级功能,例如提前停止、交叉验证和超参数调整,以帮助用户构建稳健的模型。此外,它还为流行的编程语言(如 Python、R 和 C++)提供接口,使其易于集成到现有的数据科学工作流程中。

    总体而言,LightGBM 是构建高性能梯度提升模型的热门选择,尤其是对于大规模和高维数据集。

    介绍LightGBM

    LightGBM的背景和起源

    • LightGBM是一个开源的梯度提升框架,由微软公司在2017年推出。它旨在提供一个高效、可扩展、准确和易于使用的机器学习工具,可以处理大规模数据和高维特征,适用于回归、分类和排序等各种任务。

    • LightGBM的起源可以追溯到GBDT(梯度提升决策树)算法,它是一种基于决策树的机器学习方法,通过递归地训练一系列的决策树来构建一个强大的预测模型。GBDT已经被广泛应用于各种领域,例如推荐系统、广告和金融等。然而,GBDT算法仍然存在一些限制,例如对于高维数据和大规模数据集的处理效率不高。

    • 为了解决这些问题,LightGBM引入了一些创新性的技术,如基于梯度的单侧采样(GOSS)和独占特征绑定(EFB)等,以提高训练速度和准确性。此外,LightGBM还支持并行化处理、GPU加速、多种损失函数和多种分类器等功能,使其在大规模数据和高维特征的处理中表现出色。这些优势使得LightGBM在学术界和工业界都得到广泛的应用和认可。

    LightGBM的优点和适用场景

    • 高效性:LightGBM引入了基于梯度的单侧采样(GOSS)和独占特征绑定(EFB)等创新性技术,提高了模型的训练速度和准确性。它也支持多线程和GPU加速,进一步提高了处理效率。
    • 可扩展性:LightGBM能够处理大规模数据和高维度特征,并且支持分布式计算,可在多个计算节点上并行训练模型。
    • 准确性:LightGBM在处理高维度数据和非线性问题时表现出色,通常可以获得比其他梯度提升框架更好的预测结果。
    • 可解释性:LightGBM支持特征重要性评估和可视化,能够帮助用户理解模型的工作原理和特征的贡献。
    • 灵活性:LightGBM支持多种损失函数和分类器,能够适应各种回归、分类和排序任务。

    基于上述优点,LightGBM适用于以下场景:

    1. 大规模数据和高维特征:当数据集规模很大或者特征维度很高时,LightGBM可以通过并行化和创新性技术,快速地训练出一个准确的模型。
    2. 非线性问题:LightGBM在处理非线性问题时表现出色,因此它适用于许多需要处理非线性问题的领域,例如金融、电商和医疗等。
    3. 可解释性需求:LightGBM支持特征重要性评估和可视化,能够帮助用户理解模型的工作原理和特征的贡献,适用于需要理解模型背后逻辑的场景。
    4. 需要快速训练和预测的场景:LightGBM在处理大规模数据和高维特征时表现出色,因此适用于需要快速训练和预测的场景,例如在线广告和推荐系统等。

    LightGBM的基本工作原理

    • 通过迭代地训练多棵决策树来构建一个强大的集成模型。
    1. 损失函数:LightGBM支持多种损失函数,例如均方误差(MSE)、对数损失(Log loss)和L1损失等。用户可以根据具体问题选择合适的损失函数。
    2. 初始化:LightGBM将训练数据随机分成若干个小批次,每个小批次的大小可以由用户自定义。对于每个小批次,LightGBM使用一棵单节点的决策树作为初始模型。
    3. 梯度提升:LightGBM采用梯度提升算法,通过迭代地训练多棵决策树来不断提高模型的预测准确性。在每次迭代中,LightGBM根据当前模型的预测结果计算出每个样本的负梯度,将负梯度作为新的目标变量来训练下一棵决策树。这样,每棵决策树都是在之前模型的基础上进行训练的。
    4. 单侧采样:LightGBM引入了基于梯度的单侧采样(GOSS)技术,通过降低低梯度样本的采样率,提高高梯度样本的采样率,减少数据集的噪声,从而加速模型的训练。
    5. 独占特征绑定:LightGBM还引入了独占特征绑定(EFB)技术,将相似的特征分成一组,同时只选取一组特征作为决策树分裂的依据,减少了分裂的计算量和噪声,提高了模型的准确性和泛化能力。
    6. 分裂策略:LightGBM采用基于梯度的直方图分裂算法,将特征值按照梯度的大小划分为若干个直方图,选取最优的分裂点来进行分裂,减少了计算量和噪声,提高了模型的准确性和泛化能力。
    7. 叶子结点优化:LightGBM采用直方图优化算法,将每个叶子结点的样本按照特征值的大小划分为若干个直方图,计算每个直方图的梯度和Hessian矩阵,从而快速地确定每
    8. 评估指标:LightGBM支持多种评估指标,例如准确率、AUC、平均绝对误差(MAE)和均方误差(MSE)等。用户可以根据具体问题选择合适的评估指标。
    9. 提前停止:LightGBM还支持提前停止技术,当模型的性能在验证集上不再提升时,自动停止模型的训练,防止模型过拟合。
    10. 并行加速:LightGBM采用并行加速技术,可以利用多线程和多机并行加速模型的训练,提高模型训练的效率。

    安装和配置LightGBM

    安装LightGBM

    htGBM的安装可以通过多种方式进行,这里介绍两种较为常用的方式:使用Anaconda安装和使用pip安装。

    使用Anaconda安装:

    1. 首先,需要安装Anaconda(如果已经安装,可以跳过此步骤)。在Anaconda官网上下载对应版本的Anaconda安装程序,安装过程中可以根据需要选择添加环境变量、设置路径等选项。

    2. 打开Anaconda Prompt,输入以下命令创建一个新的conda环境(例如,取名为lgb):

      conda create -n lgb python=3.7

      其中,python=3.7表示创建Python 3.7的环境,可以根据需要选择其他版本。

    3. 激活lgb环境:

      conda activate lgb
    4. 安装LightGBM:

      conda install lightgbm

      或者

      pip install lightgbm

      安装完成后,可以使用以下命令验证LightGBM是否安装成功:

      python -c "import lightgbm; print(lightgbm.__version__)"

      如果输出了LightGBM的版本号,则说明安装成功。由于LightGBM是一个C++库,安装时还需要安装C++编译器和相关的开发工具。

    配置LightGBM的环境

    为了更好地使用LightGBM,需要配置相应的环境。主要包括以下几个方面:

    1. 数据格式:LightGBM支持多种数据格式,包括libsvm格式、CSV格式、numpy数组和Pandas DataFrame等。在使用LightGBM之前,需要确保数据格式正确,并根据具体情况选择合适的数据格式。
    2. 参数设置:LightGBM有多个参数可以进行调整,例如树的深度、学习率、叶子结点数目等。在使用LightGBM之前,需要了解这些参数的含义和作用,并根据具体情况进行调整。
    3. 并行加速:LightGBM支持多线程和分布式计算,可以大大加快模型的训练速度。在使用LightGBM之前,需要配置并行加速的相关参数,以充分利用计算资源。
    4. GPU加速:LightGBM还支持使用GPU进行加速,可以进一步提高模型的训练速度。在使用LightGBM之前,需要配置GPU的相关参数,并确保系统中已经安装了适当的GPU驱动程序和CUDA工具包。

    具体来说,可以按照以下步骤进行LightGBM环境的配置:

    1. 数据格式的配置:根据数据的格式选择不同的数据读取函数,例如:

      import pandas as pd
      import numpy as np
      import lightgbm as lgb
      # 读取CSV格式的数据
      data = pd.read_csv('data.csv')
      # 将numpy数组转换为Dataset格式
      X_train = np.random.rand(100, 10)
      y_train = np.random.rand(100)
      train_data = lgb.Dataset(X_train, label=y_train)
    2. 参数设置的配置:使用参数字典进行参数的配置,例如:

      params = {
      'boosting_type': 'gbdt',
      'objective': 'binary',
      'num_leaves': 31,
      'learning_rate': 0.05,
      'feature_fraction': 0.9
      }
    3. 并行加速的配置:使用参数控制并行加速的方式和线程数,例如:

      params = {
      'num_threads': 4,
      'device': 'cpu'
      }
    4. GPU加速的配置:在使用GPU进行加速时,需要安装相应的GPU驱动程序和CUDA工具包,然后在参数中指定使用GPU和相关的参数,例如:

      params = {
      'device': 'gpu',
      'gpu_platform_id': 0,
      'gpu_device_id': 0
      }

    配置完成后,就可以使用LightGBM进行模型训练和预测了。

    LightGBM的编译和安装

    LightGBM是一个开源的机器学习库,提供了高效的梯度提升决策树算法。在使用LightGBM之前,需要先将其编译并安装到系统中。下面介绍一下LightGBM的编译和安装过程。

    1. 下载LightGBM源码

    首先需要从LightGBM的GitHub仓库中下载源码。可以使用以下命令进行下载:

    bashCopy code
    git clone --recursive https://github.com/microsoft/LightGBM

    这里使用了--recursive选项,可以同时下载LightGBM的子模块。

    1. 安装依赖项

    LightGBM依赖于一些第三方库,需要先安装这些依赖项。具体依赖项的安装方法因操作系统而异,以下是一些常见操作系统的安装方法:

    • Ubuntu/Debian:

      sudo apt-get install cmake libboost-dev libboost-system-dev libboost-filesystem-dev
    • CentOS/Fedora:

      sudo yum install cmake boost-devel
    • macOS (使用Homebrew):

      brew install cmake boost
    1. 编译LightGBM

    进入LightGBM源码目录,使用以下命令进行编译:

    mkdir build
    cd build
    cmake ..
    make -j4

    这里使用了-j4选项,可以同时编译4个文件。编译完成后,可以在build目录下找到lightgbm可执行文件。

    1. 安装LightGBM

    可以使用以下命令将LightGBM安装到系统中:

    sudo make install

    这样,LightGBM就安装到了系统中。可以使用以下命令检查LightGBM是否安装成功:

    lightgbm --version

    如果输出了LightGBM的版本号,就说明安装成功了。

    需要注意的是,LightGBM还支持使用GPU进行加速,可以通过设置相关的编译选项启用GPU加速。具体方法可以参考LightGBM的官方文档。

    使用LightGBM进行建模

    数据准备和特征工程

    • 数据准备和特征工程是机器学习中至关重要的一步。LightGBM支持各种数据格式,包括LibSVM格式、CSV格式、numpy数组等。在数据准备阶段,需要将数据集划分为训练集、验证集和测试集,并进行数据清洗和预处理,包括处理缺失值、异常值、离群值、重复值等。在特征工程阶段,需要选择合适的特征并进行特征提取、特征选择和特征变换等操作,以提高模型的预测能力和泛化能力。

    构建LightGBM模型

    • 构建LightGBM模型需要确定模型的超参数和目标函数。在LightGBM中,可以通过调整超参数来控制模型的复杂度、速度和准确度等属性,包括学习率、树的数量、树的深度、叶子节点数等。目标函数是LightGBM优化的目标,可以选择分类任务中的交叉熵、回归任务中的平方误差、排序任务中的NDCG等。LightGBM还支持自定义目标函数。

    训练和调整LightGBM

    • 训练和调整LightGBM模型需要使用训练集和验证集进行模型训练和评估。在训练过程中,可以使用交叉验证等技术来防止过拟合。在调整模型超参数时,可以使用网格搜索、随机搜索、贝叶斯优化等方法来找到最优超参数。LightGBM还提供了一些内置的调参工具,包括GridSearchCV、RandomizedSearchCV等。

    应用LightGBM模型进行预测

    • 应用LightGBM模型进行预测需要使用测试集或新的数据集。在预测时,可以使用predict方法得到预测结果,或使用predict_proba方法得到预测概率。在分类任务中,可以使用predict_classes方法将预测概率转换为类别。在回归任务中,可以使用均方误差、均方根误差、平均绝对误差等指标评估模型的预测性能。

    代码

    A. 数据准备和特征工程

    import pandas as pd
    import numpy as np
    # 加载数据集
    data = pd.read_csv('data.csv')
    # 划分数据集为训练集、验证集和测试集
    train_data = data.loc[:8000, :]
    val_data = data.loc[8000:9000, :]
    test_data = data.loc[9000:, :]
    # 处理缺失值
    train_data.fillna(train_data.mean(), inplace=True)
    val_data.fillna(train_data.mean(), inplace=True)
    test_data.fillna(train_data.mean(), inplace=True)
    # 特征选择和变换
    features = ['age', 'sex', 'income']
    train_X = train_data[features]
    train_y = train_data['label']
    val_X = val_data[features]
    val_y = val_data['label']
    test_X = test_data[features]
    test_y = test_data['label']

    B. 构建LightGBM模型

    import lightgbm as lgb
    # 构建LightGBM模型
    params = {
    'objective': 'binary',
    'metric': 'binary_logloss',
    'num_leaves': 31,
    'learning_rate': 0.1
    }
    lgb_train = lgb.Dataset(train_X, train_y)
    lgb_val = lgb.Dataset(val_X, val_y, reference=lgb_train)
    model = lgb.train(params, lgb_train, valid_sets=lgb_val, num_boost_round=100)

    C. 训练和调整LightGBM模型

    # 使用交叉验证防止过拟合
    cv_results = lgb.cv(params, lgb_train, num_boost_round=100, nfold=5, stratified=False, shuffle=True)
    # 调整超参数
    from sklearn.model_selection import GridSearchCV
    param_grid = {
    'num_leaves': [31, 64, 128],
    'learning_rate': [0.1, 0.01, 0.001]
    }
    grid_search = GridSearchCV(model, param_grid=param_grid, cv=5)
    grid_search.fit(train_X, train_y)

    D. 应用LightGBM模型进行预测

    # 使用训练好的LightGBM模型进行预测
    y_pred = model.predict(test_X)
    # 对概率进行阈值处理,将大于0.5的预测为正类,小于等于0.5的预测为负类
    y_pred_binary = np.where(y_pred > 0.5, 1, 0)
    # 计算预测性能
    from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
    acc = accuracy_score(test_y, y_pred_binary)
    prec = precision_score(test_y, y_pred_binary)
    rec = recall_score(test_y, y_pred_binary)
    f1 = f1_score(test_y, y_pred_binary)
    auc = roc_auc_score(test_y, y_pred)
    print('Accuracy:', acc)
    print('Precision:', prec)
    print('Recall:', rec)
    print('F1 score:', f1)
    print('ROC AUC score:', auc)

    案例研究和应用实践

    A. 基于LightGBM的分类和回归模型

    • 二分类任务,乳腺癌数据集

    • import lightgbm as lgb
      from sklearn.datasets import load_breast_cancer
      from sklearn.model_selection import train_test_split
      from sklearn.metrics import accuracy_score
      # 加载数据
      data = load_breast_cancer()
      X, y = data.data, data.target
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
      # 构建LightGBM模型
      lgb_model = lgb.LGBMClassifier(
      num_leaves=31,
      learning_rate=0.05,
      n_estimators=20
      )
      # 训练LightGBM模型
      lgb_model.fit(X_train, y_train)
      # 在测试集上进行预测
      y_pred = lgb_model.predict(X_test)
      # 计算预测性能
      accuracy = accuracy_score(y_test, y_pred)
      print("Accuracy:", accuracy)

    B. 处理实际数据集的案例研究

    一个实际的案例研究是使用 LightGBM 对房价数据集进行建模和预测。该数据集包含房屋的各种特征,例如房屋的大小、位置、房间数量、卫生间数量等等,以及每个房屋的销售价格。

    在处理房价数据集时使用的 LightGBM 特定技术和方法:

    1. LightGBM 可以自动处理类别特征,无需进行独热编码或标签编码。
    2. LightGBM 可以自动处理缺失值,使用 NaN 或其他值来代替缺失值。
    3. LightGBM 可以自动处理离群值,无需额外的处理。
    4. LightGBM 可以使用随机森林、贝叶斯优化等技术来进行模型的调参。

    使用 LightGBM 对房价数据集进行建模和预测的示例代码:

    import pandas as pd
    import lightgbm as lgb
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error
    # 加载数据集
    data = pd.read_csv('house_prices.csv')
    # 划分数据集
    train_data, test_data, train_target, test_target = train_test_split(
    data.drop('SalePrice', axis=1), data['SalePrice'], test_size=0.2, random_state=42)
    # 定义 LightGBM 数据集
    train_dataset = lgb.Dataset(train_data, label=train_target)
    # 设置参数
    params = {
    'boosting_type': 'gbdt',
    'objective': 'regression',
    'metric': 'rmse',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9
    }
    # 训练模型
    num_round = 100
    bst = lgb.train(params, train_dataset, num_round)
    # 测试模型
    test_pred = bst.predict(test_data)
    test_rmse = mean_squared_error(test_target, test_pred) ** 0.5
    print('RMSE on test set: {:.2f}'.format(test_rmse))

    总结

    1. LightGBM 是一个高效,分布式,高性能的梯度提升框架,具有许多优点,如快速训练速度,高准确性和可扩展性等。
    2. LightGBM 的基本工作原理是通过将数据集分成许多小数据集,并使用特定的算法构建决策树来构建强大的预测模型。
    3. LightGBM 还具有许多高级特性和功能,如数据并行处理,直方图加速,类别特征处理,特征重要性分析和自定义损失函数等。
    4. 在使用 LightGBM 进行建模时,需要先准备和清洗数据,进行特征工程,然后构建 LightGBM 模型,进行训练和调整,最后使用模型进行预测。
    5. LightGBM 在许多应用场景中都有很好的表现,包括分类和回归模型,时间序列预测,推荐系统,图像识别等。
  • 相关阅读:
    如何快速重置模型原点
    SQL高级
    【linux命令讲解大全】112.Linux 系统管理工具:dpkg-statoverride 和 dstat 的使用介绍
    获取、设置注释的值
    DeepMind 的新强化学习系统是迈向通用 AI 的一步吗?
    Dijkstra算法
    VSCode中配置调试C/C++问题汇总---kalrry
    AI机器视觉多场景应用迸发检测活力,引领食品及包装行业新发展
    java毕业设计个人博客网站Mybatis+系统+数据库+调试部署
    SpringCloud:自定义skywalking链路追踪
  • 原文地址:https://www.cnblogs.com/alax-w/p/17139978.html