算法描述
实际生活中的很多问题都是非线性的,不可能使用全局线性模型来进行拟合数据,有一种方法是将数据集切分成为很多份易于建模的数据,然后再利用上一节所使用的方法,线性回归技术,来进行建模,如果首次切分后还是很难以拟合线性模型,我们就继续进行切分。使用树回归发给发就比较有用。
树回归算法
构建树
找到最佳的待切分特征:
如果该节点不能再分,将该节点存为叶节点
执行二元切分
在右子树调用 createTree() 方法
在左子树调用 createTree() 方法
找数据集最佳切分点
对每个特征:
对每个特征值:
将数据集切分成两份(小于该特征值的数据样本放在左子树,否则放在右子树)
计算切分的误差
如果当前误差小于当前最小误差,那么将当前切分设定为最佳切分并更新最小误差
返回最佳切分的特征和阈值
树剪枝
预剪枝
预剪枝就是及早的停止树增长,在构造决策树的同时进行剪枝。所有决策树的构建方法,都是在无法进一步降低熵的情况下才会停止创建分支的过程,为了避免过拟合,可以设定一个阈值,熵减小的数量小于这个阈值,即使还可以继续降低熵,也停止继续创建分支。但是这种方法实际中的效果并不好。
后剪枝
基于已有的树切分测试数据:
如果存在任一子集是一棵树,则在该子集递归剪枝过程
计算将当前两个叶节点合并后的误差
计算不合并的误差
如果合并会降低误差的话,就将叶节点合并
CART算法
CART模型是应用广泛的决策树学习方法,由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法,CART假设决策树是二叉树,内部特征结点的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。对CART稍作修改就可以处理回归问题。
这里有一篇比较好的CART解释文章。
模型树
用树来对护具进行建模,除了把叶节点简单地设定为常熟值外,还有一种方法是把叶节点设定为分段线性函数,分段线性也就是指模型由多个线性片段组成。模型树的可解释性优于回归树,其预测准确度也比较高。
一般流程
- 收集数据:任意方法
- 准备数据:数值型数据,标称型数据转为二值型数据
- 分析数据:绘出数据的二维可视化显示结果,以字典方式生成树
- 训练算法:大部分时间都花费在叶节点树模型的构建上
- 测试算法:使用测试数据中的R2值来进行分析
- 使用算法:使用训练出来的树做预测,预测结果还可以用来做很多事情
优缺点
- 优点:可以对复杂和非线性的数据建模
- 缺点:结果不易理解
- 适用数据类型:数值型和标称型数据
代码可参考:
https://blog.youkuaiyun.com/u010859707/article/details/78180285