XGBoost理论推导+论文解读-上集

泰勒公式

泰勒公式(Taylor’s Formula)是一个用函数在某点的信息描述其附近取值的公式。其初衷是用多项式来近似表示函数在某点周围的情况。

对于一般的函数,泰勒公式的系数的选择依赖于函数在一点的各阶导数值。函数f(x)在 x 0 x_0 x0处的基本形式如下:

f ( x ) = ∑ n = 0 ∞ f ( n ) ( x 0 ) n ! ( x − x 0 ) n = f ( x 0 ) + f ( 1 ) ( x 0 ) ( x − x 0 ) + f ( 2 ) ( x 0 ) 2 ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n \begin{aligned} f(x) & =\sum_{n=0}^{\infty} \frac{f^{(n)}\left(x_0\right)}{n !}\left(x-x_0\right)^n \\ & =f\left(x_0\right)+f^{(1)}\left(x_0\right)\left(x-x_0\right)+\frac{f^{(2)}\left(x_0\right)}{2}\left(x-x_0\right)^2+\cdots+\frac{f^{(n)}\left(x_0\right)}{n !}\left(x-x_0\right)^n\end{aligned} f(x)=n=0n!f(n)(x0)(xx0)n=f(x0)+f(1)(x0)(xx0)+2f(2)(x0)(xx0)2++n!f(n)(x0)(xx0)n

还有另外一种常见的写法, x t + 1 = x t + Δ x x^{t+1}=x^t+\Delta x xt+1=xt+Δx ,将 f ( x t + 1 ) f\left(x^{t+1}\right) f(xt+1) x t x^t xt 处进行泰勒展开,得:
f ( x t + 1 ) = f ( x t ) + f 1 ( x t ) Δ x + f 2 ( x t ) 2 Δ x 2 + ⋯ f\left(x^{t+1}\right)=f\left(x^t\right)+f^1\left(x^t\right) \Delta x+\frac{f^2\left(x^t\right)}{2} \Delta x^2+\cdots f(xt+1)=f(xt)+f1(xt)Δx+2f2(xt)Δx2+

补充:

1.多项式的函数图像特点

∑ n = 0 N f ( n ) ( 0 ) n ! x n \sum_{n=0}^N \frac{f^{(n)}(0)}{n !} x^n n=0Nn!f(n)(0)xn 展开来就是 f ( 0 ) + f ′ ( 0 ) x + f ′ ′ ( 0 ) 2 ! x 2 + ⋯ + f ( N ) ( 0 ) N ! x N f(0)+f^{\prime}(0) x+\frac{f^{\prime \prime}(0)}{2 !} x^2+\cdots+\frac{f^{(N)}(0)}{N !} x^N f(0)+f(0)x+2!f′′(0)x2++N!f(N)(0)xN,我们单独分析 x 2 , x 3 等幂函数 x^2,x^3等幂函数 x2,x3等幂函数

v2-8c82d846d03b32a50c4fb04579ac621d_1440w

v2-d5784875ab239f48722e699246257276_1440w

v2-0b3910e61a1b2499983dfbcdd061dc69_1440w

v2-5e3e55a3c119bb0f4285e2d820f738de_1440w

注意:先呈现 x 9 x^9 x9的特性,再呈现 x 2 x^2 x2的特性,最后呈现 x 9 x^9 x9的特性

结论:

  • 可以看到,幂函数其实只有两种形态:一种是关于Y轴对称,一种是关于原点对称并且指数越大,增长速度越大;
  • x 2 完全被 x 9 压制,图像上只有 x 9 的图像特点 x^2完全被x^9压制,图像上只有x^9的图像特点 x2完全被x9压制,图像上只有x9的图像特点,有了9!和2!的帮助后,图像先呈现 x 9 x^9 x9的特性,再呈现 x 2 x^2 x2的特性,最后呈现 x 9 x^9 x9的特性

2.例子:用多项式对 e x e^x ex 进行逼近

e x = 1 + x + 1 2 ! x 2 + ⋯ + 1 n ! x n + R n ( x ) e^x=1+x+\frac{1}{2 !} x^2+\cdots+\frac{1}{n !} x^n+R_n(x) ex=1+x+2!1x2++n!1xn+Rn(x)

v2-f2d7ee18bfbf0564f04cf653ff480cc0_1440w

v2-a9c0c288bcaf19bbc8735d5d1956f49d_1440w

v2-2b580bbda0467050195968fd12df0700_1440w

可以看出, 1 n ! x n \frac{1}{n !} x^n n!1xn 不断的弯曲着那根多项式形成的铁丝去逼近 e x e^x ex 。并且 n n n 越大,贴合 e x e^x ex的区域就越大。


3.用多项式对sin(x) 进行逼近

sin ⁡ ( x ) \sin (x) sin(x) 是周期函数 Q Q Q ,有非常多的弯曲,难以想象可以用多项式进行逼近。
sin ⁡ ( x ) = x − 1 3 ! x 3 + ⋯ + ( − 1 ) n ( 2 n + 1 ) ! x ( 2 n + 1 ) + R n ( x )  。  \sin (x)=x-\frac{1}{3 !} x^3+\cdots+\frac{(-1)^n}{(2 n+1) !} x^{(2 n+1)}+R_n(x) \text { 。 } sin(x)=x3!1x3++(2n+1)!(1)nx(2n+1)+Rn(x)  
v2-09cf7c4ce708326f93ad9df43e909198_1440w

v2-455deade5f46cc06332c67f008d5d2b0_1440w

可以看到 1 7 ! x 7 \frac{1}{7 !} x^7 7!1x7 在适当的位置,改变了 x − 1 3 ! x 3 + 1 5 ! x 5 x-\frac{1}{3 !} x^3+\frac{1}{5 !} x^5 x3!1x3+5!1x5 的弯曲方向,最终让 x − 1 3 ! x 3 + 1 5 ! x 5 − 1 7 ! x 7 x-\frac{1}{3 !} x^3+\frac{1}{5 !} x^5-\frac{1}{7 !} x^7 x3!1x3+5!1x57!1x7 更好的逼近了 sin ⁡ ( x ) \sin (x) sin(x)


4.泰勒公式与拉格朗日中值定理的关系

拉格朗日中值定理:如果函数 f ( x ) f(x) f(x) 满足,在 [ a , b ] [a, b] [a,b] 上连续,在 ( a , b ) (a, b) (a,b) 上可导,那么至少有一点 θ ( a < θ < b ) \theta(a<\theta<b) θ(a<θ<b) )使等式 f ′ ( θ ) = f ( a ) − f ( b ) a − b f^{\prime}(\theta)=\frac{f(a)-f(b)}{a-b} f(θ)=abf(a)f(b) 成立。

v2-96d6b469b0e82d169d80772934cfbe9f_1440w

这个和泰勒公式有什么关系?

泰勒公式有个余项 R n ( x ) R_n(x) Rn(x) 我们一直没有提。余项即使用泰勒公式估算的误差,即 f ( x ) − ∑ n = 0 N f ( n ) ( a ) n ! ( x − a ) n = R n ( x ) f(x)-\sum_{n=0}^N \frac{f^{(n)}(a)}{n !}(x-a)^n=R_n(x) f(x)n=0Nn!f(n)(a)(xa)n=Rn(x)
余项的代数式是, R n ( x ) = f ( n + 1 ) ( θ ) ( n + 1 ) ! ( x − a ) ( n + 1 ) R_n(x)=\frac{f^{(n+1)}(\theta)}{(n+1) !}(x-a)^{(n+1)} Rn(x)=(n+1)!f(n+1)(θ)(xa)(n+1) ,其中 a < θ < x a<\theta<x a<θ<x ,这里我么假定函数 f ( x ) f(x) f(x)在含a的某个开区间内有连续的n+1阶导数。

N = 0 N=0 N=0 的时候,根据泰勒公式有, f ( x ) = f ( a ) + f ′ ( θ ) ( x − a ) f(x)=f(a)+f^{\prime}(\theta)(x-a) f(x)=f(a)+f(θ)(xa) ,把拉格朗日中值定理中的 b b b 换成 x x x ,那么拉格朗日中值定理根本就是 N = 0 N=0 N=0 时的泰勒公式。


5.泰勒公式是怎么推导的?

以直代曲、化整为零

v2-f66b6d94fe09ff389bffbe718b718f72_1440w

如上图,把曲线等分为 n n n 份,分别为 a 1 , a 2 , ⋯ , a n a_1 , a_2 , \cdots , a_n a1a2an ,令 a 1 = a , a 2 = a + Δ x a_1=a , a_2=a+\Delta x a1=aa2=a+Δx ⋯ , a n = a + ( n − 1 ) Δ x \cdots , a_n=a+(n-1) \Delta x an=a+(n1)Δx 。我们可以推出 ( Δ 2 , Δ 3 \left(\Delta^2 , \Delta^3\right. (Δ2Δ3 可以认为是二阶、三阶微分,其准确的数学用语是差分,和微分相比,一个是有限量,一个是极限量)。

补充:牛顿插值

引入:对于已知的4组数据【(1, 3), (2, 6), (4, 5), (5, 7)】,如何预测未知数据(3, ?)

  • 插值

    所以根据这4个点,我们随便猜测一个运动轨迹:

    v2-29df12223674f4b2cce6a922a56fe755_1440w

    v2-5a8b81ae7d0f0a20fd12308808436d1d_1440w

  • 线性插值

    v2-914c914262fee23c7d20550f4f657eba_1440w

    线性插值法中根本不需要x=1,x=5的数据,只需要x=2, x=4

  • 多项式插值

    • 线性方程

      联立方程组求出 f ( x ) = a + b x + c x 2 + d x 3 f(x)=a+b x+c x^2+d x^3 f(x)=a+bx+cx2+dx3的四个多项式系数a,b,c,d

      { 3 = a + b + c + d 6 = a + 2 b + 4 c + 8 d 5 = a + 4 b + 16 c + 64 d 7 = a + 5 b + 25 c + 125 d \left\{\begin{array}{l}3=a+b+c+d \\ 6=a+2 b+4 c+8 d \\ 5=a+4 b+16 c+64 d \\ 7=a+5 b+25 c+125 d\end{array}\right. 3=a+b+c+d6=a+2b+4c+8d5=a+4b+16c+64d7=a+5b+25c+125d

      缺点:

      • 计算量大,若数据量,会给计算带来较大阻碍
      • 增加一个观测数据,整个计算过程就要重新来

      于是就产生了牛顿插值法

    • 牛顿插值法

      每增加一个点,不会导致之前的重新计算,只需要算和新增点有关的就可以了

      v2-760da819b88578dde14769747402971a_1440w

      v2-f5d582849a959ace34d56c6cf39dc124_1440w

      观察 b 1 , b 2 b_1, b_2 b1,b2 的特点,不断重复上述过程,就可以得到牛顿插值法。


      求解流程

      先从求满足两个点 ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) \left(x_0, f\left(x_0\right)\right),\left(x_1, f\left(x_1\right)\right) (x0,f(x0)),(x1,f(x1)) 的函数 f 1 ( x ) f_1(x) f1(x) 说起:
      假设 f 1 ( x ) = f ( x 0 ) + b 1 ( x − x 0 ) f_1(x)=f\left(x_0\right)+b_1\left(x-x_0\right) f1(x)=f(x0)+b1(xx0)
       令  f 1 ( x 1 ) = f ( x 1 )  :  \text { 令 } f_1\left(x_1\right)=f\left(x_1\right) \text { : }   f1(x1)=f(x1) : 

      ⟹ b 1 = f ( x 1 ) − f ( x 0 ) x 1 − x 0 ⟹ f 1 ( x ) = f ( x 0 ) + f ( x 1 ) − f ( x 0 ) x 1 − x 0 ( x − x 0 ) \begin{aligned} & \Longrightarrow b_1=\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0} \\ & \Longrightarrow f_1(x)=f\left(x_0\right)+\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0}\left(x-x_0\right) \end{aligned} b1=x1x0f(x1)f(x0)f1(x)=f(x0)+x1x0f(x1)f(x0)(xx0)

      现在我们增加一个点, ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , ( x 2 , f ( x 2 ) ) \left(x_0, f\left(x_0\right)\right),\left(x_1, f\left(x_1\right)\right),\left(x_2, f\left(x_2\right)\right) (x0,f(x0)),(x1,f(x1)),(x2,f(x2)) ,求满足这三个点的函数 f 2 ( x ) f_2(x) f2(x)

      假设 f 2 ( x ) = f 1 ( x ) + b 2 ( x − x 0 ) ( x − x 1 ) f_2(x)=f_1(x)+b_2\left(x-x_0\right)\left(x-x_1\right) f2(x)=f1(x)+b2(xx0)(xx1)
      f 2 ( x 2 ) = f ( x 2 ) f_2\left(x_2\right)=f\left(x_2\right) f2(x2)=f(x2)
      ⟹ b 2 =   [ f ( x 2 ) − f ( x 1 ) x 2 − x 1 ] − [ f ( x 1 ) − f ( x 0 ) x 1 − x 0 ] x 2 − x 0 ⟹ f 2 ( x ) = f ( x 0 ) + f ( x 1 ) − f ( x 0 ) x 1 − x 0 ( x − x 0 ) + [ f ( x 2 ) − f ( x 1 ) x 2 − x 1 ] − [ f ( x 1 ) − f ( x 0 ) x 1 − x 0 ] x 2 − x 0 ( x − x 0 ) ( x − x 1 ) \begin{array}{ll} \Longrightarrow b_2=\ & \frac{\left[\frac{f\left(x_2\right)-f\left(x_1\right)}{x_2-x_1}\right]-\left[\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0}\right]}{x_2-x_0} \\ \Longrightarrow f_2(x)=\quad & f\left(x_0\right)+\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0}\left(x-x_0\right) \\ & +\frac{\left[\frac{f\left(x_2\right)-f\left(x_1\right)}{x_2-x_1}\right]-\left[\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0}\right]}{x_2-x_0}\left(x-x_0\right)\left(x-x_1\right) \end{array} b2= f2(x)=x2x0[x2x1f(x2)f(x1)][x1x0f(x1)f(x0)]f(x0)+x1x0f(x1)f(x0)(xx0)+x2x0[x2x1f(x2)f(x1)][x1x0f(x1)f(x0)](xx0)(xx1)
      b 1 , b 2 b_1, b_2 b1,b2 看起来蛮有特点的,我们把特点提炼一下。
      一阶均差:
      f [ x i , x j ] = f ( x i ) − f ( x j ) x i − x j , i ≠ j f\left[x_i, x_j\right]=\frac{f\left(x_i\right)-f\left(x_j\right)}{x_i-x_j}, i \neq j f[xi,xj]=xixjf(xi)f(xj),i=j

      二阶均差 是一阶均差的均差:

    f [ x i , x j , x k ] = f [ i , j ] − f [ j , k ] x i − x k , i ≠ j ≠ k f\left[x_i, x_j, x_k\right]=\frac{f[i, j]-f[j, k]}{x_i-x_k}, i \neq j \neq k f[xi,xj,xk]=xixkf[i,j]f[j,k],i=j=k

    三阶均差 就是二阶均差的均差,以此类推,我们得到 ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , ( x 2 , f ( x 2 ) ) . . . ( x n , f ( x n ) ) \left(x_0, f\left(x_0\right)\right),\left(x_1, f\left(x_1\right)\right),\left(x_2, f\left(x_2\right)\right)...(x_n,f(x_n)) (x0,f(x0)),(x1,f(x1)),(x2,f(x2))...(xn,f(xn)) 牛顿插值法为:
    f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) + ⋯ + f [ x 0 , x 1 , ⋯   , x n − 2 , x n − 1 ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 2 ) + f [ x 0 , x 1 , ⋯   , x n − 1 , x n ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) \begin{aligned} f(x)= & f\left(x_0\right)+f\left[x_0, x_1\right]\left(x-x_0\right) \\ & +f\left[x_0, x_1, x_2\right]\left(x-x_0\right)\left(x-x_1\right)+\cdots \\ & +f\left[x_0, x_1, \cdots, x_{n-2}, x_{n-1}\right]\left(x-x_0\right)\left(x-x_1\right) \cdots\left(x-x_{n-2}\right) \\ & +f\left[x_0, x_1, \cdots, x_{n-1}, x_n\right]\left(x-x_0\right)\left(x-x_1\right) \cdots\left(x-x_{n-1}\right) \end{aligned} f(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x2](xx0)(xx1)++f[x0,x1,,xn2,xn1](xx0)(xx1)(xxn2)+f[x0,x1,,xn1,xn](xx0)(xx1)(xxn1)

    注释:

    单独看等号右边第一项 f ( x ) = f ( x 0 ) f(x)=f(x_0) f(x)=f(x0)是把 ( x 0 , f ( x 0 ) ) (x_0, f(x_0)) (x0,f(x0))带入的式子;右边第二项 f ( x ) = f [ x 0 , x 1 ] ( x − x 0 ) f(x)=f\left[x_0, x_1\right]\left(x-x_0\right) f(x)=f[x0,x1](xx0)是把 ( x 1 , f ( x 1 ) ) (x_1, f(x_1)) (x1,f(x1))带入的式子,并保证 x = x 0 x=x_0 x=x0时, f ( x ) = 0 f(x)=0 f(x)=0;右边第三项 f ( x ) = f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) f(x)=f\left[x_0, x_1, x_2\right]\left(x-x_0\right)\left(x-x_1\right) f(x)=f[x0,x1,x2](xx0)(xx1)是把 ( x 2 , f ( x 2 ) ) (x_2, f(x_2)) (x2,f(x2))带入的式子,并保证 x = x 0 或者 x = x 1 x=x_0或者x=x_1 x=x0或者x=x1时, f ( x ) = 0 f(x)=0 f(x)=0。从而保证新增一个点,只需要计算相关的差分就可以了

5.泰勒公式是怎么推导的?

泰勒把牛顿插值法做了一些改造。

首先,设 f ( x ) f(x) f(x) 是一个函数,它在 x 0 , x 0 + Δ x , x 0 + 2 Δ x , x 0 + 3 Δ x , ⋯   , x 0 + n Δ x x_0, x_0+\Delta x, x_0+2 \Delta x, x_0+3 \Delta x, \cdots, x_0+n \Delta x x0,x0+Δx,x0+x,x0+x,,x0+nΔx 的值已知(和之前的相比,相当于每个点都是等距离间隔的,间隔 Δ x \Delta x Δx ),令:
Δ f ( x 0 ) = f ( x 0 + Δ x ) − f ( x 0 ) , 也称为一阶差分 , Δ f ( x 0 + Δ x ) = f ( ( x 0 + Δ x ) + Δ x ) − f ( x 0 + Δ x ) , Δ f ( x 0 + 2 Δ x ) = f ( x 0 + 3 Δ x ) − f ( x 0 + 2 Δ x ) \begin{aligned} & \Delta f\left(x_0\right)=f\left(x_0+\Delta x\right)-f\left(x_0\right) , \text { 也称为一阶差分 } , \\ & \Delta f\left(x_0+\Delta x\right)=f\left((x_0+ \Delta x )+ \Delta x\right)-f\left(x_0+\Delta x\right) , \\ & \Delta f\left(x_0+2 \Delta x\right)=f\left(x_0+3 \Delta x\right)-f\left(x_0+2 \Delta x\right) \end{aligned} Δf(x0)=f(x0+Δx)f(x0) 也称为一阶差分 Δf(x0+Δx)=f((x0+Δx)+Δx)f(x0+Δx)Δf(x0+x)=f(x0+x)f(x0+x)

进一步令:
Δ 2 f ( x 0 ) = Δ f ( x 0 + Δ x ) − Δ f ( x 0 ) \Delta^2 f\left(x_0\right)=\Delta f\left(x_0+\Delta x\right)-\Delta f\left(x_0\right) Δ2f(x0)=Δf(x0+Δx)Δf(x0) ,也称为二阶差分 (为一阶差分的差分) Δ 3 f ( x 0 ) = Δ 2 f ( x 0 + Δ x ) − Δ 2 f ( x 0 ) \Delta^3 f\left(x_0\right)=\Delta^2 f\left(x_0+\Delta x\right)-\Delta^2 f\left(x_0\right) Δ3f(x0)=Δ2f(x0+Δx)Δ2f(x0) ,也称为三阶差分。

做了这些假设之后我们来看看之前提到的 b 1 b_1 b1 会变成什么样子:
b 1 = f ( x 1 ) − f ( x 0 ) x 1 − x 0 ⟹ b 1 = Δ f ( x 0 ) Δ x b_1=\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0} \Longrightarrow b 1=\frac{\Delta f\left(x_0\right)}{{\Delta x}} b1=x1x0f(x1)f(x0)b1=ΔxΔf(x0)
f 1 ( x ) f_1(x) f1(x) 会变成:
f 1 ( x ) = f ( x 0 ) + f ( x 1 ) − f ( x 0 ) x 1 − x 0 ( x − x 0 ) ⟹ f 1 ( x ) = f ( x 0 ) + Δ f ( x 0 ) Δ x ( x − x ) f_1(x)=f\left(x_0\right)+\frac{f\left(x_1\right)-f\left(x_0\right)}{x_1-x_0}\left(x-x_0\right) \Longrightarrow f_1(x)=f\left(x_0\right)+\frac{\Delta f\left(x_0\right)}{\Delta x}(x-x) f1(x)=f(x0)+x1x0f(x1)f(x0)(xx0)f1(x)=f(x0)+ΔxΔf(x0)(xx)

同样的 f 2 ( x ) f_2(x) f2(x) 就变成了:
f 2 ( x ) = f ( x 0 ) + Δ f ( x 0 ) Δ x 0 ( x − x 0 ) + Δ 2 f ( x 0 ) 2 ( Δ x ) 2 ( x − x 0 ) ( x − x 1 ) Δ 2 f ( x 0 ) = Δ f ( x 0 + Δ x ) − Δ f ( x 0 ) = f ( x 0 + 2 Δ x ) − f ( x 0 + Δ x ) − [ f ( x 0 + Δ x ) − f ( x 0 ) ] f_2(x)=f\left(x_0\right)+\frac{\Delta f\left(x_0\right)}{\Delta x_0}\left(x-x_0\right)+\frac{\Delta^2 f\left(x_0\right)}{2 (\Delta x)^2}\left(x-x_0\right)\left(x-x_1\right)\\ \Delta^2 f\left(x_0\right)=\Delta f(x_0+\Delta x)- \Delta f(x_0)=f(x_0+2\Delta x)-f(x_0+\Delta x)-[f(x_0+\Delta x)-f(x_0 )] f2(x)=f(x0)+Δx0Δf(x0)(xx0)+2(Δx)2Δ2f(x0)(xx0)(xx1)Δ2f(x0)=Δf(x0+Δx)Δf(x0)=f(x0+x)f(x0+Δx)[f(x0+Δx)f(x0)]

泰勒断言,当 Δ x = 0 \Delta x=0 Δx=0 时:
f 1 ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f 1 ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 \begin{gathered} f_1(x)=f\left(x_0\right)+f^{\prime}\left(x_0\right)\left(x-x_0\right) \\ f_1(x)=f\left(x_0\right)+f^{\prime}\left(x_0\right)\left(x-x_0\right)+\frac{f^{\prime \prime}\left(x_0\right)}{2 !}\left(x-x_0\right)^2 \end{gathered} f1(x)=f(x0)+f(x0)(xx0)f1(x)=f(x0)+f(x0)(xx0)+2!f′′(x0)(xx0)2
( Δ x = 0 \left(\Delta x=0\right. (Δx=0 时由于 x 1 = x 0 + Δ x x_1=x_0+\Delta x x1=x0+Δx x − x 1 = x − x 0 ) \left.x-x_1=x-x_0\right) xx1=xx0)
以此类推泰勒就得到了大名鼎鼎的泰勒公式:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ f(x)=f\left(x_0\right)+f^{\prime}\left(x_0\right)\left(x-x_0\right)+\frac{f^{\prime \prime}\left(x_0\right)}{2 !}\left(x-x_0\right)^2+\cdots f(x)=f(x0)+f(x0)(xx0)+2!f′′(x0)(xx0)2+

梯度下降法

梯度下降法其实可以泰勒公式来表示。假设要最小化损失函数L(w), 我们知道,梯度下降法的过程为:

  • 选取初始值 w 0 w^0 w0
  • 迭代更新 w t + 1 = w t − η L ′ ( w ) w^{t+1}=w^{t}-\eta L^{\prime}(w) wt+1=wtηL(w),其中 η 为学习率 \eta 为学习率 η为学习率 w t + 1 w^{t+1} wt+1表示第t轮迭代得到的参数

用泰勒公式在 w t w^t wt处一阶展开则可以表示为
L ( w t + 1 ) = L ( w t ) + L ′ ( w t ) ( w t + 1 − w t ) + R ≈ L ( w t ) + L ′ ( w t ) ( w t + 1 − w t ) = L ( w t ) + η v L ′ ( w t ) \begin{aligned} L\left(w^{t+1}\right) & =L\left(w^t\right)+L^{\prime}\left(w^t\right)\left(w^{t+1}-w^t\right)+R \\ & \approx L\left(w^t\right)+L^{\prime}\left(w^t\right)\left(w^{t+1}-w^t\right) \\ & =L\left(w^t\right)+\eta v L^{\prime}\left(w^t\right) \end{aligned} L(wt+1)=L(wt)+L(wt)(wt+1wt)+RL(wt)+L(wt)(wt+1wt)=L(wt)+ηvL(wt)
其中: R R R 为残差项,当 ( w t + 1 − w t ) \left(w^{t+1}-w^t\right) (wt+1wt) 较小的时候, R ≈ 0 R \approx 0 R0 w t + 1 − w t = η v , η w^{t+1}-w^t=\eta v, \eta wt+1wt=ηv,η 为学习率, v v v 则为单位向量

要使得迭代后损失函数变小,即 L ( w t + 1 ) < L ( w t ) L\left(w^{t+1}\right)<L\left(w^t\right) L(wt+1)<L(wt) ,回想向量相乘的公式, ∥ v ∥ ⋅ ∥ L ′ ( w t ) ∥ ⋅ cos ⁡ θ \|v\| \cdot\left\|L^{\prime}\left(w^t\right)\right\| \cdot \cos \theta vL(wt)cosθ ,则我们可以令 v \mathrm{v} v L ′ ( w t ) L^{\prime}\left(w^t\right) L(wt) 反向,这样可以让他们向量乘积最小,于是
v = − L ′ ( w t ) ∥ L ′ ( w t ) ∥ v=-\frac{L^{\prime}\left(w^t\right)}{\left\|L^{\prime}\left(w^t\right)\right\|} v=L(wt)L(wt)

于是
w t + 1 = w t − η L ′ ( w t ) ∥ L ′ ( w t ) ∥ w^{t+1}=w^t-\eta \frac{L^{\prime}\left(w^t\right)}{\left\|L^{\prime}\left(w^t\right)\right\|} wt+1=wtηL(wt)L(wt)

又因为 ∥ L ′ ( w t ) ∥ \left\|L^{\prime}\left(w^t\right)\right\| L(wt) 为标量,可以并入 η \eta η 中,即简化为:
w t + 1 = w t − η L ′ ( w t ) w^{t+1}=w^t-\eta L^{\prime}\left(w^t\right) wt+1=wtηL(wt)

牛顿法

牛顿法其实是泰勒公式在 w t w^t wt 处二阶展开,即
L ( w t + 1 ) ≈ L ( w t ) + L ′ ( w t ) ( w t + 1 − w t ) + L ′ ′ ( w t ) 2 ( w t + 1 − w t ) 2 L\left(w^{t+1}\right) \approx L\left(w^t\right)+L^{\prime}\left(w^t\right)\left(w^{t+1}-w^t\right)+\frac{L^{\prime \prime}\left(w^t\right)}{2}\left(w^{t+1}-w^t\right)^2 L(wt+1)L(wt)+L(wt)(wt+1wt)+2L′′(wt)(wt+1wt)2

假设参数 w w w= ( w 1 , w 2 , . . . , w t , . . ) T (w^1,w^2,...,w^t,..)^T (w1,w2,...,wt,..)T 为一维向量,若 L ( w t + 1 ) L\left(w^{t+1}\right) L(wt+1) 为极小值,必然有其一阶导数为 0 ,因此可以让 L L L w t + 1 w^{t+1} wt+1 求偏导得
∂ L ∂ w t + 1 = L ′ ( w t ) + ( w t + 1 − w t ) L ′ ′ ( w t ) \frac{\partial L}{\partial w^{t+1}}=L^{\prime}\left(w^t\right)+\left(w^{t+1}-w^t\right) L^{\prime \prime}\left(w^t\right) wt+1L=L(wt)+(wt+1wt)L′′(wt)

令偏导为 0 ,可得:
w t + 1 = w t − L ′ ( w t ) L ′ ′ ( w t ) w^{t+1}=w^t-\frac{L^{\prime}\left(w^t\right)}{L^{\prime \prime}\left(w^t\right)} wt+1=wtL′′(wt)L(wt)

如果扩展到高维,即w为向量,则
w t + 1 = w t − H − 1 g H  为海森矩阵,  g = L ′ ( w t ) w^{t+1}=w^t-H^{-1} g \quad H \text { 为海森矩阵, } g=L^{\prime}\left(w^t\right) wt+1=wtH1gH 为海森矩阵g=L(wt)

牛顿法和梯度下降法对比

梯度下降法只利用到了目标函数的一阶偏导数信息,以负梯度方向作为搜索方向,只考虑目标函数在迭代点的局部性质。

而牛顿法不仅使用目标函数的一阶偏导数,还进一步利用了目标函数的二阶偏导数,这样就考虑了梯度变化的趋势,因而能更全面的确定合适的搜索方向以加快收敛。但牛顿法主要有一下两个缺点:

  • 对目标函数有严格的要求,函数必须有连续的一、二阶偏导(二阶泰勒展开要求该区间内存在连续二阶导数,同时二阶泰勒展开会用一阶导,所以也要求一阶偏导数连续,否则二阶导数无法求极限),海森矩阵必须正定(一个矩阵是正定的,意味着对于所有非零向量x,都有 x T H x > 0 x^THx>0 xTHx>0。在优化问题中,这表明函数在该点附近是凸的,即该点是局部极小值)。
  • 计算相当复杂,除需计算梯度以外,还需计算二阶偏导数矩阵和它的逆矩阵,计算量和空间消耗比较大。

XGBoost

在有监督学习中,可以分为:模型,参数 、目标函数和学习方法

  • 模型即给定输入xi如何预测输出yi,而这个y可以很多种形式,如回归,概率,类别、排序等

  • 参数即比如线性回归的w

  • 目标函数可以分为损失函数+正则: Obj ⁡ ( Θ ) = L ( Θ ) + Ω ( Θ ) \operatorname{Obj}(\Theta)=L(\Theta)+\Omega(\Theta) Obj(Θ)=L(Θ)+Ω(Θ)

    • 损失函数:如平方误差等,告诉我们模型拟合数据的情况。 => Bias

    • 正则项:惩罚复杂的模型,鼓励简单的模型。 => Variance

      L1正则化通过惩罚模型参数的绝对值来工作。这导致模型参数中的一些变成零,从而产生一个稀疏模型。通过减少模型中非零参数的数量,L1正则化可以减少模型的复杂性和方差;L2正则化通过惩罚模型参数的平方和来工作。这种方法倾向于均匀地减小所有参数的值[5** 2减小为2**2】,从而使模型变得不那么敏感于输入数据的小波动,降低了方差)

  • 模型学习方法即解决给定目标函数后怎么学的问题。

在XGBoost中:

  • 模型学习:定义目标函数,然后优化目标函数

  • 目标函数(XGBoost中目标函数是针对一棵树的目标函数,而不是针对一个样本或一整个算法的目标函数。并且,任意树的目标函数都包括三大部分:损失函数 l l l、叶子数量 T T T以及正则项): Obj ⁡ ( Θ ) = ∑ i = 1 N l ( y i , y ^ i ) + ∑ j = 1 t Ω ( f j ) , f j ∈ F \operatorname{Obj}(\Theta)=\sum_{i=1}^N l\left(y_i, \hat{y}_i\right)+\sum_{j=1}^t \Omega\left(f_j\right), \quad f_j \in \mathcal{F} Obj(Θ)=i=1Nl(yi,y^i)+j=1tΩ(fj),fjF

    由于f是树,而不是连续数值型的向量,所以不能用梯度下降法,可以通过前向分步算法,即贪心法找到局部最优解: y ^ i ( t ) = ∑ j = 1 t f j ( x i ) = y ^ i ( t − 1 ) + f t ( x i ) \hat{y}_i^{(t)}=\sum_{j=1}^t f_j\left(x_i\right)=\hat{y}_i^{(t-1)}+f_t\left(x_i\right) y^i(t)=j=1tfj(xi)=y^i(t1)+ft(xi)

    所以目标函数可以写成

    O b j ( t ) = ∑ i = 1 N l ( y i , y ^ i ( t ) ) + ∑ j = 1 t Ω ( f j ) = ∑ i = 1 N l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) +  constant  ≈ ∑ i = 1 N l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) \begin{aligned} O b j^{(t)} & =\sum_{i=1}^N l\left(y_i, \hat{y}_i^{(t)}\right)+\sum_{j=1}^t \Omega\left(f_j\right) \\ & =\sum_{i=1}^N l\left(y_i, \hat{y}_i^{(t-1)}+f_t\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right)+\text { constant }\\ &\approx \sum_{i=1}^{N}l\left(y_i, \hat{y}_i^{(t-1)}+f_t\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right) \end{aligned} Obj(t)=i=1Nl(yi,y^i(t))+j=1tΩ(fj)=i=1Nl(yi,y^i(t1)+ft(xi))+Ω(ft)+ constant i=1Nl(yi,y^i(t1)+ft(xi))+Ω(ft)

    第t轮训练时,前面的t-1轮的正则项都相当于常数,可以不做考虑,但是损失函数不满足 l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) = l ( y i , y ^ i ( t − 1 ) ) + l ( y i , f t ( x i ) ) l(y_i, \hat y_i^{(t-1)}+f_t(x_i))=l(y_i, \hat y_i^{(t-1)})+l(y_i,f_t(x_i)) l(yi,y^i(t1)+ft(xi))=l(yi,y^i(t1))+l(yi,ft(xi))

    假设损失函数使用的是平方损失,则上式可以写成

    O b j ( t ) = ∑ i = 1 N ( y i − ( y ^ i ( t − 1 ) + f t ( x i ) ) ) 2 + Ω ( f t ) = ∑ i = 1 N ( y i − y ^ i ( t − 1 ) ⏟ 残差  − f t ( x i ) ) 2 + Ω ( f t ) \begin{aligned} O b j^{(t)} & =\sum_{i=1}^N\left(y_i-\left(\hat{y}_i^{(t-1)}+f_t\left(\mathbf{x}_{\mathbf{i}}\right)\right)\right)^2+\Omega\left(f_t\right) \\ & =\sum_{i=1}^N(\underbrace{y_i-\hat{y}_i^{(t-1)}}_{\text {残差 }}-f_t\left(\mathbf{x}_{\mathbf{i}}\right))^2+\Omega\left(f_t\right)\end{aligned} Obj(t)=i=1N(yi(y^i(t1)+ft(xi)))2+Ω(ft)=i=1N(残差  yiy^i(t1)ft(xi))2+Ω(ft)

    对于一般的损失函数,可以对目标函数进行二阶泰勒展开

    O b j ( t ) = ∑ i = 1 N l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) = ∑ i = 1 N ( l ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ) + Ω ( f t )  其中,  g i = ∂ l ( y i , y ^ i ) ∂ y ^ i ∣ y ^ i = y ^ i ( t − 1 ) , h i = ∂ 2 l ( y i , y ^ i ) ∂ 2 y ^ i ∣ y ^ i = y ^ i ( t − 1 ) \begin{aligned} O b j^{(t)} & =\sum_{i=1}^N l\left(y_i, \hat{y}_i^{(t-1)}+f_t\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right) \\ & =\sum_{i=1}^N\left(l\left(y_i, \hat{y}_i^{(t-1)}\right)+g_i f_t\left(\mathbf{x}_{\mathbf{i}}\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right) \\ & \text { 其中, } g_i=\frac{\partial l\left(y_i, \hat{y}_i\right)}{\partial \hat{y}_i}|_{\hat{y}_i=\hat{y}_i^{(t-1)}}, h_i=\frac{\partial^2 l\left(y_i, \hat{y}_i\right)}{\partial^2 \hat{y}_i}|_{\hat{y}_i=\hat{y}_i^{(t-1)}}\end{aligned} Obj(t)=i=1Nl(yi,y^i(t1)+ft(xi))+Ω(ft)=i=1N(l(yi,y^i(t1))+gift(xi)+21hift2(xi))+Ω(ft) 其中gi=y^il(yi,y^i)y^i=y^i(t1),hi=2y^i2l(yi,y^i)y^i=y^i(t1)

  • 正则项:

    • XGBoost采用衡量树复杂度的方式为:一棵树里面叶子节点的个数T,以及每棵树叶子节点上面输出分数w的平方和(相当于L2正则)

      Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega\left(f_t\right)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^T w_j^2 Ω(ft)=γT+21λj=1Twj2

      v2-820fc93355ffaea9e530c5057f83deb7_1440w

    将损失函数和正则项结合得到 O b j ( t ) = ∑ i = 1 N ( g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ) ⏟ 对样本累加  + γ T + 1 2 λ ∑ j = 1 T w j 2 ⏟ 对叶结点累加  O b j^{(t)}=\underbrace{\sum_{i=1}^N\left(g_i f_t\left(\mathbf{x}_{\mathbf{i}}\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_{\mathbf{i}}\right)\right)}_{\text {对样本累加 }}+\gamma T+\frac{1}{2} \lambda \underbrace{\sum_{j=1}^T w_j^2}_{\text {对叶结点累加 }} Obj(t)=对样本累加  i=1N(gift(xi)+21hift2(xi))+γT+21λ对叶结点累加  j=1Twj2

    前后求和符合上下限要保持一致,将各个样本的损失函数映射到各个叶节点上,此处定义q函数将输入x映射到某个叶节点上,即

    f t ( x ) = w q ( x ) ( 表示树各叶子结点的权重 ) ,把 x 看成一个向量 ) ,同时定义每个叶子节点 j 上的样本集合 ( 样本 x i 在第 j 个叶子节点上 ) 为 I j = { i ∣ q ( x i ) = j } f_t(x)=w_{q(x)}(表示树各叶子结点的权重),把x看成一个向量),同时定义每个叶子节点j上的样本集合(样本x_i在第j个叶子节点上)为\\I_j=\left\{i \mid q\left(x_i\right)=j\right\} ft(x)=wq(x)(表示树各叶子结点的权重),把x看成一个向量),同时定义每个叶子节点j上的样本集合(样本xi在第j个叶子节点上)Ij={iq(xi)=j}

    则目标函数可以写成

    O b j ( t ) = ∑ i = 1 N ( g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ) + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ i = 1 N ( g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ) + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T ( ∑ i ∈ I j g i w j + 1 2 ∑ i ∈ I j h i w j 2 ) + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T ( G j w j + 1 2 ( H j + λ ) w j 2 ) + γ T \begin{aligned} O b j^{(t)} & =\sum_{i=1}^N\left(g_i f_t\left(\mathbf{x}_{\mathbf{i}}\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^T w_j^2 \\ & =\sum_{i=1}^N\left(g_i w_{q\left(\mathbf{x}_{\mathbf{i}}\right)}+\frac{1}{2} h_i w_{q\left(\mathbf{x}_{\mathbf{i}}\right)}^2\right)+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^T w_j^2 \\ & =\sum_{j=1}^T\left(\sum_{i \in I_j} g_i w_j+\frac{1}{2} \sum_{i \in I_j} h_i w_j^2\right)+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^T w_j^2 \\ & =\sum_{j=1}^T\left(G_j w_j+\frac{1}{2}\left(H_j+\lambda\right) w_j^2\right)+\gamma T\end{aligned} Obj(t)=i=1N(gift(xi)+21hift2(xi))+γT+21λj=1Twj2=i=1N(giwq(xi)+21hiwq(xi)2)+γT+21λj=1Twj2=j=1T iIjgiwj+21iIjhiwj2 +γT+21λj=1Twj2=j=1T(Gjwj+21(Hj+λ)wj2)+γT

    其中 G j = ∑ i ∈ I j g i , H j = ∑ i ∈ I j h i G_j=\sum_{i \in I_j}g_i, H_j=\sum_{i \in I_j}h_i Gj=iIjgi,Hj=iIjhi

现在要做的是两件事:

  1. 确定树的结构, 这样这一轮的目标函数(也就是变量T)就确定了下来;
  2. 求使得当前这一轮(第t轮)的目标函数最小的叶结点分数w。(Obj代表了当我们指定一个树的结构的时候,我们在目标上面最多减少多少,也称为结构分数,structure score)

假设已经知道了树的结构,那么第2件事情是十分简单的,直接对w求导,使得导数为0,就得到每个叶结点的预测分数为: w j = − b 2 a = − G j H j + λ , 则此时目标函数取到最小值 w_j=-\frac{b}{2a}=-\frac{G_j}{H_j+ \lambda},则此时目标函数取到最小值 wj=2ab=Hj+λGj,则此时目标函数取到最小值
O b j ( t ) = ∑ j = 1 T ( G j w j + 1 2 ( H j + λ ) w j 2 ) + γ T = ∑ j = 1 T ( − G j 2 H j + λ + 1 2 G j 2 H j + λ ) + γ T = − 1 2 ∑ j = 1 T ( G j 2 H j + λ ) + γ T \begin{aligned} O b j^{(t)} & =\sum_{j=1}^T\left(G_j w_j+\frac{1}{2}\left(H_j+\lambda\right) w_j^2\right)+\gamma T \\ & =\sum_{j=1}^T\left(-\frac{G_j^2}{H_j+\lambda}+\frac{1}{2} \frac{G_j^2}{H_j+\lambda}\right)+\gamma T \\ & =-\frac{1}{2} \sum_{j=1}^T\left(\frac{G_j^2}{H_j+\lambda}\right)+\gamma T \end{aligned} Obj(t)=j=1T(Gjwj+21(Hj+λ)wj2)+γT=j=1T(Hj+λGj2+21Hj+λGj2)+γT=21j=1T(Hj+λGj2)+γT
XGBoost-structure-score-calculation

总结推导流程

v2-def00357a06b469b6144d6acb8ab75a9_1440w

基本流程分析:

假设现有数据集 N N N,含有形如 ( x i , y i ) (x_i,y_i) (xi,yi)的样本 M M M个, i i i为任意样本的编号,单一样本的损失函数为 l ( y i , H ( x i ) ) l(y_i,H(x_i)) l(yi,H(xi)),其中 H ( x i ) H(x_i) H(xi) i i i号样本在集成算法上的预测结果,整个算法的损失函数为 L ( y , H ( x ) ) L(y,H(x)) L(y,H(x)),且总损失等于全部样本的损失之和: L ( y , H ( x ) ) = ∑ i l ( y i , H ( x i ) ) L(y,H(x)) = \sum_i l(y_i,H(x_i)) L(y,H(x))=il(yi,H(xi))。目标函数中使用L2正则化( α \alpha α为0),并且 γ \gamma γ不为0。

同时,弱评估器为回归树 f f f,总共学习 K K K轮(注意在GBDT当中我们使用的是大写字母T来表示迭代次数,由于在XGBoost当中字母T被用于表示目标函数中的叶子总量,因此我们在这里使用字母K表示迭代次数)

  • 1) 初始化

    考虑到XGBoost在许多方面继承了梯度提升树GBDT的思想,我们可以使用公式来计算XGBoost的 H 0 H_0 H0
    H 0 ( x ) = a r g m i n C ∑ i = 1 M l ( y i , C ) = a r g m i n C L ( y , C ) \begin{aligned} H_0(x) &= \mathop{argmin}_{C} \sum_{i=1}^M l(y_i,C)\\ \\ &= \mathop{argmin}_{C} L(y,C) \end{aligned} H0(x)=argminCi=1Ml(yi,C)=argminCL(y,C)

开始循环,for k in 1,2,3…K:

  • 2) 抽样

    在现有数据集 N N N中,抽样 M M M * subsample个样本,构成训练集 N k N^k Nk(subsample:抽样比)

  • 3) 求拟合项

    对任意一个样本 i i i,计算一阶导数 g i k g_{ik} gik,二阶导数 h i k h_{ik} hik,以及伪残差(pseudo-residuals) r i k r_{ik} rik,具体公式为:

    g i k = ∂ l ( y i , H ( x i ) ) ∂ H ( x i ) ∣ H ( x i ) = H k − 1 ( x i ) g_{ik} = \frac{\partial{l(y_i,H(x_i))}}{\partial{H(x_i)}}|_{H(x_i)=H_{k-1}(x_i)} gik=H(xi)l(yi,H(xi))H(xi)=Hk1(xi)
    h i k = ∂ 2 l ( y i , H ( x i ) ) ∂ H 2 ( x i ) ∣ H ( x i ) = H k − 1 ( x i ) h_{ik} = \frac{\partial^2{l(y_i,H(x_i))}}{\partial{H^2(x_i)}}|_{H(x_i)=H_{k-1}(x_i)} hik=H2(xi)2l(yi,H(xi))H(xi)=Hk1(xi)
    r i k = − g i k h i k r_{ik} = -\frac{g_{ik}}{h_{ik}} rik=hikgik

证明 r i k r_{ik} rik:
∑ i = 1 N ( g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ) + Ω ( f t ) = ∑ i = 1 N 1 2 h i ( 2 g i h i f t ( x i ) + f t 2 ( x i ) ) + Ω ( f t ) = ∑ i = 1 N 1 2 h i ( g i 2 h i 2 + 2 g i h i f t ( x i ) + f t 2 ( x i ) ) + Ω ( f t ) = ∑ i = 1 N 1 2 h i ( f t ( x i ) − ( − g i h i ) ) 2 + Ω ( f t ) ( Ω 可忽略 , 下面会解释 ) \begin{aligned} & \sum_{i=1}^N\left(g_i f_t\left(\mathbf{x}_{\mathbf{i}}\right)+\frac{1}{2} h_i f_t^2\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right) \\ = & \sum_{i=1}^N \frac{1}{2} h_i\left(2 \frac{g_i}{h_i} f_t\left(\mathbf{x}_{\mathbf{i}}\right)+f_t^2\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right) \\ = & \sum_{i=1}^N \frac{1}{2} h_i\left(\frac{g_i^2}{h_i^2}+2 \frac{g_i}{h_i} f_t\left(\mathbf{x}_{\mathbf{i}}\right)+f_t^2\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\Omega\left(f_t\right) \\ = & \sum_{i=1}^N \frac{1}{2} h_i\left(f_t\left(\mathbf{x}_{\mathbf{i}}\right)-\left(-\frac{g_i}{h_i}\right)\right)^2+\Omega\left(f_t\right)(\Omega可忽略,下面会解释)\end{aligned} ===i=1N(gift(xi)+21hift2(xi))+Ω(ft)i=1N21hi(2higift(xi)+ft2(xi))+Ω(ft)i=1N21hi(hi2gi2+2higift(xi)+ft2(xi))+Ω(ft)i=1N21hi(ft(xi)(higi))2+Ω(ft)(Ω可忽略,下面会解释)

目标函数 = ∑ j = 1 T ( w j ∑ i ∈ j g i + 1 2 w j 2 ( ∑ i ∈ j h i + λ ) ) + γ T \begin{aligned} 目标函数 &= \sum_{j=1}^T \left( \boldsymbol{\color{red}{w_j\sum_{i \in j} g_i + \frac{1}{2}w^2_j(\sum_{i \in j} h_i + \lambda)}} \right) + \gamma T\end{aligned} 目标函数=j=1T wjijgi+21wj2(ijhi+λ) +γT

将标注为红色的部分命名为 μ j \mu_j μj

对任意位于叶子 j j j上的样本 i i i来说

μ i = w j g i + 1 2 w j 2 ( h i + λ ) \mu_i = w_jg_i + \frac{1}{2}w^2_j(h_i+\lambda) μi=wjgi+21wj2(hi+λ)

将一片叶子上的 μ j \mu_j μj转变成 μ i \mu_i μi(i:叶子节点上的某个样本)时,原则上需要将 μ j \mu_j μj中的每一项都转换为单个样本所对应的项,然而在转换正则项时则存在问题:与 ∑ i ∈ j g i \sum_{i \in j} g_i ijgi(可以直接指向单个样本的项)不同, λ \lambda λ是针对与一片叶子设置的值,如果要将 λ \lambda λ转变为针对单一样本的正则项,则需要知道当前叶子上一共有多少样本。然而,拟合发生在建树之前(在算法流程中拟合步骤在建树步骤之前),因此在这一时间点不可能知道一片叶子上的样本总量,因此在xgboost的实际实现过程当中,拟合每一片叶子时不涉及正则项,只有在计算结构分数与叶子输出值时才使用正则项。

μ i \mu_i μi上唯一的自变量 w j w_j wj求导,则有:

∂ μ i ∂ w j = ∂ ( w j g i + 1 2 w j 2 h i ) ∂ w j = g i + w j h i \begin{aligned}\frac{\partial{\mu_i}}{\partial w_j} &= \frac{\partial{\left( w_jg_i + \frac{1}{2}w^2_jh_i \right)}}{\partial w_j} \\ \\ &= g_i + w_jh_i\end{aligned} wjμi=wj(wjgi+21wj2hi)=gi+wjhi

令一阶导数为0,则有:

g i + w j h i = 0 w j h i = − g i w j = − g i h i \begin{aligned} g_i + w_jh_i &= 0 \\ \\ w_jh_i &= - g_i \\ \\ w_j &= -\frac{g_i}{h_i} \end{aligned} gi+wjhiwjhiwj=0=gi=higi

对任意样本 i i i而言,令目标函数最小的最优 w j w_j wj就是我们的伪残差 r i r_i ri,也就是XGBoost数学流程当中用于进行拟合的拟合值

  • 4) 建树

求解出伪残差后,在数据集 ( x i , r i k ) (x_i, r_{ik}) (xi,rik)上按colsample_by*(这个是sklearn的超参数,在xgboost代码章节中会讲到)规则进行抽样,再按照结构分数增益规则建立一棵回归树 f k f_k fk。注意在这个过程中,训练时拟合的标签为样本的伪残差 r i k r_{ik} rik,并且叶子节点 j j j的结构分数和任意分枝时的结构分数增益的公式为: S c o r e j = ( ∑ i ∈ j g i ) 2 ∑ i ∈ j h i + λ Score_j = \frac{(\sum_{i \in j}g_i)^2}{\sum_{i \in j}h_i + \lambda} Scorej=ijhi+λ(ijgi)2

G a i n = 1 2 ( ( ∑ i ∈ L g i ) 2 ∑ i ∈ L h i + λ + ( ∑ i ∈ R g i ) 2 ∑ i ∈ R h i + λ − ( ∑ i ∈ P g i ) 2 ∑ i ∈ P h i + λ ) − γ Gain = \frac{1}{2} \left( \frac{(\sum_{i \in L}g_i)^2}{\sum_{i \in L}h_i + \lambda} + \frac{(\sum_{i \in R}g_i)^2}{\sum_{i \in R}h_i + \lambda} - \frac{(\sum_{i \in P}g_i)^2}{\sum_{i \in P}h_i + \lambda} \right) - \gamma Gain=21(iLhi+λ(iLgi)2+iRhi+λ(iRgi)2iPhi+λ(iPgi)2)γ

建树过程不影响任何 g i k g_{ik} gik h i k h_{ik} hik的值。

  • 5) 输出树上的结果

建树之后,依据回归树 f k f_k fk的结构输出叶子节点上的输出值(预测值)。对任意叶子节点 j j j来说,输出值为:
w j = − ∑ i ∈ j g i k ∑ i ∈ j h i k + λ w_j = -\frac{\sum_{i \in j}g_{ik}}{\sum_{i \in j}h_{ik} + \lambda} wj=ijhik+λijgik

假设样本 i i i被分割到叶子 j j j上,则有:
f k ( x i ) = w j f_k(x_i) = w_j fk(xi)=wj

思考:在迭代刚开始时我们已经知道了输出值式子中所需的所有 g g g h h h。为什么还要建树呢?

只有当我们建立了决策树,我们才能够知道具体哪些样本 i i i在叶子节点 j j j上。因此树 f k f_k fk提供的是结构信息

  • 6) 迭代
    根据预测结果 f k ( x i ) f_k(x_i) fk(xi)迭代模型,具体来说:
    H k ( x i ) = H k − 1 ( x i ) + f k ( x i ) H_k(x_i) = H_{k-1}(x_i) + f_k(x_i) Hk(xi)=Hk1(xi)+fk(xi)
    假设输入的步长为 η \eta η,则 H k ( x ) H_k(x) Hk(x)应该为:
    H k ( x i ) = H k − 1 ( x i ) + η f k ( x i ) H_k(x_i) = H_{k-1}(x_i) + \eta f_k(x_i) Hk(xi)=Hk1(xi)+ηfk(xi)
    对整个算法则有:
    H k ( x ) = H k − 1 ( x ) + η f k ( x ) H_k(x) = H_{k-1}(x) + \eta f_k(x) Hk(x)=Hk1(x)+ηfk(x)

  • 7) 循环结束

    输出 H K ( x ) H_K(x) HK(x)的值作为集成模型的输出值。

参考资料:

  1. https://www.matongxue.com/madocs/7/
  2. https://www.matongxue.com/madocs/126/
  3. 菜菜九天机器学习课程
  4. https://www.hrwhisper.me/machine-learning-xgboost/
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值