当前位置 : 主页 > 编程语言 > python >

python_GBDT分析

来源:互联网 收集:自由互联 发布时间:2022-07-19
python_GBDT分析 ( Gradient Boosting Machines ) #### Gradient Boosted Regression Trees (Gradient Boosting Machines) random_state # Gradient Boosted Regression Trees (Gradient Boosting Machines) # GBDT # 在乳腺癌数据集上应用 Gradi


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.1
from sklearn.ensemble import GradientBoostingClassifier

X_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.000
Accuracy 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.991
Accuracy on test set: 0.972
gbrt = 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.988
Accuracy 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)

python_GBDT分析_最大深度

可以看到,梯度提升树的特征重要性与随机森林的特征重要性有些类似,不过梯度提升完
全忽略了某些特征。
由于梯度提升和随机森林两种方法在类似的数据上表现得都很好,因此一种常用的方法就
是先尝试随机森林,它的鲁棒性很好。如果随机森林效果很好,但预测时间太长,或者机
器学习模型精度小数点后第二位的提高也很重要,那么切换成梯度提升通常会有用。


上一篇:python_文件系统操作_加载文件
下一篇:没有了
网友评论