AdaBoosting and Stacking
集成学习-boosting
第一次没被拟合的点,增强学习
基于同一组数据
但是每个子模型认为的每个点的权重不同
key:gbdt 用于回归效果比较好
value:每一颗树学习的是之前树的残差相当于变相增大分错部分的权重。
缺点:不利于并行化;计算复杂度高,不适合高维稀疏特征
改进:XGboost
并行多线程;剪纸;控制了复杂度(加入正则项-树叶节点数+score的L2范数)
Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(传统GBDT的实现也有学习速率)
列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
xgboost工具支持并行。注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。
我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。(特征粒度上的并行,block结构,预排序)
XGboost的应用:
https://blog.****.net/sinat_35512245/article/details/79668363model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=False, objective='reg:gamma') model.fit(X_train, y_train)
[机器学习 ]RandomForest、GBDT、XGBoost、lightGBM 原理与区别
https://blog.****.net/zwqjoy/article/details/82150528
集成学习-stacking
key:stacking
value:神经网络,神经元为模型