前言

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 在许多应用场景中都有很好的表现,包括分类和回归模型,时间序列预测,推荐系统,图像识别等。

机器学习-集成学习LightGBM的更多相关文章

  1. [机器学习]集成学习--bagging、boosting、stacking

    集成学习简介 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务. 如何产生"好而不同"的个体学习器,是集成学习研究的核心. 集成学习的思路是通过 ...

  2. 机器学习--集成学习(Ensemble Learning)

    一.集成学习法 在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好) ...

  3. 机器学习:集成学习:随机森林.GBDT

    集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...

  4. 机器学习——集成学习(Bagging、Boosting、Stacking)

    1 前言 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < ...

  5. python大战机器学习——集成学习

    集成学习是通过构建并结合多个学习器来完成学习任务.其工作流程为: 1)先产生一组“个体学习器”.在分类问题中,个体学习器也称为基类分类器 2)再使用某种策略将它们结合起来. 通常使用一种或者多种已有的 ...

  6. 吴裕雄 python 机器学习——集成学习随机森林RandomForestRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  7. 吴裕雄 python 机器学习——集成学习随机森林RandomForestClassifier分类模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  8. 吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  9. 吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  10. 吴裕雄 python 机器学习——集成学习AdaBoost算法分类模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

随机推荐

  1. Django基础笔记10(前端展示)

    Ajax使用 $.ajax({ url:xxx, type:xxx, dadaType:xxx, data:{...} }) $.post(url,data,callbackFunction,data ...

  2. JavaEE Day14 Servlet&HTTP&Request

    今日内容 1.Servlet 2.HTTP协议 3.Request 一.Servlet 1.概念 2.步骤 3.执行原理 4.生命周期 5.Servlet 3.0注解配置 6.Servlet体系结构 ...

  3. 网络基础与osi七层与TCP/IP协议

     一 什么是网络 网络:计算机网络是一组计算机或网络设备通过有形 的线缆或无形的媒介如无线,连接起来,按照一定的 规则,进行通信的集合. 通信,是指人与人.人与物.物与物之间通过某种媒 介和行为进行的 ...

  4. Elasticsearch提示low disk watermark [85%] exceeded on [UTyrLH40Q9uIzHzX-yMFXg][Sonofelice][/Users/baid...

    mac本地启动es之后发现运行一段时间一分钟就能打印好几条info日志: [2018-03-13T10:15:42,497][INFO ][o.e.c.r.a.DiskThresholdMonitor ...

  5. 开发一个MyBatis通用Mapper的轮子

    一.前言 程序猿为什么如此执着于造轮子?MyBatis-Plus如此强大的工具流行这么多年了,我为啥还在重复造这样的轮子? 1.公司的技术规范不允许使用MyBatis-Plus,咱也不知道什么原因: ...

  6. React报错之React.Children.only expected to receive single React element child

    总览 当我们把多个子元素传递给一个只期望有一个React子元素的组件时,会产生"React.Children.only expected to receive single React el ...

  7. python与数值计算环境安装

    数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linu ...

  8. Vue前后端分离实现登录的一个简单demo

    1.建立一个Maven项目,并添加Spring相关依赖 2.编写Controller类相应的接口和配置类 LoginController类,编写接口的业务逻辑 package com.springbo ...

  9. [机器学习] 特征选择笔记4-使用SelectFromModel特征选择

    特征选择 代码下载 本文主要介绍sklearn中进行特征选择的方法. sklearn.feature_selection模块中的类可用于样本集的特征选择/降维,以提高估计量的准确性得分或提高其在超高维 ...

  10. Rust-01 启航

    安装 所谓工欲善其事必先利其器,我们学习Rust当然需要安装Rust.我们可以从Rust官网下载rustup工具进行rust的安装.安装完成后,我们在命令行中输入rustc --version便可以查 ...