再聊决策树模型

再聊决策树模型大家好 上次我们探索了一下和决策树模型相关的话题 但都没有深入展开去讲今天闲来无事 和大家再聊聊决策树模型 这次谈论的话题稍微复杂一点哈哈 不要说什么决策树 out 之类的话 我可是不赞同的哦也同时给大家分享几点工作中的心得 希望对大家研究算法

欢迎大家来到IT世界,在知识的湖畔探索吧!

再聊决策树模型
欢迎大家来到IT世界,在知识的湖畔探索吧!

大家好,上次我们探索了一下和决策树模型相关的话题,但都没有深入展开去讲

今天闲来无事,和大家再聊聊决策树模型,这次谈论的话题稍微复杂一点

哈哈,不要说什么决策树out之类的话,我可是不赞同的哦

也同时给大家分享几点工作中的心得,希望对大家研究算法带来新的启发和思路

1.决策树的目标函数

通常我们在设定机器学习任务的时候,只需要使用已知的几种决策树框架,使用系统自带的目标函数即可,例如xgboost回归任务时就可以选用reg:squarederror

但有时候我们会面临一些较复杂的任务,目标函数也会变得很复杂(例如不是线性变化的loss),这时候就可以通过自定义目标函数的方式实现

相信XGBoost自定义目标函数就难倒了一批人:

1是大家很少会用到自定义目标函数的场景

2是xgboost自定义目标函数的门槛要高于神经网络自定义loss

XGBoost的官方文档说明,目标函数中必须提供两个输出:grad和hess

https://xgboost.readthedocs.io/en/stable/tutorials/custom_metric_obj.html

grad代表梯度,hess代表grad的偏导数

注意:这里国内大部分文章将偏导和偏导数混淆不清,很容易误导人,一字之差含义却大不相同

我们一定要注意区分导数导函数,有的文章甚至堂而皇之说导函数简称导数,简直给本已非常模糊的概念变得更加难懂,真是一场英文知识到中文知识翻译的重大车祸现场

这里明确下:

导数英文Derivative

导函数英文Derivativefunction (function一字之差,万万不能少)

偏导默认是偏导函数,求出来的结果是一个表达式,而偏导数是一个数值,所以求偏导数的方式也是不同的:

scipy.misc.derivative 用于求解导函数值(简称导数)

sympy.diff 用于取得代数形式的导函数

好了,搞清楚了上面的点以后,还需要注意的是,不是所有的lossfunction都能求出正确的偏导数的,这里又是一个容易混淆的知识点,所有中文资料里都会提到,一定要先证明lossfunction可微,这就导致本就困难重重的目标函数设计更加雪上加霜

如何证明损失函数可微呢?其实换个说法,你就能立马明白,也无需严格证明:

设计者只需要关注一点:损失函数必须在取值范围内是连续光滑的(想象一下丝滑的曲线或曲面即可)

再聊决策树模型

心得:设计好决策树模型的损失函数基本上就成功了一半,不要设置一些冷门复杂的分段的损失函数,因为你很难想象出它在解空间中表现的样子

2.决策树中的不平衡学习

现实世界中,数据平衡的样本是理想状态,而不平衡的样本是常态,如何使用不平衡的样本训练模型从而达到预期的模型效果,是算法工程师经常面对的问题

什么是不平衡学习问题:就是正负样本之间的比例不等于1:1,其中一类样本要远大于另一类样本

下图就是一个典型的不平衡样本数据的分布:

再聊决策树模型

所以,所谓不平衡学习,实际是指使用不平衡的训练样本进行机器学习

那么,不平衡的样本会给机器学习带来什么样的问题?

1.非常直观的,模型采取偷懒的策略,只要始终押注在数量多的那一类,准确率就会一直很高;

2.模型根本学习不到数量少的那一类数据的分布规律

面对不平衡的样本,从直观上想想又会有哪些手段?

我们自然想到的,有以下几种策略:

1.配平样本

2.配平学习目标

3.调整损失函数

下面分别说明下:

1.配平样本

参考:https://imbalanced-learn.org/stable/references/index.html#api

1.删除较多类的样本

行话就是undersampling 降采样

1.1.随机降采样(RandomUnderSampler):顾名思义,就是随机删除一定量的样本

1.2.质心降采样(ClusterCentroids):采取KMeans聚类的方法,生成聚类样本的质心

1.3.浓缩近邻降采样(CondensedNearestNeighbour):使用类似腐蚀的算法降采样

1.4.编辑近邻降采样(EditedNearestNeighbours):使用编辑好的规则降采样

1.5.重复编辑近邻(RepeatedEditedNearestNeighbours):递归使用编辑规则降采样

……

等等,这里就不罗列了,在不同的问题选用对应的方法即可

2.增加较少类的样本

其实严格意义上来说,增加少类的样本也是建立在某种分布的假设基础上的,所以我认为除非样本实在太少,否则还是慎用

过采样oversamping

2.1.随机过采样(RandomOverSamper):意思类似

2.2.合成少数群体过采样系列(SMOTE系列):通过最近邻的同类样本插值得到新样本

SMOTE是一个系列,可以采取各种不同的插值策略得到假想中的结果

3.降采样和过采样综合使用

按照一定的比率或规则采取大样本的降采样和小样本的过采样

4.使用深度学习模型配平样本

目前再补充一条,使用深度学习模型配平样本,但本质上还是学习样本的分布,在最有可能的分布中产生或删除样本,这里就不过多介绍了

心得:不平衡样本模型的应用也一定要小心,需要仔细考察目标问题的分布,如果在训练阶段做了样本的配平,与之相应的,在推理时也要考虑不同分类结果的置信度和适用范围!

2.配平学习目标

以上配平样本的技术说了这么多,视乎和决策树没啥关系,下面就聊聊和决策树相关的:

我们知道,在集成学习树中有两种重要的集成策略:boosting和bagging,所以与之对应的,就会有两类不同的目标优化方式:

1.针对boosting的样本配平算法:针对决策树在boosting过程中样本的选取(目前大多是降采样);

2.针对bagging的样本配平算法:针对决策树在bagging过程中样本的选取;

不过,除了集成学习策略,XGBoost也自带一些优化参数,可以让我们更方便的训练模型:

xgboost.DMatrix.weight:可设置训练集每行数据的权重

xgboost.DMatrix.feature_weights:可设置训练集每列数据的权重

通过权重的设置,可以变相的加强对小样本的学习

当然,除了可以预先设定参数,也可以通过设计自定义目标函数实现

心得:数据是模型的根本,在数据上做文章实际上是用人类的先验知识指导模型学习

3.决策树的超参数搜索

决策树模型之所以无法快速应用还有一个比较难搞的部分就是超参数搜索,不过目前已经有很多框架使得超参数的搜索越来越简单智能,从最初的gridsearch到目前的optuna到autoxgb,超参数搜索的计算成本在逐渐降低,而超参数搜索的成功率也在不断提高

1.optuna:

我们重点关注下optuna(autoxgb也是基于optuna的),看看超参数搜索到底有何神秘之处:

再聊决策树模型

optuna支持多种超参数搜索策略,如上图所示,CMA-ES就是optuna支持的一种超参数搜索策略

参考:https://optuna.readthedocs.io/zh_CN/latest/tutorial/10_key_features/003_efficient_optimization_algorithms.html

optuna的采样算法:

  • optuna.samplers.TPESampler 实现的Tree-structured Parzen Estimator 算法

  • optuna.samplers.CmaEsSampler 实现的CMA-ES 算法

  • optuna.samplers.GridSampler 实现的网格搜索

  • optuna.samplers.RandomSampler 实现的随机搜索

其他两种倒是比较好理解,那么什么是TPE和CMA-ES呢?

TPE:树结构帕森估计,简单表述就是:假设超参数的解空间存在某种分布,不断使用两组高斯混合模型对比结果去逼近最优解;(注意:假设的前提是超参数的解空间分布是连续的)

https://zhuanlan.zhihu.com/p/

CMA-ES:关于协方差自适应进化策略,这篇文章讲得很详细了,就不再多说:

https://blog.csdn.net/weixin_/article/details/

2.HyperGBM:

https://github.com/DataCanvasIO/HyperGBM

再聊决策树模型

与其说HyperGBM是一款超参数搜索框架,不如将它看做是一款自动化机器学习框架更恰当,它不仅包含了决策树的部分,且包含了神经网络的部分,在算法上倒是没有发现创新点,所以更多的是当做一款工程化工具推荐给大家

心得:超参数一定程度上也反应了设计者对问题的理解,所有超参数搜索技术都是贯彻或加强这种理解,只有建立在对问题抽象的理解基础上,才有可能搜索出有效的超参数

4.决策树与神经网络

上次给大家介绍了tabnet等结合决策树思想与神经网络思想的框架,这次再给大家介绍几款很有潜力的框架:

1.XBNet:https://github.com/tusharsarkar3/XBNet

再聊决策树模型

决策树可以通过boosting的策略来提升算法精度,那么是否也可以通过使用神经网络模拟boosting策略实现成功呢?XBNet就是这样一款框架,通过神经网络将决策树连接起来,进而实现boosting和bagging的自动化,是不是看起来很有趣?不过这款框架还未实现基于GPU的计算,并且神经网络的设计还需要用户指定(未来如果能结合AutoPytorch则更好),大家有兴趣可以尝试下

2.PyTorchTabular:https://github.com/manujosephv/pytorch_tabular

这是一款集成框架,集成了常见的几种结合神经网络的tabledata算法,包括之前给大家介绍的tabnet,当然还有几款:

1. Neural Oblivious Decision Ensembles for DeepLearning on Tabular Data

再聊决策树模型

基本原理与XBNet类似,只不过输出部分的结构与boosting和bagging的思想更相似,如上图所示

2.MixtureDensity Networks

再聊决策树模型

将神经网络中的隐层替换成高斯混合模型,实际上可以看做是一种先验知识的叠加

剩下的就不做过多介绍了,以上各种神经网络与决策树的结合体本质上都是使用神经网络代替了部分集成学习的策略,实现自动集成学习,但从抽象的数学模型来看,没有实质性的变化。从论文给出的结果也发现,比起传统的机器学习效果的提升并不是特别显著,且存在部分结果会变差的情况。

但神经网络的引入,确实减少了集成学习超参数的设置,减小了人工设置的复杂度。

所以神经网络与决策树的结合还需要更多的探索和实践的检验。期待未来能有更多的算法出现!

心得:神经网络也不是万能的灵丹妙药,但让工具变得自动化和友好,一直是人类不断的追求,所以很多问题方法不重要,简单好用才是真的香!

总结:

本文从决策树模型比较常见和热门的三个点(自定义目标函数、超参数搜索、与神经网络结合)给大家介绍了一下作者个人收集的经验和心得,希望对读者有所帮助!

好了,以上给大家有侃了一堆,大家也不要盲目相信,抱着拿来主义的态度注定还是会吃亏的,文中恐怕也有不少错漏的地方,希望大家多多批评指正!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/145461.html

(0)
上一篇 33分钟前
下一篇 3分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信