当前位置:   article > 正文

【机器学习】必会算法之:梯度提升机(GBM)

梯度提升机

1、引言

小屌丝:鱼哥, 你能不能在详细的拓展一下 GBM
小鱼:我在《【机器学习】一文掌握机器学习十大分类算法(下)。》已经讲过了
小屌丝:意犹未尽。
小鱼:…
小屌丝:你在详细的讲一讲呗。
小鱼:那得一会了呢
小屌丝:这会不是不忙着,干啥还等一会呢?
小鱼:我在看我的车内摄像头的数据存储啊
小屌丝:啊~ 这…
小鱼:你不去看看你的车内摄像存储?
小屌丝: 我就不用了吧, 反正我的车也不是 "某合"的。
小鱼:这…
在这里插入图片描述

2、梯度提升机

2.1 定义

梯度提升机(GBM)是一种基于Boosting思想的集成学习算法。

它通过构建多个弱学习器(通常是决策树),然后将这些弱学习器组合成一个强学习器来提高预测性能。

GBM通过不断减少模型在训练数据上的残差(预测值与实际值之差)来优化模型。

2.2 原理

GBM的核心原理是利用梯度下降算法优化损失函数。

在每一轮迭代中,GBM会添加一个新的弱预测模型来尽量纠正前一个模型的残差(即真实值与预测值之间的差异)。

通过这种方式,模型逐渐接近目标函数。

2.3 实现方式

GBM的实现通常涉及以下几个步骤:

  • 初始化一个基本模型,通常是一个简单的预测(如数据的平均值)。
  • 计算残差,即当前模型预测值与实际值之间的差异。
  • 使用残差作为目标值训练一个新的弱模型。
  • 将新模型加入到现有模型集合中。
  • 重复步骤2-4,直到达到预定的迭代次数或模型性能不再提升。

2.4 算法公式

GBM的算法公式较为复杂,主要涉及损失函数、梯度计算、弱学习器构建和模型更新等步骤。

以下是一个简化的梯度提升回归树的公式示例:

  • 初始化模型 ( F 0 ( x ) = arg ⁡ min ⁡ γ ∑ i = 1 N L ( y i , γ ) ) (F_0(x) = \arg\min_{\gamma}\sum_{i=1}^{N}L(y_i, \gamma)) (F0(x)=argminγi=1NL(yi,γ))
  • 对于 ( m = 1 ) (m=1) (m=1) ( M ) (M) (M)
    • a. 计算负梯度: ( y ~ i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) ) (\tilde{y}i = -\left[\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}\right]{F(x)=F_{m-1}(x)}) (y~i=[F(xi)L(yi,F(xi))]F(x)=Fm1(x))
    • b. 使用 ( ( y ~ i , x i ) i = 1 N ) ({(\tilde{y}i, x_i)}{i=1}^{N}) ((y~i,xi)i=1N) 拟合一个基学习器 ( h m ( x ) ) (h_m(x)) (hm(x))
    • c. 计算学习率 ( ρ m ) (\rho_m) (ρm)(通常通过线搜索确定)
    • d. 更新模型: ( F m ( x ) = F m − 1 ( x ) + ρ m h m ( x ) ) (F_m(x) = F_{m-1}(x) + \rho_m h_m(x)) (Fm(x)=Fm1(x)+ρmhm(x))
  • 输出最终模型 ( F M ( x ) ) (F_M(x)) (FM(x))

其中,

  • ( L ( y , F ( x ) ) ) (L(y, F(x))) (L(y,F(x))) 是损失函数,
  • ( F m ( x ) ) (F_m(x)) (Fm(x)) 是第 ( m ) (m) (m) 轮迭代后的模型,
  • ( h m ( x ) ) (h_m(x)) (hm(x)) 是第 ( m ) (m) (m) 轮迭代中拟合的基学习器(通常是决策树),
  • ( ρ m ) (\rho_m) (ρm) 是学习率,用于控制每次迭代的步长。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-04-05
# @Author : Carl_DJ

'''
实现功能:
	实现了一个GBM回归模型的训练过程
'''
import numpy as np  
from sklearn.datasets import make_regression  
from sklearn.model_selection import train_test_split  
from sklearn.ensemble import GradientBoostingRegressor  
from sklearn.metrics import mean_squared_error  
  
# 生成模拟的回归数据集  
# n_samples: 样本数量  
# n_features: 特征数量  
# noise: 噪声比例  
X, y = make_regression(n_samples=1000, n_features=4, noise=0.1, random_state=42)  
  
# 划分训练集和测试集  
# test_size: 测试集占总数据的比例  
# random_state: 随机种子,确保结果可复现  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 初始化梯度提升回归器  
# n_estimators: 弱学习器(树)的数量  
# learning_rate: 学习率,控制每次迭代的步长  
# max_depth: 决策树的最大深度  
# random_state: 随机种子  
gbm = GradientBoostingRegressor(n_estimators=200, learning_rate=0.1, max_depth=3, random_state=42)  
  
# 训练模型  
# 使用训练数据拟合模型  
gbm.fit(X_train, y_train)  
  
# 预测测试集  
# 使用训练好的模型对测试集进行预测  
y_pred = gbm.predict(X_test)  
  
# 计算均方误差  
# 评估模型在测试集上的性能  
mse = mean_squared_error(y_test, y_pred)  
print(f"Mean Squared Error: {mse}")  
  
# 特征重要性  
# 获取每个特征对模型预测的贡献程度  
feature_importances = gbm.feature_importances_  
print(f"Feature Importances: {feature_importances}")  
  
# 绘制特征重要性图(可选)  
# 需要导入matplotlib和seaborn库  
import matplotlib.pyplot as plt  
import seaborn as sns  
  
# 创建一个特征重要性DataFrame  
feature_importance_df = pd.DataFrame(list(zip(X.columns, feature_importances)),  
                                      columns=['Feature', 'Importance'])  
  
# 根据特征重要性降序排序  
feature_importance_df = feature_importance_df.sort_values(by='Importance', ascending=False)  
  
# 绘制条形图  
plt.figure(figsize=(10, 6))  
sns.barplot(x='Importance', y='Feature', data=feature_importance_df)  
plt.title('Feature Importances')  
plt.xlabel('Importance')  
plt.ylabel('Feature')  
plt.show()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

代码解析
实现了GBM回归模型的训练过程,并包含了以下步骤:

  • 数据生成与划分:使用make_regression函数生成模拟的回归数据集,并通过train_test_split函数将其划分为训练集和测试集。
  • 模型初始化:使用GradientBoostingRegressor类初始化GBM模型,并设置一些关键参数,如弱学习器的数量 ( n e s t i m a t o r s ) (n_estimators) nestimators、学习率 ( l e a r n i n g r a t e ) (learning_rate) learningrate和决策树的最大深度 ( m a x d e p t h ) (max_depth) maxdepth
  • 模型训练:调用fit方法,使用训练数据对GBM模型进行训练。
  • 预测与评估:使用训练好的模型对测试集进行预测,并通过计算均方误差 ( M S E ) (MSE) MSE来评估模型的性能。
  • 特征重要性:获取每个特征对模型预测的贡献程度,并打印出来。
  • 特征重要性可视化:使用matplotlib和seaborn库绘制特征重要性的条形图,以便更直观地了解哪些特征对模型预测更为重要。
    在这里插入图片描述

3、总结

梯度提升机(GBM)是一种强大的集成学习算法,它通过迭代地拟合损失函数的负梯度来优化模型。

GBM具有出色的预测性能和鲁棒性,在各种机器学习任务中都有广泛的应用。

其核心原理在于利用损失函数的负梯度作为残差来构建新的弱学习器,并通过组合多个弱学习器来形成一个强学习器。

在实际应用中,我们可以通过调整GBM的参数,如学习率、迭代次数、基学习器的类型等,来优化模型的性能。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习【机器学习】&【深度学习】领域的知识。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/766495
推荐阅读
相关标签
  

闽ICP备14008679号