1. 提升树算法
上一篇我们讲到,Adaboost通过前一个分类器的错误率来不断调整学习的权重。而提升树算法则是通过新的决策树模型不断拟合之前分类器所遗留的残差去使得整体的预测效果越来越好。提升树的算法流程如下:
2. GBDT算法
GBDT算法通过引入新的基学习器拟合负梯度的方式不断提升算法的准确性。GBDT算法的流程是
可以从算法的流程中看出GBDT和提升树的区别,主要在于新的基学习器拟合的式子的不同。
2.1 GBDT程序的参数解释
GradientBoostingRegressor参数解释:
- loss:{‘ls’, ‘lad’, ‘huber’, ‘quantile’}, default=’ls’:‘ls’ 指最小二乘回归. ‘lad’ (最小绝对偏差) 是仅基于输入变量的顺序信息的高度鲁棒的损失函数。. ‘huber’ 是两者的结合. ‘quantile’允许分位数回归(用于alpha指定分位数)
- learning_rate:学习率缩小了每棵树的贡献learning_rate。在learning_rate和n_estimators之间需要权衡。
- n_estimators:要执行的提升次数。
- subsample:用于拟合各个基础学习者的样本比例。如果小于1.0,则将导致随机梯度增强。subsample与参数n_estimators。选择会导致方差减少和偏差增加。subsample < 1.0
- criterion:{‘friedman_mse’,‘mse’,‘mae’},默认=‘friedman_mse’:“ mse”是均方误差,“ mae”是平均绝对误差。默认值“friedman_mse”通常是最好的,因为在某些情况下它可以提供更好的近似值。
- min_samples_split:拆分内部节点所需的最少样本数
- min_samples_leaf:在叶节点处需要的最小样本数。
- min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。
- max_depth:各个回归模型的最大深度。最大深度限制了树中节点的数量。调整此参数以获得最佳性能;最佳值取决于输入变量的相互作用。
- min_impurity_decrease:如果节点分裂会导致杂质的减少大于或等于该值,则该节点将被分裂。
- min_impurity_split:提前停止树木生长的阈值。如果节点的杂质高于阈值,则该节点将分裂
- max_features{‘auto’, ‘sqrt’, ‘log2’},int或float:寻找最佳分割时要考虑的功能数量:
如果为int,则max_features在每个分割处考虑特征。
如果为float,max_features则为小数,并 在每次拆分时考虑要素。int(max_features * n_features)
如果“auto”,则max_features=n_features。
如果是“ sqrt”,则max_features=sqrt(n_features)。
如果为“ log2”,则为max_features=log2(n_features)。
如果没有,则max_features=n_features。
2.2 GBDT 算法实现
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_friedman1
from sklearn.ensemble import GradientBoostingRegressor
X, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0)
X_train, X_test = X[:200], X[200:]
y_train, y_test = y[:200], y[200:]
est = GradientBoostingRegressor(n_estimators=100,
learning_rate=0.1,max_depth=1, random_state=0, loss='ls').fit(X_train, y_train)
mean_squared_error(y_test, est.predict(X_test))