python train test split_使用python+sklearn实现多分类AdaBoosted决策树

本示例实现借鉴了Zhu et al [1]论文中的图1,并显示了如何用增强(boosting)来改善多分类问题的预测准确性。用于分类的数据集是通过采用10维标准正态分布并由嵌套的同心10维球体分隔的三个类来构造的,因此每个类中的样本数量大致相等(x²分布的分位数(quantiles))。 比较了SAMME和SAMME.R [1]算法的性能。SAMME.R使用概率估计来更新加性模型(additive model),而SAMME仅使用分类。如示例所示,SAMME.R算法通常比SAMME算法收敛更快,从而通过更少的增强(boosting)迭代次数实现了较低的测试误差。对于每次增强(boosting)迭代,测试集上每种算法的误差显示在下图左侧,下图中间是每棵树在测试集上的分类误差,下图右侧是每棵树的增强权重。在SAMME.R算法中,所有树的权重均为1,因此未在图中显示。 1(1,2) 10.Zhu, H. Zou, S. Rosset, T. Hastie, “Multi-class AdaBoost”, 2009.
a964d44d3ca6a26e51df5739a2daf9cd.png
sphx_glr_plot_adaboost_multiclass_001
print(__doc__)# 作者: Noel Dawe ## 许可证: BSD 3 clauseimport matplotlib.pyplot as pltfrom sklearn.datasets import make_gaussian_quantilesfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.metrics import accuracy_scorefrom sklearn.tree import DecisionTreeClassifier
X, y = make_gaussian_quantiles(n_samples=13000, n_features=10,
                               n_classes=3, random_state=1)
n_split = 3000
X_train, X_test = X[:n_split], X[n_split:]
y_train, y_test = y[:n_split], y[n_split:]
bdt_real = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=2),
    n_estimators=600,
    learning_rate=1)
bdt_discrete = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=2),
    n_estimators=600,
    learning_rate=1.5,
    algorithm="SAMME")
bdt_real.fit(X_train, y_train)
bdt_discrete.fit(X_train, y_train)
real_test_errors = []
discrete_test_errors = []for real_test_predict, discrete_train_predict in zip(
        bdt_real.staged_predict(X_test), bdt_discrete.staged_predict(X_test)):
    real_test_errors.append(1. - accuracy_score(real_test_predict, y_test))
    discrete_test_errors.append(1. - accuracy_score(discrete_train_predict, y_test))
n_trees_discrete = len(bdt_discrete)
n_trees_real = len(bdt_real)# 增强(Boosting)可能会提前终止,但下列数组始终有n_estimators的长度。# 我们在这里将它们裁剪为实际的树数量:
discrete_estimator_errors = bdt_discrete.estimator_errors_[:n_trees_discrete]
real_estimator_errors = bdt_real.estimator_errors_[:n_trees_real]
discrete_estimator_weights = bdt_discrete.estimator_weights_[:n_trees_discrete]
plt.figure(figsize=(15, 5))
plt.subplot(131)
plt.plot(range(1, n_trees_discrete + 1),
         discrete_test_errors, c='black', label='SAMME')
plt.plot(range(1, n_trees_real + 1),
         real_test_errors, c='black',
         linestyle='dashed', label='SAMME.R')
plt.legend()
plt.ylim(0.18, 0.62)
plt.ylabel('Test Error')
plt.xlabel('Number of Trees')
plt.subplot(132)
plt.plot(range(1, n_trees_discrete + 1), discrete_estimator_errors,"b", label='SAMME', alpha=.5)
plt.plot(range(1, n_trees_real + 1), real_estimator_errors,"r", label='SAMME.R', alpha=.5)
plt.legend()
plt.ylabel('Error')
plt.xlabel('Number of Trees')
plt.ylim((.2,
         max(real_estimator_errors.max(),
             discrete_estimator_errors.max()) * 1.2))
plt.xlim((-20, len(bdt_discrete) + 20))
plt.subplot(133)
plt.plot(range(1, n_trees_discrete + 1), discrete_estimator_weights,"b", label='SAMME')
plt.legend()
plt.ylabel('Weight')
plt.xlabel('Number of Trees')
plt.ylim((0, discrete_estimator_weights.max() * 1.2))
plt.xlim((-20, n_trees_discrete + 20))# 防止y轴标签重叠
plt.subplots_adjust(wspace=0.25)
plt.show()
脚本的总运行时间:(0分钟12.285秒) 估计的内存使用量: 8 MB

783969e1c67645479c7bc6235ca55587.png

下载Python源代码:plot_adaboost_multiclass.py 下载Jupyter notebook源代码:plot_adaboost_multiclass.ipynb 由Sphinx-Gallery生成的画廊 c060c65a95e52eee2e8b9cfff522f873.png ☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图: 39150a915c9bc1d593f16ead76de8903.png 欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler,备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler,备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。) 220386d32b3d90c6d65b0475905624d8.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值