梯度提升算法

梯度提升回归树

  • 通过合并多个决策树来构建一个更为强大的模型,采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。
  • 默认情况下,梯度提升回归树没有随机化,而是用到强预剪枝。
  • 通常使用深度很小(1 到 5 之间)的树,这样模型占用的内存更少,预测速度也更快。
  • 梯度提升重要参数 learning_rate,用于控制每棵树纠正前一棵树的错误的强度。

算法

image.png

优点、缺点和参数

  • 缺点是需要仔细调参,而且训练时间可能会比较长。不适用与稀疏数据集
  • 优点是不需要对数据进行缩放就可以表现的很好,而且适用于二元特征与连续特征同时存在的数据集
  • 参数 n_estimators 和 learning_rate,通常的做法是根据时间和内存的预算选择合适的 n_estimators,然后对不同的 learning_rate 进行遍历。
  • 参数 max_depth,用于降低每棵树的复杂度,通常设置得很小,一般不超过 5 。
image.png

梯度提升机分类

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

cancer=load_breast_cancer()
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)))

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)))

你可能感兴趣的:(梯度提升算法)