最近一直在用各种树模型做回归的课题,但其实对于决策树实现回归的原理并不清楚。
这篇文章是对决策树实现回归的总结,
实验数据:
X 1 2 3 4 5 6 7 8 9 10
Y 5.56 5.7 5.91 6.4 6.8 7.05 8.9 8.7 9 9.05
和分类问题相同,首先需要确定可能的分割点,很明显这里有9个可能的分割点。
{1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5}
确定好分割点之后,需要计算每个分割点损失。
使用公式如下:
使用方法如下:
第一步:
当选择分割点 s = 1.5 时,则数据被分为两个子区域:
R1= {1} R2 = {2,3,4,5,6,7,8,9,10}
可以得到
c1 = 5.56
c2 = (5.7+5.91+6.4+6.8+7.05+8.9+9+9.05)/9 = 7.5
L(1.5) = (5.56-5.56)^2 + [ (5.7-7.5)^2 + (5.91-7.5)^2 + ... + (9.05-7.5)^2 ]
= 0 + 15.72 = 15.72
同理我们可以得到如下表格:
s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
c1 5.56 5.63 5.72 5.89 6.07 6.24 6.62 6.88 7.11
c2 7.5 7.73 7.99 8.25 8.54 8.91 8.92 9.03 9.05
L(s) 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74
s=6.5时,损失函数值最小 → 第一个划分点为( j=x, s=6.5 ).
第二步:
使用第一个划分点 ( j=x, s=6.5 ),划分区域,并决定各区域输出。
划分区域为:R1= {1,2,3,4,5,6} R2 = {7,8,9,10}
对应输出为:c1 = 6.24 c2 = 8.91
第三步:
对上一步分割好区域继续进行划分:
对R1= {1, 2, 3, 4, 5, 6} , 取分割点{1.5, 2.5, 3.5, 4.5, 5.5}
计算损失值得到下表:
s 1.5 2.5 3.5 4.5 5.5
c1 5.56 5.63 5.72 5.89 6.07
c2 6.37 6.54 6.75 6.93 7.05
L(s) 1.31 0.75 0.28 0.44 1.06
s=3.5时,损失函数值最小 → 第二个划分点为( j=x, s=3.5 ).
后面同理
第四步:
假设两次划分后即停止,则最终生成的回归树为:
PS:各种库里的树模型都是用max_depth来代表分割次数的。
如果max_depth = 1, 就有 2^0 个分割点
如果max_depth = 2, 就有 2^0 +2^1 个分割点
如果max_depth = 3, 就有 2^0 + 2^1 + 2^2 个分割点
以此类推。
所以像本文中所写的只有2个分割点的情况其实是不存在的。