乐趣区

关于机器学习:机器学习集成学习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 特定技术和办法:

  • LightGBM 能够主动解决类别特色,无需进行独热编码或标签编码。
  • LightGBM 能够主动解决缺失值,应用 NaN 或其余值来代替缺失值。
  • LightGBM 能够主动解决离群值,无需额定的解决。
  • 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 模型,进行训练和调整,最初应用模型进行预测。
退出移动版