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

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

梯度提升机分类
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)))