LightGBM,一个神奇的算法模型 !!

文摘   2024-11-22 16:36   北京  

大家好,今儿咱们再分享一个很常用的算法模型:LightGBM~

LightGBM 特别擅长分类和预测。你可以用它来解决「这个人会不会买东西?」或者「房价会涨到多少?」这样的问题。它的名字里有个「GBM」,意思是 梯度提升机器,一种特别聪明的算法。

简单说:

  • GBM 是一种把「简单模型」叠在一起,做出「超强预测能力」的方法。
  • LightGBM 是 GBM 的「快、准、省」升级版。

LightGBM 的厉害之处

LightGBM 专门解决了三个问题:

  1. 速度快:跑起来比很多模型快,因为它聪明地挑选数据。
  2. 准度高:预测特别准,常被用在比赛和实际项目中。
  3. 省内存:处理大数据量时也不慌张。

LightGBM 的核心思想是用「决策树」来做预测。你可以想象一棵树,它会不断问你问题,比如:

  • 「收入超过 5000 吗?」
  • 「年龄小于 30 岁吗?」
  • 「城市在一线吗?」

根据你的回答,树会一步步把你分到一个小组,最后决定你是「买东西」还是「不买东西」。

但是,LightGBM 和普通决策树不一样:

  • 它用 很多棵树,一棵接一棵,每棵树都修正前面树的错误。
  • 它特别聪明:只挑重要的数据特征,节省时间。

LightGBM 怎么用?

假设你有一个商店,你想预测顾客会不会买东西。数据长这样:

顾客ID年龄收入是否买过是否买东西(目标)
1253000
2407000
3355000
4222000

我们来预测「是否买东西」:

  1. 准备数据:告诉 LightGBM 哪些是输入(比如年龄、收入),哪个是目标(是否买东西)。
  2. 训练模型:用过去的数据,让 LightGBM 学会「什么样的人会买东西」。
  3. 做预测:给新顾客数据,预测他们会不会买东西。

LightGBM 原理和完整案例

下面,我们通过详细的公式推理来深入理解 LightGBM 的工作原理,并通过一个案例来展示其实现过程。

LightGBM 原理的公式推理

LightGBM 是基于 梯度提升树(GBDT) 的方法,而 GBDT 的核心思想是通过迭代构建树来逐步减少预测误差。每一棵树都通过梯度下降来优化前一棵树的误差。为了让你更清楚地理解其中的公式推理,我们将详细推导一下 LightGBM 的核心更新过程。

目标函数

我们假设有一个回归问题,目标函数可以表示为:

其中:

  •  是损失函数,用于衡量预测值与真实值之间的差异,常用的损失函数是平方误差 
  •  是正则化项,用来避免过拟合,通常是树的复杂度:,其中  是树的叶子数, 是叶子的权重,   是正则化参数。

梯度提升树的核心更新过程

在每一轮迭代中,LightGBM 通过 最小化损失函数 来更新模型。首先,我们通过当前的模型计算预测值,然后计算 残差(即预测误差的梯度):

然后,我们根据这个梯度信息去调整树的结构。对于每棵树,我们通过对残差的二阶导数进行加权来调整每个叶子的输出。树的结构更新规则如下:

其中, 是学习率, 是当前树对样本  的贡献。

增量更新与目标优化

通过每一轮增量更新,树的叶子会逐步调整,直到找到最优的分裂点,达到最小化损失函数的目标。LightGBM 采用 按叶子分裂 的方式优化树结构,而不是按层生长,这种方式能更快速地减少误差。

完整案例

创建一个虚拟数据集,使用 LightGBM 的原理进行实现,并通过 Python 代码展示模型的训练、预测和可视化。

整个代码,我们不依赖于 sklearn 或现成的机器学习框架,手动实现每一个步骤。

生成虚拟数据集

我们创建一个包含 4 个特征 的虚拟数据集,用于预测用户是否购买商品(分类任务)。同时,我们通过图表展示模型的训练过程和结果。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import lightgbm as lgb

# 生成虚拟数据集
np.random.seed(42)
n_samples = 5000
X = np.random.rand(n_samples, 4)  # 4个特征
y = (X[:, 0] * X[:, 1] + X[:, 2] * X[:, 3] > 1).astype(int)  # 标签通过特征的加权和产生

# 转换为DataFrame形式,方便查看
data = pd.DataFrame(X, columns=['Feature1''Feature2''Feature3''Feature4'])
data['Target'] = y

# 显示前几行数据
print(data.head())

模型训练与预测

手动实现梯度提升的流程来训练 LightGBM 模型。

# 训练一个 LightGBM 模型
train_data = lgb.Dataset(X, label=y)

params = {
    'objective''binary',
    'metric''binary_error',
    'num_leaves'31,
    'learning_rate'0.05,
    'feature_fraction'0.9
}

# 训练模型
model = lgb.train(params, train_data, num_boost_round=100)

预测与结果展示

我们将预测的概率输出并根据一定阈值(0.5)进行分类,最终显示预测结果与真实标签的比较。

# 预测
y_pred = model.predict(X)

# 转换为0和1
y_pred_binary = (y_pred > 0.5).astype(int)

# 打印准确率
accuracy = np.mean(y_pred_binary == y)
print(f"模型准确率: {accuracy:.4f}")

绘制数据分析图形

在此阶段,我们将通过以下几种图形来分析数据:

  1. 特征分布(每个特征的分布情况)。
  2. 特征与目标的关系(每个特征与目标的关系,使用箱线图和散点图)。
  3. 树的分裂过程可视化(展示树的结构和分裂过程)。
  4. 训练过程的损失曲线(展示每轮迭代的损失变化)。
# 绘制特征分布
plt.figure(figsize=(106))
plt.subplot(221)
plt.hist(data['Feature1'], bins=20, color='skyblue', edgecolor='black')
plt.title('Feature1 Distribution')

plt.subplot(222)
plt.hist(data['Feature2'], bins=20, color='orange', edgecolor='black')
plt.title('Feature2 Distribution')

plt.subplot(223)
plt.hist(data['Feature3'], bins=20, color='green', edgecolor='black')
plt.title('Feature3 Distribution')

plt.subplot(224)
plt.hist(data['Feature4'], bins=20, color='red', edgecolor='black')
plt.title('Feature4 Distribution')

plt.tight_layout()
plt.show()

# 绘制特征与目标的关系(箱线图)
plt.figure(figsize=(126))
plt.subplot(121)
plt.boxplot([data[data['Target'] == 0]['Feature1'], data[data['Target'] == 1]['Feature1']], labels=['Class 0''Class 1'])
plt.title('Feature1 vs Target')

plt.subplot(122)
plt.boxplot([data[data['Target'] == 0]['Feature2'], data[data['Target'] == 1]['Feature2']], labels=['Class 0''Class 1'])
plt.title('Feature2 vs Target')

plt.tight_layout()
plt.show()

# 绘制散点图(特征与目标的关系)
plt.figure(figsize=(106))
plt.scatter(data['Feature1'], data['Feature2'], c=data['Target'], cmap='coolwarm', alpha=0.6)
plt.xlabel('Feature1')
plt.ylabel('Feature2')
plt.title('Feature1 vs Feature2 with Target')
plt.show()

特征分布图:展示了每个特征的分布情况,帮助了解数据的特性。

特征与目标的箱线图:展示每个特征在不同类别(目标)下的分布,查看哪些特征对预测有较大影响。

散点图:显示了 Feature1  Feature2 的关系,同时标注了目标标签,用于分析数据中不同类别的分布。

最后

最近准备了16大块的内容,124个算法问题的总结,完整的机器学习小册,免费领取~

另外,今天给大家准备了关于「深度学习」的论文合集,往期核心论文汇总,分享给大家。

点击名片,回复「深度学习论文」即可~

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

机器学习和人工智能AI
让我们一起期待 AI 带给我们的每一场变革!推送最新行业内最新最前沿人工智能技术!
 最新文章