GBDT模型及案例(Python)

目录

1 GBDT算法核心思想

2 GBDT算法的数学原理

3 GBDT算法数学原理举例

补充知识点:梯度提升树中梯度的理解

4 使用sklearn实现GBDT算法

5 案例:产品定价模型

5.1 模型搭建

5.1.1 读取数据

5.1.2 分类型文本变量的处理

5.1.3 提取特征变量和目标变量

5.1.4 划分训练集的测试集

5.1.5 模型训练及搭建

5.2 模型预测及评估

6 模型参数介绍

参考书籍


1 GBDT算法核心思想

GBDT是Gradient Boosting Decision Tree(梯度提升树)的缩写。

GBDT算法也是一种非常实用的Boosting算法,它与AdaBoost算法的区别在于:AdaBoost算法根据分类效果调整权重并不断迭代,最终生成强学习器;GBDT算法则将损失函数的负梯度作为残差的近似值,不断使用残差迭代和拟合回归树,最终生成强学习器。

简单来说,AdaBoost算法是调整权重,而GBDT算法则是拟合残差。

通过一个简单案例理解GBDT算法的核心思想。

下表中有4个样本客户的数据,特征变量X1为年龄,X2为月收入(元),目标变量y是实际信用卡额度(元)。现在要利用GBDT算法根据样本数据构造模型,用于预测信用卡额度。

假设建立的第1棵决策树如下图所示。

A、C被划分到左节点,A的实际信用卡额度为8000,而预测值为10000,因此,A的残差为8000-10000=-2000,同理,C的残差为25000-20000=5000。B、D被划分到右节点,B的残差为30000-35000=-5000,D的残差为40000-35000=5000。

接下来就是GBDT算法的核心思想:构造第2棵决策树来拟合第1棵树产生的残差,注意这里拟合的是残差,构造的拟合残差的决策树如下图所示。

在这棵树中,A、B被划分到左节点,A的实际残差为-2000,而预测的残差为-3000,那么此时A的新残差,即残差的残差为-2000-(-3000)=1000,同理,B的新残差为-5000-(-5000)=0。C、D被划分到右节点,C的新残差为5000-5000=0,D的新残差为5000-5000=0。继续用第2棵树产生的新残差去拟合第3棵树,并不断重复此步骤,使残差变小。

因此,最终的模型就是如下图所示的集成在一起的多个模型,这也充分体现了集成算法的集成思想。

2 GBDT算法的数学原理

简单介绍GBDT算法的数学原理。

迭代模型为:

fm-1(x)是第m-1次迭代模型,即上一次的迭代模型;

Tm(x)是本次待搭建的决策树,其实也是拟合上一个模型残差值的决策树;

fm(x)是本次迭代后产生的新模型。

对GBDT算法来说,只需要简单地拟合当前模型的残差,算法步骤如下。

步骤1:初始化f0(x)=0

步骤2:当m=1,2,…,M,计算残差rmi=yi-fm-1(x);拟合残差,得到决策树Tm(x);更新fm(x)=fm-1(x)+Tm(x)。

步骤3:当误差或迭代次数达到指定要求时,得到回归问题提升树,如下所示。

3 GBDT算法数学原理举例

结合具体的回归问题,详细讲解GBDT算法的数学计算步骤。

给定的训练数据见下表,其中x为特征变量,y为目标变量,因为y为连续值,所以这是一个回归预测问题。

1.构造第一个模型

首先初始化f0(x)=0,然后构造第1个回归决策树模型f1(x),其实也就是T1(x)。

回归决策树模型的划分标准。回归决策树模型与分类决策树模型最大的不同就

  • 22
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
以下是一个GBDT的优化调参案例,使用Python实现: 1. 导入必要的库和数据集 ```python import numpy as np import pandas as pd from sklearn.ensemble import GradientBoostingRegressor from sklearn.metrics import mean_squared_error from sklearn.model_selection import GridSearchCV, train_test_split # 导入数据集 data = pd.read_csv('data.csv') X = data.iloc[:, :-1] y = data.iloc[:, -1] ``` 2. 划分数据集为训练集和测试集 ```python # 划分数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` 3. 定义GBDT模型 ```python # 定义GBDT模型 gbdt = GradientBoostingRegressor() ``` 4. 设置参数范围 ```python # 设置参数范围 param_grid = {'n_estimators': [50, 100, 150], 'max_depth': [3, 6, 9], 'learning_rate': [0.1, 0.05, 0.01]} ``` 5. 使用GridSearchCV进行交叉验证和网格搜索 ```python # 使用GridSearchCV进行交叉验证和网格搜索 gbdt_grid = GridSearchCV(estimator=gbdt, param_grid=param_grid, cv=5) gbdt_grid.fit(X_train, y_train) ``` 6. 输出最优参数和最优模型 ```python # 输出最优参数和最优模型 print("Best parameters found: ", gbdt_grid.best_params_) print("Best RMSE found: ", np.sqrt(np.abs(gbdt_grid.best_score_))) gbdt_best = gbdt_grid.best_estimator_ ``` 7. 在测试集上评估模型性能 ```python # 在测试集上评估模型性能 y_pred = gbdt_best.predict(X_test) rmse = np.sqrt(mean_squared_error(y_test, y_pred)) print("RMSE on test set: ", rmse) ``` 完整代码如下: ```python import numpy as np import pandas as pd from sklearn.ensemble import GradientBoostingRegressor from sklearn.metrics import mean_squared_error from sklearn.model_selection import GridSearchCV, train_test_split # 导入数据集 data = pd.read_csv('data.csv') X = data.iloc[:, :-1] y = data.iloc[:, -1] # 划分数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 定义GBDT模型 gbdt = GradientBoostingRegressor() # 设置参数范围 param_grid = {'n_estimators': [50, 100, 150], 'max_depth': [3, 6, 9], 'learning_rate': [0.1, 0.05, 0.01]} # 使用GridSearchCV进行交叉验证和网格搜索 gbdt_grid = GridSearchCV(estimator=gbdt, param_grid=param_grid, cv=5) gbdt_grid.fit(X_train, y_train) # 输出最优参数和最优模型 print("Best parameters found: ", gbdt_grid.best_params_) print("Best RMSE found: ", np.sqrt(np.abs(gbdt_grid.best_score_))) gbdt_best = gbdt_grid.best_estimator_ # 在测试集上评估模型性能 y_pred = gbdt_best.predict(X_test) rmse = np.sqrt(mean_squared_error(y_test, y_pred)) print("RMSE on test set: ", rmse) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值