提升树实例

提升树(实例)

原始数据
已知训练数据如上表所示,x的取值范围为区间[0.5,10.5],y的取值范围为区间[5.0,10.0],学习这个回归问题的提升树模型,考虑只用树桩作为基函数。


  既然是一个提升树, f M ( x ) = ∑ m = 1 M T ( x ; θ m ) f_M (x)=\sum_{m=1}^{M}T(x;θ_m ) fM(x)=m=1MT(x;θm),那么第一步需要求 f 1 ( x ) f_1 (x) f1(x),即回归树 T 1 ( x ) T_1 (x) T1(x),首先通过以下优化问题,
min ⁡ s ⁡ [ min ⁡ e 1 ⁡ ∑ x i ∈ R 1 ( y i − c 1 ) 2 + min ⁡ e 2 ∑ x i ∈ R 2 ( y i − c 2 ) 2 ] \min_{s}⁡[\min_{e_1} ⁡\sum_{x_i∈R_1}(y_i-c_1 )^2+\min_{e_2}\sum_{x_i∈R_2}(y_i-c_2 )^2 ] smin[e1minxiR1(yic1)2+e2minxiR2(yic2)2]
  然后求解训练数据的的切分点S, R 1 = { x ∣ x ≤ s } , R 2 = { x ∣ x > s } R_1=\{x|x≤s\} ,R_2=\{x|x>s\} R1={xxs},R2={xx>s},容易求得在 R 1 R_1 R1 R 2 R_2 R2内部使平方损失误差达到最小值的 c 1 c_1 c1 c 2 c_2 c2,分别为 c 1 = 1 N 1 ∑ x i ∈ R 1 y i c_1=\frac{1}{N_1}\sum_{x_i∈R_1}y_i c1=N11xiR1yi, c 2 = 1 N 2 ∑ x i ∈ R 2 y i c_2=\frac{1}{N_2}\sum_{x_i∈R_2}y_i c2=N21xiR2yi,这里 N 1 N_1 N1 N 2 N_2 N2是样本个数。
m ( s ) = min ⁡ e 1 ∑ x i ∈ R 1 ( y i − c 1 ) 2 + min ⁡ e 2 ⁡ ∑ x i ∈ R 2 ( y i − c 2 ) 2 m(s)=\min_{e_1}\sum_{x_i∈R_1}(y_i-c_1 )^2+\min_{e_2}⁡\sum_{x_i∈R_2}(y_i-c_2 )^2 m(s)=e1minxiR1(yic1)2+e2minxiR2(yic2)2
  将上面的想法应用到数据上,考虑切分点:1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5。
  当s=1.5, R 1 R_1 R1={1}, R 2 R_2 R2={2,3,4,5,6,7,8,9,10}, c 1 c_1 c1=5.56, c 2 c_2 c2=7.50, m(s)=0+15.72=15.72;将s和m(s) 计算结果记录。
一次决策分裂数据
  由上表可知,当s=6.5时, m(s)达到最小值,此时 R 1 R_1 R1={1,2,3,4,5,6}, R 2 R_2 R2={7,8,9,10}, c 1 c_1 c1=6.24, c 2 c_2 c2=8.91,所以回归树 T 1 ( x ) = { 6.24 , x &lt; 6.5 8.91 , x ≥ 6.5 T_1 (x)=\begin{cases} 6.24,&amp;x\lt6.5 \\ 8.91,&amp;x\ge6.5 \end{cases} T1(x)={6.248.91x<6.5x6.5,而 f 1 ( 2 ) = T 1 ( x ) f_1 (2)=T_1 (x) f1(2)=T1(x), f 1 ( x i ) f_1 (x_i) f1(xi)拟合训练数据的残差 r 2 i = y i − f 1 ( x i ) r_{2i}=y_i-f_1 (x_i) r2i=yif1(xi),结果如下,
在这里插入图片描述
  使用 f 1 ( x i ) f_1 (x_i) f1(xi)拟合训练数据的平方损失误差: L ( y , f 1 ( x ) ) = ∑ i = 1 10 ( y i − f 1 ( x i ) ) 2 = 1.93 L(y,f_1 (x))= \sum_{i=1}^{10}(y_i-f_1 (x_i))^2=1.93 L(y,f1(x))=i=110(yif1(xi))2=1.93,以此类推,拟合数据为表中残差。
  以上表残差作为初始数据,重复进行计算,可得 T 2 ( x ) = { − 0.52 , x &lt; 3.5 0.22 , x ≥ 3.5 T_2 (x)=\begin{cases} -0.52,&amp;x\lt3.5\\ 0.22,&amp;x\ge3.5 \end{cases} T2(x)={0.520.22x<3.5x3.5, f 2 ( x ) = f 1 ( x i ) + T 2 ( x ) = { 5.72 , x &lt; 3.5 6.46 , 3.5 ≤ x &lt; 6.5 9.13 , x ≥ 6.5 f_2 (x)= f_1 (x_i )+T_2 (x)=\begin{cases} 5.72,&amp;x\lt3.5\\ 6.46,&amp;3.5\le x\lt6.5\\ 9.13,&amp;x\ge6.5 \end{cases} f2(x)=f1(xi)+T2(x)=5.726.469.13x<3.53.5x<6.5x6.5,使用 f 2 ( x i ) f_2 (x_i) f2(xi)拟合训练数据的平方损失误差: L ( y , f 2 ( x ) ) = ∑ i = 1 10 ( y i − f 2 ( x i ) ) 2 = 0.79 L(y,f_2 (x))= \sum_{i=1}^{10}(y_i-f_2 (x_i))^2=0.79 L(y,f2(x))=i=110(yif2(xi))2=0.79

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 内置了许多算法来提升程序的性能和效率。以下是几个常见的算法提升实例: 1. 使用列表推导代替循环:列表推导是 Python 中的一种快速构建列表的方法。它比传统的循环方式更加高效,因为它使用了一种更简洁的语法,减少了代码量和执行时间。 2. 使用集合(set)进行快速查找和去重:集合是 Python 中内置的一种数据结构,它具有快速查找和去重的特性。如果需要经常对数据进行查找或去重操作,使用集合可以大大提高效率。 3. 使用字典(dictionary)进行快速查找和索引:字典是 Python 中的一种映射类型数据结构,它将键和值一一对应。字典的查找和索引操作非常高效,因为它使用了哈希表的数据结构,可以在常数时间内完成。 4. 使用生成器(generator)代替列表(list):生成器是一种特殊的迭代器,它可以逐个生成元素,而不是一次性生成整个列表。生成器占用的内存较少,而且可以在需要时按需生成数据,提高了程序的效率。 5. 使用递归算法解决问题:递归算法是一种自身调用的算法,在某些情况下可以更简洁地解决问题。然而,递归算法可能会导致栈溢出的问题,所以在使用递归算法时需要注意。 这些只是 Python 中一些常见的算法提升实例,实际上还有许多其他的算法和方法可以用于提升程序的性能。在选择使用算法时,需要考虑到具体问题的特点和算法的复杂度,并根据实际情况进行选择和优化。 ### 回答2: Python 算法的提升实例有很多,下面以排序算法为例进行说明。 1. 冒泡排序算法 冒泡排序是一种简单但效率较低的排序算法。在每一轮比较中,它会不断地交换相邻元素的位置,将较大的元素逐渐“浮”到数组末尾。虽然冒泡排序的时间复杂度较高,但在Python中,我们可以利用一些优化技巧来提高其性能,例如设置一个标志位来判断是否进行过交换操作,如果某一轮比较中没有交换任何元素,那么说明数组已经有序,可以直接结束排序,从而提高算法效率。 2. 快速排序算法 快速排序是一种常用且高效的排序算法,它基于分治的思想。在每一轮排序中,选取一个基准元素,将小于基准元素的放在左边,大于基准元素的放在右边,然后分别对左右两个子数组进行递归快速排序。Python中,可以使用列表生成式来简化快速排序实现,并利用快速排序的特点,在选择基准元素时,可以通过随机选择或者中位数选择来提高算法的性能。 3. 归并排序算法 归并排序是一种稳定且高效的排序算法,它将待排序数组划分为多个子问题,并分别对子数组进行排序,最后将排好序的子数组合并成一个有序数组。在Python中,可以利用递归和合并操作来实现归并排序。归并排序的主要优点是它对于大规模的数据集也能够高效地排序,并且在合并过程中不需要额外的空间,因此非常适用于对于内存较小的情况。 总而言之,Python提供了丰富而强大的算法库和工具包,通过灵活运用这些算法,我们可以提升程序的性能和效率,同时使得代码更加简洁易读。除了排序算法外,Python还提供了众多其他算法的实现,例如查找算法、图算法、动态规划算法等,这些算法提升实例的学习和运用,可以使得我们在解决实际问题时能够高效地进行数据处理和分析。 ### 回答3: Python 是一种功能强大的编程语言,广泛用于数据分析、机器学习和算法开发。接下来,我将通过几个实例来展示 Python 在算法提升方面的优势。 首先是排序算法。Python 提供了多种排序算法的实现,如冒泡排序、快速排序和归并排序等。这些算法都可以通过简单的几行代码实现,并且在大多数情况下都能够以较高的效率运行。 其次是图算法。Python 中有许多用于处理图形和网络的库,例如 NetworkX 和 igraph。这些库提供了常见的图算法实现,如最短路径、最小生成和社区发现等。使用这些库,我们可以轻松地处理复杂的网络数据,并应用各种算法来解决实际问题。 还有一种常见的算法是搜索算法。Python 提供了广度优先搜索和深度优先搜索等常用的算法。这些算法对于解决迷宫问题、寻找最佳路径和图形遍历等任务非常有用。通过利用 Python 的递归和迭代特性,我们可以很容易地实现这些算法。 此外,Python 中还有其他许多强大的算法库,如NumPy、SciPy和Pandas等。这些库提供了各种数值计算和科学计算的算法和工具。使用这些库,我们可以进行矩阵运算、概率统计、数据处理等各种复杂的计算任务。 总而言之,Python 在算法提升方面具有广泛的应用。无论是排序、图算法还是搜索算法,Python 都提供了简单而高效的实现方式。而且,Python 还有许多专门的算法库,可以满足不同领域的需求。因此,Python 是一个非常适合进行算法开发和提升的编程语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值