《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!
01
—
回顾
昨天编写了单个决策树用于回归的实现源码,它的构建实际上就是在不断寻找最优的划分属性和其取值的过程,分割后的节点若特征的取值都一样,或者包含的节点个数小于某个阈值,都将被标记为叶子节点,不再继续分裂,并且这个节点的取值为某个目标值,而不是像非叶子节点那样为某个最优特征及其分割值。
这是一个决策树用于回归的算法,以此为基础模型,如果按照某个求解目标组合到一起的好多棵决策树的模型,就称为提升树集成模型。
02
—
第二棵树的提升target
假如我们去银行贷款,银行会根据你的收入情况和年龄这两个特征去判断借给你的钱数,假如你今天上大一(18岁的),收入几乎为0,根据先验数据获知,对于没毕业的大学生,银行会贷款150元。根据10个输入的样本,我们得出了如下一个决策树,据此得出,大一新生小红从银行能借到的贷款为100元。
预测值100元,与目标值150元相比,会得到一个50元的残差,这样,我们构建第二棵决策树时,提升的目标就是让最终的预测值尽可能的接近残差值50,注意,这是与提升方法Adaboost最大的区别,第二棵决策树是要对残差项拟合,因此此时的10个原初始样本对应的目标值都变为了残差项,比如小红的目标值变为了50!
再次构建第二颗决策树,可以看到这棵树的叶节点的取值都相对小一些,因为此时的拟合目标为残差,相对第一棵的初始拟合值要小。
经过以上两步,得到了两棵决策树,假如我们到此打住,那么请问借给小红的钱预测值应该为多少?
应该为第一棵树的预测结果+第二棵树的预测结果 = 100 + 20 = 120 元,因此银行会借钱给小红120元,更接近了实际的预测值150元,这就是提升树集成的基本思路,最重要的是弄明白,初始的目标值拟合只使用了一次,以后所有的拟合目标值都是使最新的残差。
还记得昨天的决策树模型吗,它在求损失函数是使用了均方误差方法,这样也是简化了优化的难度。
但是,如果对于一般的损失函数,每一步的优化并不是那么容易,此时应该怎么计算损失值呢?
03
—
梯度提升决策树
针对这一问题,Freidman 提出了梯度提升(gradient boosting) 算法。这是利用最速下降法的近似方法,关键在于利用损失函数的负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值去拟合一个回归树,这种算法简写为GBDT。
GBDT的算法思路与用均方误差拟合的提升树(02节阐述的算法)思路是基本一致的,不同之处在于求解每个样本的残差项是以上公式中描述损失函数的负梯度去拟合回归树。
具体的算法实施细节,可以参考相关书籍和博客,在此不再详述。
明天开始系统地总结深度学习之神经网络相关的理论和几个常用算法。欢迎您的关注。
算法channel已推送的更多文章:
1机器学习集成算法:XGBoost思想
2机器学习:XGBoost 安装及实战应用
3决策树回归:不掉包源码实现
领取专属 10元无门槛券
私享最新 技术干货