决策树:(分类)
灵魂——依靠某种指标进行树的分裂达到分类或回归的目的,总希望是纯度越高越好
Eg:ID3算法就用信息增益度量属性选择标准,选择分裂后信息增益最大的属性进行分裂
CART,Classification And Regression Tree——分类与回归分析
相同点:本质都是特征到结果、标签的映射
不同点:分类样本输出是类的形式(离散),回归输出是实数(连续数值型)
故回归树无法利用分类树的信息增益等形式进行判定分类,要用新的方式评估效果,比如预测误差(NDCG,MAP等)
一个回归树形成的关键点在于:
分裂点依据什么来划分(如前面说的均方误差最小,loss);
分类后的节点预测值是多少(如前面说,有一种是将叶子节点下各样本实际值得均值作为叶子节点预测误差,或者计算所得)
集成学习:
是指构建多个分类器(弱分类器)对数据集进行预测,然后用某种策略将多个分类器预测的结果集成起来,作为最终预测结果
集成学习根据各个弱分类器之间有无依赖关系,分为Boosting和Bagging两大流派:
Boosting流派,各分类器之间有依赖关系,必须串行,比如Adaboost、GBDT、Xgboost
Bagging流派,各分类器之间没有依赖关系,可各自并行,比如随机森林(Random Forest)
GBDT(Gradient Boost Decision Tree)每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。残差=实际值-预测值
Xgboost:
如果不考虑工程实现、解决问题上的一些差异,xgboost与gbdt比较大的不同就是目标函数的定义
我们的目标是希望建立K个回归树,使得树群的预测值尽量接近真实值(准确率)而且有尽量大的泛化能力(更为本质的东西)
误差/损失函数揭示训练误差,鼓励我们的模型尽量去拟合训练数据,使得最后的模型会有比较少的 bias。而正则化项定义复杂度,鼓励更加简单的模型。因为当模型简单之后,有限数据拟合出来结果的随机性比较小,不容易过拟合,使得最后模型的预测更加稳定。
Xgboost输出
Out[32]:array([ 0.20081411, 0.80391562, 0.20081411, 0.80391562, 0.80391562,
0.80391562, 0.20081411, 0.80391562, 0.80391562, 0.80391562,
0.80391562, 0.80391562, 0.80391562, 0.20081411, 0.20081411,
0.20081411, 0.20081411, 0.20081411, 0.20081411, 0.20081411])
数组中每个数值表示每个样本在所有树中叶子结点的分布状况,可以用代码进行查看:
ypred_leaf = bst.predict(dtest, pred_leaf=True)
Out[33]:array([[1, 1, 1, ..., 1, 1, 1],
[2, 2, 2, ..., 2, 2, 2],
[1, 1, 1, ..., 1, 1, 1],
...,
[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 1, 1, 1]])
输出的维度为[样本数, 树的数量], 树的数量默认是100, 所以ypred_leaf的维度为[100*100].
对于第一行数据的解释就是, 在xgboost所有的100棵树里, 预测的叶子节点都是1(相对于每颗树).
每棵树的选取特征进行分裂不同,最后加起来得出分数(结果)
参考资料:
https://blog.youkuaiyun.com/weixin_41358871/article/details/81541482
https://blog.youkuaiyun.com/kizgel/article/details/78261672