回归决策树构建原理

回归决策树构建原理

CART 回归树和 CART 分类树的不同之处在于:

  1. CART 分类树预测输出的是一个离散值,CART 回归树预测输出的是一个连续值。
  2. CART 分类树使用基尼指数作为划分、构建树的依据,CART 回归树使用平方损失。
  3. 分类树使用叶子节点里出现更多次数的类别作为预测类别,回归树则采用叶子节点里均值作为预测输出

CART 回归树构建:
Loss ⁡ ( y , f ( x ) ) = ( f ( x ) − y ) 2 \operatorname{Loss}(y, f(x))=(f(x)-y)^{2} Loss(y,f(x))=(f(x)y)2
例子:

假设:数据集只有 1 个特征 x, 目标值值为 y,如下图所示:

x12345678910
y5.565.75.916.46.87.058.98.799.05

由于只有 1 个特征,所以只需要选择该特征的最优划分点,并不需要计算其他特征。

  1. 先将特征 x 的值排序,并取相邻元素均值作为待划分点,如下图所示:

    s1.52.53.54.55.56.57.58.59.5
  2. 计算每一个划分点的平方损失,例如:1.5 的平方损失计算过程为:

    R1 为 小于 1.5 的样本个数,样本数量为:1,其输出值为:5.56

    R2 为 大于 1.5 的样本个数,样本数量为:9 ,其输出值为:7.50

    该划分点的平方损失

  3. 以此方式计算 2.5、3.5… 等划分点的平方损失,结果如下所示:

    s1.52.53.54.55.56.57.58.59.5
    m(s)15.7212.078.365.783.911.938.0111.7315.74
  4. 当划分点 s=6.5 时,m(s) 最小。因此,第一个划分变量:特征为 X, 切分点为 6.5,即:j=x, s=6.5

在这里插入图片描述

  1. 对左子树的 6 个结点计算每个划分点的平方式损失,找出最优划分点:

    x123456
    y5.565.75.916.46.87.05
    s1.52.53.54.55.5
    c15.565.635.725.896.07
    c26.376.546.756.937.05
    s1.52.53.54.55.5
    m(s)1.30870.7540.27710.43681.0644
  2. s=3.5时,m(s) 最小,所以左子树继续以 3.5 进行分裂:

    在这里插入图片描述

  3. 假设在生成3个区域 之后停止划分,以上就是回归树。每一个叶子结点的输出为:挂在该结点上的所有样本均值。

x12345678910
y5.565.75.916.46.87.058.98.799.05

1号样本真实值 5.56 预测结果:5.72

2号样本真实值是 5.7 预测结果:5.72

3 号样本真实值是 5.91 预测结果 5.72

CART 回归树构建过程如下:

  1. 选择第一个特征,将该特征的值进行排序,取相邻点计算均值作为待划分点
  2. 根据所有划分点,将数据集分成两部分:R1、R2
  3. R1 和 R2 两部分的平方损失相加作为该切分点平方损失
  4. 取最小的平方损失的划分点,作为当前特征的划分点
  5. 以此计算其他特征的最优划分点、以及该划分点对应的损失值
  6. 在所有的特征的划分点中,选择出最小平方损失的划分点,作为当前树的分裂点

【实践】回归决策树实践

已知数据:

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=D%3A%2FScikit-Learn%2Fday06-%25E5%2586%25B3%25E7%25AD%2596%25E6%25A0%2591%2F03-%25E7%25AC%2594%25E8%25AE%25B0%2Fimages%2Fimage-在这里插入图片描述
.png&pos_id=img-R6DC22AH-1722847659043)

分别训练线性回归、回归决策树模型,并预测对比

训练模型,并使用1000个[0.0, 10]之间的数据,让模型预测,画出预测值图线

代码展示:

# 导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor

# 准备数据
x = np.array(list(range(1, 11))).reshape(-1, 1)
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05])
print('‘x-->’', x)
print('‘y-->’', y)

# 实例化模型
model1 = DecisionTreeRegressor(max_depth=1)
model2 = DecisionTreeRegressor(max_depth=3)
model3 = DecisionTreeRegressor()
model1.fit(x, y)
model2.fit(x, y)
model3.fit(x, y)

# 模型预测
x_test = np.arange(0.0,10.0, 0.01).reshape(-1, 1)
y_pred1 = model1.predict(x_test)
y_pred2 = model2.predict(x_test)
y_pred3 = model3.predict(x_test)
print(y_pred1.shape, y_pred2.shape, y_pred3.shape)

# 画出决策树回归模型的结果
plt.figure(figsize=(12, 4), dpi=100)
plt.scatter(x, y, label='data')
plt.plot(x_test, y_pred1, label='max_depth=1')
plt.plot(x_test, y_pred2, label='max_depth=3')
plt.plot(x_test, y_pred3)
plt.xlabel('data')
plt.ylabel('target')
plt.title('DecisionTreeRegressor')
plt.legend()
plt.show()

在这里插入图片描述

从预测效果来看:

1、线性回归是一条直线

2、决策树是曲线

3、树的拟合能力是很强的,易过拟合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值