vue项目接口域名动态的获取方法
299
2022-08-24
python_GBDT分析(python gbdt)
python_GBDT分析
(Gradient Boosting Machines)#### Gradient Boosted Regression Trees (Gradient Boosting Machines)random_state# Gradient Boosted Regression Trees (Gradient Boosting Machines)# GBDT# 在乳腺癌数据集上应用 GradientBoostingClassifier 的示例。默认使用 100 棵树,# 最大深度是 3,学习率为 0.1from sklearn.ensemble import GradientBoostingClassifierX_train, X_test, y_train, y_test = train_test_split( cancer.data, cancer.target, random_state=0)gbrt = GradientBoostingClassifier(random_state=0)gbrt.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(gbrt.score(X_train, y_train)))print("Accuracy on test set: {:.3f}".format(gbrt.score(X_test, y_test)))Accuracy on training set: 1.000Accuracy on test set: 0.965# 由于训练集精度达到 100%,所以很可能存在过拟合。为了降低过拟合,我们可以限制最# 大深度来加强预剪枝,也可以降低学习率:gbrt = GradientBoostingClassifier(random_state=0, max_depth=1)gbrt.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(gbrt.score(X_train, y_train)))print("Accuracy on test set: {:.3f}".format(gbrt.score(X_test, y_test)))Accuracy on training set: 0.991Accuracy on test set: 0.972gbrt = GradientBoostingClassifier(random_state=0, learning_rate=0.01)gbrt.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(gbrt.score(X_train, y_train)))print("Accuracy on test set: {:.3f}".format(gbrt.score(X_test, y_test)))Accuracy on training set: 0.988Accuracy on test set: 0.965# 降低模型复杂度的两种方法都降低了训练集精度,这和预期相同。在这个例子中,减小树# 的最大深度显著提升了模型性能,而降低学习率仅稍稍提高了泛化性能# 对于其他基于决策树的模型,我们也可以将特征重要性可视化,以便更好地理解模型# (图 2-35)。由于我们用到了 100 棵树,所以即使所有树的深度都是 1,查看所有树也是# 不现实的:gbrt = GradientBoostingClassifier(random_state=0, max_depth=1)gbrt.fit(X_train, y_train)plot_feature_importances_cancer(gbrt)
可以看到,梯度提升树的特征重要性与随机森林的特征重要性有些类似,不过梯度提升完全忽略了某些特征。由于梯度提升和随机森林两种方法在类似的数据上表现得都很好,因此一种常用的方法就是先尝试随机森林,它的鲁棒性很好。如果随机森林效果很好,但预测时间太长,或者机器学习模型精度小数点后第二位的提高也很重要,那么切换成梯度提升通常会有用。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~