模型树推广了回归树的概念,它与回归树的2个重要不同在于:
![](http://www.forkosh.com/mathtex.cgi?SDR=sd%28T%29-\sum_i%7b\frac%7b|T_i|%7d%7b|T|%7dsd%28T_i%29%7d)
![](http://www.forkosh.com/mathtex.cgi?R_%7bMSE%7d=\sqrt%7b\frac%7b1%7d%7bn%7d\sum_i^n%7b%28y_i-R%28\beta,x_i%29%29^2%7d%7d)
![](http://www.forkosh.com/mathtex.cgi?E_R=|N|R_%7bMSE%7d-\sum_i%7b|N_i|R_%7bMSEi%7d%7d)
![](http://www.forkosh.com/mathtex.cgi?f_%7bnew%7d=\frac%7bnf_%7bchild%7d+kf_%7bparent%7d%7d%7bn+k%7d)
- 叶节点上不是常量,而是一个线性函数模型。
- 分割空间的标准不是降低平方误差,而是降低样本标准差。
相比于回归树,模型树的优点在于:回归树的计算量随着维度的增加而迅速增加,但模型树比模型小得多,所以模型树在处理高维(数百)数据时会比较轻松。由于叶节点是采用的是线性函数而非常量,所以预测的精度更高。
M5模型树划分的标准是:将一个节点覆盖的样本的Y值(即目标属性值)的标准差看作误差的度量。计算SDR(standard deviation reduction)
T是到达该节点的实例的集合,|T|表示集合的大小,sd表示标准差,T i 是第i个子树上的实例集合,一般采用的模型树是都是二叉树,所以i的取值只有1和2。
最佳划分s*从候选划分集合S中取得,并且使得SDR最大。如何求得S呢?跟在回归树中的方法一样,按某一个属性对实例进行排序,只要相邻的两例在该属性上不相等,就在它们之间切开。一个属性上最多有n-1种切分方式,n是实例的个数。
树停止生长的条件有2个:
- 节点包含的样本数小于一个阈值。
- 节点包含样本的Y值标准差与全体样本Y值标准差的比值小于一定阈值。
在叶节点上,对本节点包含的实例利用线性回归算法产生一个多元回归方程,得到线性模型。
剪枝是一个bottom-up的递归过程,利用线性回归方法拟合出每个节点的回归方程,计算出回归函数预测的均方误差:
计算每个节点到其子节点的MSE的减小量:
E R 大于0时该子树保留,否则将该子树转变成一个叶子节点。
剪枝后树叶节点上邻近线性模型之间就会出现尖锋的不连续性,使用平滑算法修改相邻的线性方程,使得对应于不同方程的相邻输入向量的预测输出值变得接近。对于较少训练实例构造的模型,平滑过程尤其重要。
f parent 为叶子上级父结点拟合方程,f child 为叶子结点拟合方程,n 为到达本叶子结点的训练样本数目,k 为一个常数(通常取值15),f new 为合并的方程。若子结点采用新函数后的R MSE 变化小于一定的阈值,则用f new 取代子结点的线性方程,否则不进行平滑处理。