梯度提升决策树(GBDT,Gradient Boosting Decision Tree)

模型简介

梯度提升决策树(GBDT,Gradient Boosting Decision Tree) 是一种集成学习方法,它通过将多个弱学习器(通常是决策树)组合成一个强学习器来进行预测。GBDT 是梯度提升(Gradient Boosting)算法的一种实现,在许多机器学习任务中表现出色,尤其是在结构化数据(如表格数据)上的分类和回归任务中。

代码说明

这段代码通过构造一个随机生成的二分类数据集,展示了如何使用梯度提升决策树(GBDT)模型进行训练和评估。首先,生成了包含 10000 个样本和 10 个特征的标准正态分布数据,并随机生成了二分类标签。然后,通过 train_test_split 将数据划分为训练集和测试集,并使用 StandardScaler 对数据进行了标准化处理。接着,使用 GradientBoostingClassifier 创建了 GBDT 模型,设置了树的数量、学习率和最大深度,并用训练集进行模型训练。最后,使用测试集对模型进行预测,并通过准确率、分类报告和混淆矩阵评估模型的性能,输出了模型的评估结果。

代码

python 复制代码
# 导入必要的库
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
from sklearn.preprocessing import StandardScaler

# 临时构造一个数据集
np.random.seed(42)

# 假设有10000个样本,10个特征
n_samples = 10000
n_features = 10

# 构造随机数据
X = np.random.randn(n_samples, n_features)  # 生成标准正态分布的随机数据
y = np.random.choice([0, 1], size=n_samples)  # 随机生成二分类标签 0 或 1

# 将数据转化为 DataFrame 格式
X_df = pd.DataFrame(X, columns=[f"feature_{i+1}" for i in range(n_features)])
y_df = pd.Series(y, name="Class")

# 查看数据集的一部分
print(X_df.head())
print(y_df.head())

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_df, y_df, test_size=0.3, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 创建梯度提升决策树模型
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)

# 训练模型
gbdt.fit(X_train_scaled, y_train)

# 预测
y_pred = gbdt.predict(X_test_scaled)

# 输出模型评估结果
print(f"准确率: {accuracy_score(y_test, y_pred):.4f}")
print("分类报告:")
print(classification_report(y_test, y_pred))

# 输出混淆矩阵
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred))
相关推荐
地平线开发者6 分钟前
征程 6 | 工具链 QAT ObserverBase 源码解析
算法
地平线开发者28 分钟前
【地平线 征程 6 工具链进阶教程】QAT 训练常见问题和排查
算法
地平线开发者30 分钟前
征程 6 | 直方图量化配置与校准实例
算法
地平线开发者1 小时前
征程 6E/M Matrix 开发评板使用系列(一):开箱与点亮
算法·自动驾驶
Jerry1 小时前
LeetCode 59. 螺旋矩阵 II
算法
可编程芯片开发2 小时前
基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真
算法
aaaameliaaa2 小时前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法
QiLinkOS4 小时前
第三视觉理解徐玉生与他的商业活动(28)
大数据·c++·人工智能·算法·开源协议
wabs6664 小时前
关于动态规划【力扣1143.最长公共子序列的思考】
算法·leetcode·动态规划