赞
踩
GBDT 即 Gradient Boosting Decision Tree 梯度提升树, 是一种迭代的决策树算法,又叫 MART(Multiple Additive Regression Tree),
它通过构造一组弱的学习器(树),然后把多棵决策树的结果累加起来作为最终的预测输出。该算法将决策树与集成思想进行了有效的结合。具体实现步骤如下:
下面是一个简单的示例,使用梯度提升算法和决策树分类器对手写数字数据进行对比分析:
# 导入sklearn内置数据集 import matplotlib.pyplot as plt from sklearn.datasets import load_digits # 导入手写数字数据 digits = load_digits() plt.figure(1, figsize=(3.5, 3.5), facecolor='white') for i in range(10): for j in range(10): ax = plt.subplot(10, 10, 10 * i + j + 1) # 设置子图的位置 ax.set_xticks([]) # 隐藏横坐标 # 隐藏纵坐标 ax.set_yticks([]) plt.imshow(digits.images[9 * i + j], cmap=plt.cm.gray_r, interpolation="nearest") plt.show() # 导入sklearn中的模型验证类 from sklearn.model_selection import train_test_split # 使用train test_split函数自动分割训练数据集和测试数据集 x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3) # 导入sklearn模块中的决策树分类器类 from sklearn.tree import DecisionTreeClassifier # 定义一个决策树分类器对象 dtc = DecisionTreeClassifier() dtc.fit(x_train, y_train) # 导入sklearn模块中的梯度提升分类器类 from sklearn.ensemble import GradientBoostingClassifier # 定义一个梯度提升决策树分类器对象 gbc = GradientBoostingClassifier(n_estimators=30, learning_rate=0.8) gbc.fit(x_train, y_train) print("单棵决策树在训练集上的性能:%.3f" % dtc.score(x_train, y_train)) print("单棵决策树在测试集上的性能:%.3f" % dtc.score(x_test, y_test)) print("GBDT(T-30)在训练集上的性能:%.3f" % gbc.score(x_train, y_train)) print("GBDT(T-30)在测试集上的性能:%.3f" % gbc.score(x_test, y_test)) # 观察弱分类器数量对分类准确度的影响 # 弱分类器的最大值 T_max = 39 gbc_train_scores = [] gbc_test_scores = [] for i in range(1, T_max + 1): gbc = GradientBoostingClassifier(n_estimators=i, learning_rate=0.1) gbc.fit(x_train, y_train) gbc_train_scores.append(gbc.score(x_train, y_train)) gbc_test_scores.append(gbc.score(x_test, y_test)) # 绘制测试结果 import matplotlib.pyplot as plt # 解决图形中的中文显示乱码 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.matplotlib.rcParams['axes.unicode_minus'] = False plt.figure() # 解决图形中的坐标轴负号显示问题 plt.plot(range(1, T_max + 1), gbc_train_scores, color='r', label='训练集') plt.plot(range(1, T_max + 1), gbc_test_scores, color='g', label='测试集') plt.title("基学习器数量对GBDT性能的影响") plt.xlabel("基分类器数量") plt.ylabel("准确率") plt.xlim(1, T_max) plt.legend() plt.show()
上面的代码演示了基学习器的数量对 GBDT 性能的影响。主要步骤如下:
你可以根据实际需要对代码中的数据进行调整以适应不同的测试需要。
你可以根据实际需要对代码中的数据进行调整以适应不同的测试需要。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。