Python语言实现梯度提升树 (Gradient Boosting Machines, GBM)算法

 梯度提升树(Gradient Boosting Machines, GBM)是一种集成学习方法,通过迭代地训练决策树,并让每棵新的树拟合前一棵树的残差,从而逐步提高模型的准确率。下面是一个简单的Python实现GBM的例子:

实现思路:

  1. 使用决策树作为弱学习器。
  2. 每次训练新树时,使用当前模型的预测残差作为新树的目标。
  3. 将每棵树的预测结果加到最终的预测上,并通过学习率调节每棵树的贡献。

实现步骤:

  • 首先导入必要的库。
  • 实现GBM的主体逻辑,包括计算损失、拟合残差等。
  • 使用均方误差作为损失函数。

Python代码实现:

import numpy as np
from sklearn.tree import DecisionTreeRegressor

class GradientBoostingRegressor:
    def __init__(self, n_estimators=100, learning_rate=0.1, max_depth=3):
        self.n_estimators = n_estimators          # 弱学习器的数量
        self.learning_rate = learning_rate        # 学习率
        self.max_depth = max_depth                # 决策树的最大深度
        self.trees = []                           # 用于存储每棵决策树
    
    def fit(self, X, y):
        # 初始化模型为常量值,通常使用均值
        self.initial_pred = np.mean(y)
        residuals = y - self.initial_pred  # 初始残差

        # 逐步训练每一棵决策树
        for i in range(self.n_estimators):
            tree = DecisionTreeRegressor(max_depth=self.max_depth)
            tree.fit(X, residuals)  # 拟合残差
            self.trees.append(tree)

            # 更新残差
            residuals -= self.learning_rate * tree.predict(X)
    
    def predict(self, X):
        # 初始预测为常量值
        pred = np.full(X.shape[0], self.initial_pred)
        
        # 累加每棵树的预测值
        for tree in self.trees:
            pred += self.learning_rate * tree.predict(X)
        
        return pred

# 生成模拟数据
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练GBM模型
gbm = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3)
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}')

代码解释:

  1. GradientBoostingRegressor类中,fit函数用于训练GBM模型,逐步拟合残差。
  2. predict函数用于根据训练好的模型进行预测。
  3. 在训练过程中,每棵新树都拟合当前残差,学习率(learning_rate)控制每棵树对整体模型的贡献。
  4. 最后,我们使用模拟数据进行模型训练和评估,使用均方误差(MSE)来衡量模型的效果。

运行结果:

该代码将输出模型在测试集上的均方误差,表示模型的预测性能。

可扩展性:

  • 可以根据需要扩展为支持分类问题。
  • 可以引入更多高级功能,例如提前停止、最小样本分裂等。

​编辑

 梯度提升树(Gradient Boosting Machines, GBM)是一种集成学习方法,通过迭代地训练决策树,并让每棵新的树拟合前一棵树的残差,从而逐步提高模型的准确率。下面是一个简单的Python实现GBM的例子:

实现思路:

  1. 使用决策树作为弱学习器。
  2. 每次训练新树时,使用当前模型的预测残差作为新树的目标。
  3. 将每棵树的预测结果加到最终的预测上,并通过学习率调节每棵树的贡献。

实现步骤:

  • 首先导入必要的库。
  • 实现GBM的主体逻辑,包括计算损失、拟合残差等。
  • 使用均方误差作为损失函数。

Python代码实现:

import numpy as np
from sklearn.tree import DecisionTreeRegressor

class GradientBoostingRegressor:
    def __init__(self, n_estimators=100, learning_rate=0.1, max_depth=3):
        self.n_estimators = n_estimators          # 弱学习器的数量
        self.learning_rate = learning_rate        # 学习率
        self.max_depth = max_depth                # 决策树的最大深度
        self.trees = []                           # 用于存储每棵决策树
    
    def fit(self, X, y):
        # 初始化模型为常量值,通常使用均值
        self.initial_pred = np.mean(y)
        residuals = y - self.initial_pred  # 初始残差

        # 逐步训练每一棵决策树
        for i in range(self.n_estimators):
            tree = DecisionTreeRegressor(max_depth=self.max_depth)
            tree.fit(X, residuals)  # 拟合残差
            self.trees.append(tree)

            # 更新残差
            residuals -= self.learning_rate * tree.predict(X)
    
    def predict(self, X):
        # 初始预测为常量值
        pred = np.full(X.shape[0], self.initial_pred)
        
        # 累加每棵树的预测值
        for tree in self.trees:
            pred += self.learning_rate * tree.predict(X)
        
        return pred

# 生成模拟数据
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练GBM模型
gbm = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3)
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}')

代码解释:

  1. GradientBoostingRegressor类中,fit函数用于训练GBM模型,逐步拟合残差。
  2. predict函数用于根据训练好的模型进行预测。
  3. 在训练过程中,每棵新树都拟合当前残差,学习率(learning_rate)控制每棵树对整体模型的贡献。
  4. 最后,我们使用模拟数据进行模型训练和评估,使用均方误差(MSE)来衡量模型的效果。

运行结果:

该代码将输出模型在测试集上的均方误差,表示模型的预测性能。

可扩展性:

  • 可以根据需要扩展为支持分类问题。
  • 可以引入更多高级功能,例如提前停止、最小样本分裂等。

​编辑

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在