{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# %load /Users/facai/Study/book_notes/preconfig.py\n", "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set(color_codes=True)\n", "sns.set(font='SimHei')\n", "plt.rcParams['axes.grid'] = False\n", "\n", "from IPython.display import SVG\n", "\n", "def show_image(filename, figsize=None):\n", " if figsize:\n", " plt.figure(figsize=figsize)\n", "\n", " plt.imshow(plt.imread(filename))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "TreeBoost原理和实现(sklearn)简介\n", "===========================" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 0. 前言\n", "\n", "TreeBoost是对GBDT做了更深一步的优化,主要贡献在将整颗树的全局权重值细化到每片叶子的局部权重值。它不像xgboost在树生长时就做出指导,而是在树生长后再修正叶子值。对于工程中的GBDT模块,spark目前是传统的Gradient Boosting,而sklearn采用了TreeBoost,所以本文以sklearn为例进行说明。\n", "\n", "本文假设读者已经了解GBDT的基本原理。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "sklearn代码版本:\n", "\n", "```sh\n", "~/W/s/sklearn ❯❯❯ git log -n 1\n", "commit d161bfaa1a42da75f4940464f7f1c524ef53484f\n", "Author: John B Nelson \n", "Date: Thu May 26 18:36:37 2016 -0400\n", "\n", " Add missing double quote (#6831)\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "GBDT模块位于`sklearn/ensemble/gradient_boosting.py`文件,类的关系比较简单。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "GradientBoostingRegressor+apply()+predict()+staged_predict()GradientBoostingClassifier+predict()+predict_proba()+staged_predict()+staged_predict_proba()BaseGradientBoosting+apply()+fit()+_fit_stages()+_fit_stage()+feature_importances()BaseEstimatorQuantileEstimator+fit()+predict()MeanEstimator+fit()+predict()LogOddsEstimator+fit()+predict()ScaledLogOddsEstimatorPriorProbabilityEstimator+fit()+predict()ZeroEstimator+fit()+predict()LossFunction+__call__()+negative_gradient()+update_terminal_regions()+_update_terminal_region()RegressionLossFunctionLeastSquaresErrorLeastAbsoluteErrorHuberLossFunctionQuantileLossFunctionClassificationLossFunction+_score_to_proba()+_score_to_decision()BinomialDevicanceMultinomialDevianceExponentialLoss" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVG(\"./res/Main.svg\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. GBDT优化\n", "\n", "传统的Gradient Boost算法主要有四步:\n", "\n", "1. 对损失导数求偏导;\n", "2. 训练决策树,拟合偏导;\n", "3. 寻优模型权值;\n", "4. 将训练的模型,加到叠加模型中。\n", "\n", "可以用数学公式对应表述为[1]:\n", "\n", "+ $F_0(x) = \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N L(y_i, \\rho)$\n", "\n", "+ For $m=1$ to $M$ do:\n", " \n", " 1. $\\tilde{y} = - \\left [ \\frac{\\partial L (y_i, F(x_i))}{\\partial F(x_i)} \\right ]_{F(x) = F_{m-1}(x)}, \\quad i = 1, 2, \\dotsc, N$\n", " \n", " 2. $\\mathbf{a}_m = \\operatorname{arg \\, min}_{\\mathbf{a}, \\beta} \\displaystyle \\sum_{i=1}^N \\left [ \\tilde{y}_i - \\beta h(x_i; \\mathbf{a}) \\right ]^2$\n", " 3. $\\rho_m = \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N L \\left ( y_i, F_{m-1}(x_i) + \\rho h(x_i; \\mathbf{a}_m) \\right)$\n", " 4. $F_m(x) = F_{m-1}(x) + l_r \\rho_m h(x; \\mathbf{a}_m)$\n", " \n", "其中,$L$是损失函数, $l_r$是学习率,$\\rho$是模型的权值,$h(x_i; \\mathbf{a})$是决策树模型,$\\mathbf{a}$是树的参数,$F$是最终累加模型。\n", " \n", "利用一些数学方法和损失函数的特性,可以将第3步的权值寻优进行简化。在sklear中单步训练代码对应如下:\n", "\n", "```Python\n", " 748 def _fit_stage(self, i, X, y, y_pred, sample_weight, sample_mask,\n", " 749 random_state, X_idx_sorted, X_csc=None, X_csr=None):\n", " 750 \"\"\"Fit another stage of ``n_classes_`` trees to the boosting model. \"\"\"\n", " 751 #+-- 8 lines: assert sample_mask.dtype == np.bool----------\n", " 759\n", " 760 residual = loss.negative_gradient(y, y_pred, k=k,\n", " 761 sample_weight=sample_weight)\n", " 762\n", " 763 # induce regression tree on residuals\n", " 764 tree = DecisionTreeRegressor(\n", " 765 criterion='friedman_mse',\n", " 766 splitter='best',\n", " 767 #+--- 7 lines: max_depth=self.max_depth,------------------\n", " 774 presort=self.presort)\n", " 775\n", " 776 #+--- 8 lines: if self.subsample < 1.0:------------------\n", " 784 tree.fit(X, residual, sample_weight=sample_weight,\n", " 785 check_input=False, X_idx_sorted=X_idx_sorted)\n", " 786\n", " 787 # update tree leaves\n", " 788 #+-- 5 lines: if X_csr is not None:---------------------\n", " 793 loss.update_terminal_regions(tree.tree_, X, y, residual, y_pred,\n", " 794 sample_weight, sample_mask,\n", " 795 self.learning_rate, k=k)\n", " 796\n", " 797 # add tree to ensemble\n", " 798 self.estimators_[i, k] = tree\n", " 799\n", " 800 return y_pred\n", "```\n", "\n", "其中,\n", "\n", "+ 760L是求解偏导。\n", "+ 784L是生成决策树。注意,对于MSE,$\\beta=1$。765L树的评价函数是friedman_mse,它是MSE的变种。我猜测$\\beta$是一致的,后续有时间再深究。\n", "+ 793L是TreeBoost做的改进,将第3步寻优全局解$\\rho$转化到树内部,后面主要内容就在这。\n", "+ 798L是加回到累加模型。\n", "\n", "\n", "接下来,我们先就平方差和绝对值两种损失函数,对传统Gradient Boost方法进行第3步的优化,为后续TreeBoost铺路。\n", " \n", "[1]: Friedman - Greedy function approximation: A gradient boosting machine" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.0 Least squares regression\n", "\n", "这种损失函数定义是 $L(y, F) = \\frac{1}{2} (y - F)^2$,则其导数为$\\frac{\\partial L}{\\partial F} = -(y - F)$。将偏导代入到第1步有:\n", "\n", "\\begin{align}\n", " \\tilde{y} &= - \\left [ \\frac{\\partial L (y_i, F(x_i))}{\\partial F(x_i)} \\right ]_{F(x) = F_{m-1}(x)} \\\\\n", " &= y_i - F_{m-1}(x_i), \\quad i = 1, 2, \\dotsc, N \\\\\n", "\\end{align}\n", "\n", "将$L$和$\\tilde{y}$代入到第3步中,整理可得:\n", "\n", "\\begin{align}\n", " \\rho_m &= \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N L \\left ( y_i, F_{m-1}(x_i) + \\rho h(x_i; \\mathbf{a}_m) \\right) \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N \\frac{1}{2} \\left ( y_i - F_{m-1}(x_i) - \\rho h(x_i; \\mathbf{a}_m) \\right)^2 \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N \\frac{1}{2} \\left ( \\tilde{y}_i - \\rho h(x_i; \\mathbf{a}_m) \\right)^2 \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N \\left ( \\tilde{y}_i - \\rho h(x_i; \\mathbf{a}_m) \\right)^2 \\\\\n", " &= \\operatorname{arg \\, min}_\\beta \\displaystyle \\sum_{i=1}^N \\left ( \\tilde{y}_i - \\beta h(x_i; \\mathbf{a}_m) \\right)^2 \\quad \\text{符号替换}\\\\\n", " &= \\beta_m\n", "\\end{align}\n", "\n", "也就是说,对于平方差这种损失函数,它的最优权值就是第2步中指导决策树生成时的$\\beta$值。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "这个算法称为LS_Boost,具体过程为:\n", "\n", "+ $F_0(x) = \\bar{y}$\n", "\n", "+ For $m=1$ to $M$ do:\n", " 1. $\\tilde{y}_i = y_i - F_{m-1}(x_i), \\quad i=1, N$\n", " 2. $(\\rho_m, \\mathbf{a}_m) = \\operatorname{arg \\, min}_{\\mathbf{a}, \\rho} \\displaystyle \\sum_{i=1}^N \\left [ \\tilde{y}_i - \\rho h(x_i; \\mathbf{a}) \\right ]^2$\n", " 3. $F_m(x) = F_{m-1}(x) + l_r \\rho_m h(x; \\mathbf{a}_m)$\n", " \n", "sklearn中代码如下:\n", " \n", "```Python\n", " 274 class LeastSquaresError(RegressionLossFunction):\n", " 275 \"\"\"Loss function for least squares (LS) estimation.\n", " 276 Terminal regions need not to be updated for least squares. \"\"\"\n", " 277 def init_estimator(self):\n", " 278 return MeanEstimator()\n", " 279\n", " 280 def __call__(self, y, pred, sample_weight=None):\n", " 281 if sample_weight is None:\n", " 282 return np.mean((y - pred.ravel()) ** 2.0)\n", " 283 else:\n", " 284 return (1.0 / sample_weight.sum() *\n", " 285 np.sum(sample_weight * ((y - pred.ravel()) ** 2.0)))\n", " 286\n", " 287 def negative_gradient(self, y, pred, **kargs):\n", " 288 return y - pred.ravel()\n", " 289\n", " 290 def update_terminal_regions(self, tree, X, y, residual, y_pred,\n", " 291 sample_weight, sample_mask,\n", " 292 learning_rate=1.0, k=0):\n", " 293 \"\"\"Least squares does not need to update terminal regions.\n", " 294\n", " 295 But it has to update the predictions.\n", " 296 \"\"\"\n", " 297 # update predictions\n", " 298 y_pred[:, k] += learning_rate * tree.predict(X).ravel()\n", " 299\n", " 300 def _update_terminal_region(self, tree, terminal_regions, leaf, X, y,\n", " 301 residual, pred, sample_weight):\n", " 302 pass\n", "```\n", "\n", "前面说过sklearn中$\\beta=1$,则$l_r \\times \\beta = l_r$,所以`update_terminal_regions`这里直接用学习率和树预测值相乘。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.1 Least-absolute-deviation (LAD) regression\n", "\n", "损失函数定义为 $L(y, F) = | y - F |$,同样地,可以利用导数算出残差:\n", "\n", "\\begin{align}\n", " \\tilde{y} &= - \\left [ \\frac{\\partial L (y_i, F(x_i))}{\\partial F(x_i)} \\right ]_{F(x) = F_{m-1}(x)} \\\\\n", " &= \\operatorname{sign}(y_i - F_{m-1}(x_i))\\\\\n", "\\end{align}\n", "\n", "$L(y, F)$是分段函数,它的导数在正数区间恒为1,负数区间恒为-1,而在间段点$F=0$处是不可导的,人为规定为0,所以可以用sign函数来描述:\n", "\n", "\\begin{equation}\n", " \\operatorname{sign}(x) := {\n", " \\begin{cases}\n", " -1 & {\\text{if }} x<0, \\\\\n", " 0 & {\\text{if }} x=0, \\\\\n", " 1 & {\\text{if }} x>0.\n", " \\end{cases}\n", " }\n", "\\end{equation}\n", "\n", "\n", "同样的,将$L$和$\\tilde{y}$代入到第3步中,整理可得:\n", "\n", "\\begin{align}\n", " \\rho_m &= \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N L \\left ( y_i, F_{m-1}(x_i) + \\rho h(x_i; \\mathbf{a}_m) \\right) \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N \\big | y_i - F_{m-1}(x_i) - \\rho h(x_i; \\mathbf{a}_m) \\big | \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N \\big | h(x_i; \\mathbf{a}_m) \\big | \\cdot \\left | \\frac{y_i - F_{m-1}(x_i)}{h(x_i; \\mathbf{a}_m)} - \\rho \\right | \\\\\n", " &= \\operatorname{median}_W \\left \\{ \\frac{y_i - F_{m-1}(x_i)}{h(x_i; \\mathbf{a}_m)} \\right \\}_1^N, \\quad w_i = \\big | h(x_i; \\mathbf{a}_m) \\big |\n", "\\end{align}\n", "\n", "这里$\\operatorname{median}_W \\{ \\cdot \\}$是带权$w_i$的[weighted median](https://en.wikipedia.org/wiki/Weighted_median)。\n", "\n", "注意,weighted median的概念$\\operatorname{median}_W (x)$,这里的加权,应理解为$x_i$出现了$w_i$次,而不是$x_i \\cdot w_i$数值。 你可以去维基页查看定义,也可以看下面的推导细节。不太好讲,但其实很简单。\n", "\n", "在sklearn中,LAD用的TreeBoost去实现,所以没有代码对应。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 推导细节\n", "\n", "\\begin{align}\n", "\\rho_m &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N \\big | h(x_i; \\mathbf{a}_m) \\big | \\cdot \\left | \\frac{y_i - F_{m-1}(x_i)}{h(x_i; \\mathbf{a}_m)} - \\rho \\right | \\\\\n", " &= \\operatorname{median}_W \\left \\{ \\frac{y_i - F_{m-1}(x_i)}{h(x_i; \\mathbf{a}_m)} \\right \\}_1^N, \\quad w_i = \\big | h(x_i; \\mathbf{a}_m) \\big |\n", "\\end{align}\n", "\n", "最后一步的过程比较跳,我们在这里详细说下推导。\n", "\n", "在这之前,我们简化下符号,以利于理解,\n", "\n", "\\begin{align}\n", " \\rho_m &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N \\big | h(x_i; \\mathbf{a}_m) \\big | \\cdot \\left | \\frac{y_i - F_{m-1}(x_i)}{h(x_i; \\mathbf{a}_m)} - \\rho \\right | \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N w_i \\cdot | t_i - \\rho | \\\\\n", "\\end{align}\n", "\n", "##### 无加权\n", "\n", "首先,我们考虑无加权的情况,即$w_i = 1$。此时有$\\rho_m = \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N | t_i - \\rho |$。\n", "\n", "有两种方法来解释为什么$\\rho_m = \\operatorname{median}(t_i)$:\n", "\n", "第一种是几何方法,$| t_i - \\rho |$表示两点距离。我们要找的$\\rho_m$,本质上就是离所有点$t_i$总距离最短的点。所以通过作图的方法,直观理解。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nt+lAHFLBuHnzZk488UQA1qxZwyOPPHIoT39QSKVS3HLLLXR2dgL7tmnz5s3Trp3t7e1ceumlAHie\nx49+9KNp36ZTTjmFT33qU/i+z+joKM8+++y0bxPAd7/7Xb761a+iteaRRx45Itp0xx13cP7553P5\n5ZcfEe/T5s2bGRkZ4ZJLLuGxxx47Yp4TQD6f5/XXX2fLli1HTJum4pAKxpGREerr6wGoq6tjZGTk\nUJ7+XWGqNuVyuWnVzrlz57J8+XLuvPNOSqUSy5Ytm/ZtymQypFIpLrroItrb2xkeHp72bbr11ltZ\nsmQJfX19wJHR93p6evjSl77Eb37zG3bt2sWdd9457ds0NDREW1sb119/PTt37mRoaGjatynmoYce\n4oQTTjgi+t6BOKSCsaWlhbGxMQDGxsZoaWk5lKd/V6htU2tr67Rs51/+8hd++ctfcs011xwRbRoZ\nGaFUKnHjjTeSy+V4+eWXp32b7rnnHjZt2sSGDRv429/+xjPPPDPt29TU1MQJJ5wAQHd3N1LKad+m\n+vp65s+fD8Ds2bN59NFHp32bYu655x4++MEPHhFjxIE4pIJx7dq1PPjgg4AxNxx//PGH8vQHFa1N\nJvSp2rRmzZpp1c7BwUF+9rOfce2115LNZo+INl133XXcdtttCCFIp9Ncdtll075NP/jBD9i4cSNX\nXXUV/f39XHHFFTzwwAPA9G3Tddddxx//+EfCMOSll17i61//+rR/Tv39/WzduhWAbdu2sWHDhmnf\npphHHnmENWvWTHn907VNU3FIBeP69evZuXMn5557Li0tLaxdu/ZQnv6gIoTJhJ5sU3NzM2vXrp12\n7bz55psZHBzk05/+NBdffDFBELBz507OOeecadumiy66iJtuuokLL7yQ1tZWzjvvvGn/nJIIIVi/\nfj27du2a1m265JJLuOmmm7jgggs488wzj4jntHLlSpqbmznvvPPo6+vj0ksvnfZtAnj66adZuHAh\nnucdEePegRA6Vn0sFovFYrHYAH+LxWKxWJJYwWixWCwWSwIrGC0Wi8ViSWAFo8VisVgsCaxgtFgs\nFoslgRWMFovFYrEksILRYrFYLJYE/w/oQCWU57XGugAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_image(\"./res/rho_m.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "如上图,绿色直线是中位点到各点距离,黄色直线是另一个点的距离,随着这个点外移,总距离越来越长。总结,对于奇数个点,$\\rho_m$是中位点;对于偶数点,$\\rho_m$在两个中间点闭区间上。\n", "\n", "第二种方法是代数方法。\n", "\n", "首先我们直观地了感受下结果,对于$\\rho_m = \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N | t_i - \\rho | = \\operatorname{arg \\, min} f(\\rho)$,导数是$f'(\\rho) = \\sum_{i=1}^N \\operatorname{sign}(t_i - \\rho)$。在极值点$f'(\\rho) = 0$,而$\\operatorname{sign}(x)$只有$1, -1, 0$三种值,所以要和为0,则必然要求$1$和$-1$的数量相同。而中位点正好满足此条件[2]。\n", "\n", "然后,在Mathematics上看到一个较为严密的论证[2]。它先算最左端结果,再向右取区间推进,证明整个过程中距离是先单减再单增的过程,从而证明中位点是最小点,具体如下:\n", "\n", "令集合$T$含$N$个元素$t_1 < t_2 < \\dots < t_N$。\n", "\n", "1. 对于最左端$\\rho < t_1$,有$f(\\rho) = \\sum_{i=1}^N | t_i - \\rho | = \\sum_{i=1}^N (t_i - \\rho)$。很明显,对于每个子项,有$t_i - \\rho > 0$,且$\\rho \\to t_1$时,$(t_i - \\rho)$单减。也就是说,随着$\\rho$从左向右靠近$t_1$点,所有子项都在减小,则总和$f(\\rho)$单减。 \n", "\n", "2. 选定任一区间,$t_k \\leq \\rho \\leq \\rho + d \\leq t_{k+1}$,有:\n", "\n", "\\begin{align}\n", " f(\\rho + d) &= \\displaystyle \\sum_{i=1}^N | t_i - (\\rho + d) | \\\\\n", " &= \\sum_{i=1}^k (\\rho + d - t_i) + \\sum_{i=k+1}^N (t_i - (\\rho + d)) \\\\\n", " &= \\sum_{i=1}^k (\\rho - t_i) + \\sum_{i=1}^k d + \\sum_{i=k+1}^N (t_i - \\rho) + \\sum_{i=k+1}^N -d \\\\\n", " &= \\sum_{i=1}^N | t_i = \\rho | + k d + (N - (k+1) + 1) \\times -d \\\\\n", " &= f(\\rho) + d \\times ( k - N + (k + 1 ) -1 ) \\\\\n", " &= f(\\rho) + d \\times (2k - N)\n", "\\end{align}\n", "\n", "则有:\n", "\n", "\\begin{equation}\n", " f(\\rho + d) = \\begin{cases}\n", " < f(\\rho), \\quad \\text{when } k < \\frac{N}{2} \\\\\n", " = f(\\rho), \\quad \\text{when } k = \\frac{N}{2} \\\\\n", " > f(\\rho), \\quad \\text{when } k > \\frac{N}{2} \\\\\n", " \\end{cases}\n", "\\end{equation}\n", "\n", "也就是说,在$k < \\frac{N}{2}$区间,$f(\\rho)$单减;在$k > \\frac{N}{2}$区间,$f(\\rho)$单增。所以,在中位点$\\frac{N}{2}$处,$f(\\rho)$是最小值。于是得$\\rho_m = \\operatorname{median}(t_i)$。\n", "\n", "[2]: http://math.stackexchange.com/questions/113270/the-median-minimizes-the-sum-of-absolute-deviations" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "##### 有加权\n", "\n", "\\begin{equation}\n", " \\rho_m = \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N w_i \\cdot | t_i - \\rho |\n", "\\end{equation}\n", "\n", "对于加权,有点无从下手的感觉。我们可以换个角度,会提供点有意思的想法。\n", "\n", "假设$w_i$是正整数,则$w_i \\cdot | t_i - \\rho | = \\sum_{k=1}^{w_i} | t_i - \\rho |$,也就是说,相当于将集合$T$中的$t_i$点扩增到$w_i$个。那么,可以展开为:\n", "\n", "\\begin{align}\n", " \\rho_m &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N w_i \\cdot | t_i - \\rho | \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^N \\sum_{k=1}^{w_i} | t_i - \\rho | \\\\\n", " &= \\operatorname{arg \\, min}_\\rho \\sum_{t_i \\in T'} | t_i - \\rho | \\quad \\text{$T'$ 是$t_i$扩增$w_i$倍的集合} \n", "\\end{align}\n", "\n", "于是,有加权问题就变更到无加权的问题。这时,我们可以将解法表示如下: \n", "\n", "1. 将$t_i$按升序排列。\n", "2. 将$w_i$按对应顺序排,计算累积和$c_k = \\sum_{i=1}^k w_i$。\n", "3. 找到对应中位点$c_m = \\frac{1}{2} c_N$对应的$t_m$,这个$t_m$就是$\\operatorname{median}_W \\{t_i\\}$。\n", "\n", "对应的sklearn代码如下:\n", "\n", "```Python\n", " 51 def _weighted_percentile(array, sample_weight, percentile=50):\n", " 52 \"\"\"Compute the weighted ``percentile`` of ``array`` with ``sample_weight``. \"\"\"\n", " 53 sorted_idx = np.argsort(array)\n", " 54\n", " 55 # Find index of median prediction for each sample\n", " 56 weight_cdf = sample_weight[sorted_idx].cumsum()\n", " 57 percentile_idx = np.searchsorted(\n", " 58 weight_cdf, (percentile / 100.) * weight_cdf[-1])\n", " 59 return array[sorted_idx[percentile_idx]]\n", "```\n", "\n", "当然,如果$w_i$是分数,应该怎么想,我暂时也没有思路。可以参考下维基定义[Weighted median](https://en.wikipedia.org/wiki/Weighted_median),后续有时间,细究下。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 从GBDT到TreeBoost\n", "\n", "#### 2.0 回归决策树\n", "\n", "我们先回顾前面的Gradient Boost方法,其训练公式如下:\n", "\n", "+ For $m=1$ to $M$ do:\n", " \n", " 1. $\\tilde{y} = - \\left [ \\frac{\\partial L (y_i, F(x_i))}{\\partial F(x_i)} \\right ]_{F(x) = F_{m-1}(x)}, \\quad i = 1, 2, \\dotsc, N$\n", " \n", " 2. $\\mathbf{a}_m = \\operatorname{arg \\, min}_{\\mathbf{a}, \\beta} \\displaystyle \\sum_{i=1}^N \\left [ \\tilde{y}_i - \\beta h(x_i; \\mathbf{a}) \\right ]^2$\n", " 3. $\\rho_m = \\operatorname{arg \\, min}_\\rho \\displaystyle \\sum_{i=1}^N L \\left ( y_i, F_{m-1}(x_i) + \\rho h(x_i; \\mathbf{a}_m) \\right)$\n", " 4. $F_m(x) = F_{m-1}(x) + \\rho_m h(x; \\mathbf{a}_m)$ \n", " 注意,为了描述方便,我移除了学习率这个乘数。\n", "\n", "TreeBoost将外部的寻优参数内化到决策树内部,从而既让模型更精细,又加快了运行速度。而要让外部参数进入到决策树$h(x_i; \\mathbf{a}_m)$,首要的问题是得打开这个函数,即使用解析式来描述。换句话说,我们需要对决策树建立数学模型。\n", "\n", "对于$J$个叶子的回归决策树,可以表述为累加式:\n", "\n", "\\begin{equation}\n", " h(x; \\{b_j, R_j\\}_1^J) = \\displaystyle \\sum_{j=1}^J b_j \\, \\mathbf{1}(x \\in R_j) \n", "\\end{equation}\n", "\n", "其中,$R_j$是各叶子,对应叶子的值是此区域的样本均值$b_j = \\operatorname{ave}_{x_i \\in R_j} y_i$。因为各个叶子是没有交集的,所以这个公式的含义等价于:如果$x \\in R_j$,那么$h(x) = b_j$。\n", "\n", "我们将回归决策树的数学式代入Gradient Boost中第四步,可得到:\n", "\n", "\\begin{align}\n", " F_m(x) &= F_{m-1}(x) + \\rho_m h(x; \\mathbf{a}_m) \\\\\n", " &= F_{m-1}(x) + \\rho_M \\displaystyle \\sum_{j=1}^J b_{jm} \\, \\mathbf{1}(x \\in R_{jm}) \\\\\n", " &= F_{m-1}(x) + \\sum_{j=1}^J \\color{red}{\\rho_M b_{jm}} \\, \\mathbf{1}(x \\in R_{jm}) \\\\\n", " &= F_{m-1}(x) + \\sum_{j=1}^J \\color{red}{\\gamma_{jm}} \\, \\mathbf{1}(x \\in R_{jm})\n", "\\end{align}\n", "\n", "请注意,最后一步定义$\\gamma_{jm} = \\rho_M b_{jm}$,只是个简单的代数替换。但它的实质是将权重从对整颗树的全局解移动到了对各个叶子的局部解。也就是说,这个权重值更加细化了,以前是对整颗树寻优,现在是针对各个叶子,各自寻优。此时,将定义代入Gradient Boost第三步,就得到局部权重的最优解:\n", "\n", "\\begin{equation}\n", " \\{\\gamma_{jm}\\}_1^J = \\displaystyle \\operatorname{arg \\, min}_{\\{\\gamma_j\\}_1^J} \\sum_{i=1}^N L \\left ( y_i, F_{m-1}(x_i) + \\sum_{j=1}^J \\gamma_j \\mathbf{1}(x \\in R_{jm}) \\right )\n", "\\end{equation}\n", "\n", "又因为各叶子$R_{jm}$是互无交集,相互独立的,上式的最优解就是各叶子各自的最优解汇总,故可简写为:\n", "\n", "\\begin{equation}\n", " \\gamma_{jm} = \\displaystyle \\operatorname{arg \\, min}_{\\gamma} \\sum_{x_i \\in R_{jm}} L(y_i, F_{m-1}(x_i) + \\gamma)\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.1 LAD_TreeBoost\n", "\n", "前面已经讨论过,对于损失函数$L(y,F) = |y - F|$,它的最优解是中位值。\n", "\n", "故,对于LAD回归,可得:\n", "\n", "\\begin{equation}\n", " \\gamma_{jm} = \\displaystyle \\operatorname{median}_{x_i \\in R_{jm}} \\{ y_i - F_{m-1}(x_i) \\}\n", "\\end{equation}\n", "\n", "综上,可得到LAD_TreeBoost算法如下:\n", "\n", "+ $F_0(x) = \\operatorname{median}\\{y_i\\}_1^N$\n", "+ For $m=1$ to $M$ do:\n", " 1. $\\tilde{y}_i = \\operatorname{sign}(y_i - F_{m-1}(x_i)), \\, i=1, N$\n", " 2. $\\{R_{jm}\\}_1^J = \\text{$J$ terminal node tree} \\big (\\{\\tilde{y}_i, x_i\\}_1^N \\big )$\n", " 3. $\\gamma_{jm} = \\displaystyle \\operatorname{median}_{x_i \\in R_{jm}} \\{ y_i - F_{m-1}(x_i)\\}, \\, j=1, J$\n", " 4. $F_m(x) = F_{m-1}(x) + \\displaystyle \\sum_{j=1}^J \\gamma_{jm} \\mathbf{1}(x \\in R_{jm})$\n", " \n", "对应的sklearn中代码为\n", "\n", "```python\n", " 305 class LeastAbsoluteError(RegressionLossFunction):\n", " 306 \"\"\"Loss function for least absolute deviation (LAD) regression. \"\"\"\n", " 307 def init_estimator(self):\n", " 308 return QuantileEstimator(alpha=0.5)\n", " 309\n", " 310 def __call__(self, y, pred, sample_weight=None):\n", " 311 if sample_weight is None:\n", " 312 return np.abs(y - pred.ravel()).mean() \n", " 313 else:\n", " 314 return (1.0 / sample_weight.sum() *\n", " 315 np.sum(sample_weight * np.abs(y - pred.ravel())))\n", " 316\n", " 317 def negative_gradient(self, y, pred, **kargs): \n", " 318 \"\"\"1.0 if y - pred > 0.0 else -1.0\"\"\"\n", " 319 pred = pred.ravel() \n", " 320 return 2.0 * (y - pred > 0.0) - 1.0\n", " 321 \n", " 322 def _update_terminal_region(self, tree, terminal_regions, leaf, X, y,\n", " 323 residual, pred, sample_weight):\n", " 324 \"\"\"LAD updates terminal regions to median estimates. \"\"\"\n", " 325 terminal_region = np.where(terminal_regions == leaf)[0]\n", " 326 sample_weight = sample_weight.take(terminal_region, axis=0)\n", " 327 diff = y.take(terminal_region, axis=0) - pred.take(terminal_region, axis=0)\n", " 328 tree.value[leaf, 0, 0] = _weighted_percentile(diff, sample_weight, percentile=50)\n", "```\n", "\n", "其中320L就是第一步的求导,328L就是第三步将树的叶子改为中位值(percentile=50)。\n", "\n", "因为$\\tilde{y}_i$只有两种值$\\tilde{y} \\in \\{-1, 1\\}$,又叶子值是取中位数,所以这个损失的鲁棒性非常强。但求解中位数不如平均数有快速方法,所以性能会受影响。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 M-Regression\n", "\n", "LS_Boost运行快,LDA_TreeBoost鲁棒性好,能不能将两者结合起来呢?M-Regression的初衷正是来源于此,它用阈值$\\delta$,比如说三倍方差,将$|y-F|$误差分隔成两部份:在阈值内的认定是正常误差,用LS_Boost来约束;在阈值外认定是长尾和坏值,用LDA_TreeBoost来抵抗。通过调整$\\delta$值来控制平衡,从而达到各取其长的好处。\n", "\n", "这里具体对的损失函数叫Huber,定义如下:\n", "\n", "\\begin{equation}\n", " L(y, F) = \\begin{cases}\n", " \\frac{1}{2} (y - F)^2 \\quad & |y - F| \\leq \\delta \\\\\n", " \\delta \\cdot \\left (\\big |y - F \\big | - \\frac{\\delta}{2} \\right ) \\quad & |y - F| > \\delta \n", " \\end{cases}\n", "\\end{equation}\n", "\n", "对应的具体取解推导要再参阅论文,如果后面有时间再来填坑。\n", "\n", "在sklearn中对应的是HuberLossFunction类。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.3 二分类逻辑回归树\n", "\n", "这里用的损失函数叫negative binomial log-likelihood[3],定义为:\n", "\n", "\\begin{equation}\n", " L(y, F) = \\log (1 + e^{-2 y F}), \\quad y \\in \\{-1, 1\\}\n", "\\end{equation}\n", "\n", "其中$F(x) = \\frac{1}{2} \\log \\left [ \\frac{\\operatorname{Pr}(y = 1 | x)}{\\operatorname{Pr}(y = -1 | x)} \\right ]$\n", "\n", "则第一步残差展开为:\n", "\n", "\\begin{align}\n", " \\tilde{y_i} &= - \\left [ \\frac{\\partial L (y_i, F(x_i))}{\\partial F(x_i)} \\right ]_{F(x) = F_{m-1}(x)} \\\\\n", " &= - \\frac{1}{1 + e^{-2yF}} \\cdot 1 \\cdot e^{-2yF} \\cdot -2y \\\\\n", " &= 2y \\frac{e^{-2yF}}{1 + e^{-2yF}} \\\\\n", " &= \\frac{2y}{1 + e^{2yF}} \\\\\n", " &= \\frac{2 y_i}{1 + e^{2 y_i F_{m-1}(x_i)}} \\\\\n", "\\end{align}\n", "\n", "同样地,第三步寻优代入损失函数,变为:\n", "\n", "\\begin{equation}\n", " \\rho_m = \\displaystyle \\operatorname{arg \\, min}_\\rho \\sum_{i=1}^{N} \\log \\left ( 1 + e^{-2 y_i \\big ( F_{m-1}(x_i) + \\rho h(x_i; \\mathbf{a}_m) \\big )} \\right )\n", "\\end{equation}\n", "\n", "运用前面LAD_Boost的技巧,很容易得到:\n", "\n", "\\begin{equation}\n", " \\gamma_{jm} = \\displaystyle \\operatorname{arg \\, min}_\\gamma \\sum_{x_i \\in R_{jm}} \\log(1 + e^{-2 y_i ( F_{m-1}(x_i) + \\gamma ) })\n", "\\end{equation}\n", "\n", "上式没有封闭形式的解,根据[3],可用一轮最优化中的牛顿迭代法,得到数值解:\n", "\n", "\\begin{equation}\n", " \\gamma_{jm} = \\displaystyle \\sum_{x_i \\in R_{jm}} \\tilde{y}_i \\Big / \\sum_{x_i \\in R_{jm}} |\\tilde{y}_i| (2 - |\\tilde{y}_i|)\n", "\\end{equation}\n", "\n", "这一步推导,我也还没有细看,以后有精力再细究。\n", "\n", "这个算法被称为L2_TreeBoost,总结如下:\n", "\n", "+ $F_0(x) = \\frac{1}{2} \\log \\frac{1 + \\bar{y}}{1 - \\bar{y}}$\n", "\n", "+ For $m=1$ to $M$ do:\n", " 1. $\\tilde{y}_i = \\frac{2 y_i}{1 + e^{2 y_i F_{m-1}(x_i)}}, \\quad i=1, N$\n", " 2. $\\{R_{jm}\\}_1^J = \\text{$J$ terminal node tree} \\big (\\{\\tilde{y}_i, x_i\\}_1^N \\big )$\n", " 3. $\\gamma_{jm} = \\displaystyle \\sum_{x_i \\in R_{jm}} \\tilde{y}_i \\Big / \\sum_{x_i \\in R_{jm}} |\\tilde{y}_i| (2 - |\\tilde{y}_i|), \\quad j=1, J$\n", " 4. $F_m(x) = F_{m-1}(x) + \\displaystyle \\sum_{j=1}^J \\gamma_{jm} \\mathbf{1}(x \\in R_{jm})$\n", " \n", "sklearn中代码如下:\n", "\n", "```python\n", " 106 class LogOddsEstimator(BaseEstimator):\n", " 107 \"\"\"An estimator predicting the log odds ratio.\"\"\"\n", " 108 scale = 1.0\n", " 109\n", " 110 def fit(self, X, y, sample_weight=None):\n", " 111 # pre-cond: pos, neg are encoded as 1, 0\n", " 112 if sample_weight is None:\n", " 113 pos = np.sum(y)\n", " 114 neg = y.shape[0] - pos\n", " 115 else:\n", " 116 pos = np.sum(sample_weight * y)\n", " 117 neg = np.sum(sample_weight * (1 - y))\n", " 118\n", " 119 if neg == 0 or pos == 0:\n", " 120 raise ValueError('y contains non binary labels.')\n", " 121 self.prior = self.scale * np.log(pos / neg)\n", " 122\n", " 123 def predict(self, X):\n", " 124 check_is_fitted(self, 'prior')\n", " 125\n", " 126 y = np.empty((X.shape[0], 1), dtype=np.float64)\n", " 127 y.fill(self.prior)\n", " 128 return y\n", "```\n", "\n", "注意,这个初始化$F_0$对公式做了点变形。\n", "\n", "```python\n", " 466 class BinomialDeviance(ClassificationLossFunction):\n", " 467 # \"\"\"Binomial deviance loss function for binary classification.\n", " 468 #+-- 10 lines: Binary classification is a special case; here, we only need to-------------------------\n", " 478\n", " 479 def init_estimator(self):\n", " 480 return LogOddsEstimator()\n", " 481\n", " 482 #+-- 9 lines: def __call__(self, y, pred, sample_weight=None):---------------------------------------\n", " 491\n", " 492 def negative_gradient(self, y, pred, **kargs):\n", " 493 \"\"\"Compute the residual (= negative gradient). \"\"\"\n", " 494 return y - expit(pred.ravel())\n", " 495\n", " 496 def _update_terminal_region(self, tree, terminal_regions, leaf, X, y,\n", " 497 residual, pred, sample_weight):\n", " 498 \"\"\"Make a single Newton-Raphson step.\n", " 499\n", " 500 our node estimate is given by:\n", " 501\n", " 502 sum(w * (y - prob)) / sum(w * prob * (1 - prob))\n", " 503\n", " 504 we take advantage that: y - prob = residual\n", " 505 \"\"\"\n", " 506 terminal_region = np.where(terminal_regions == leaf)[0]\n", " 507 residual = residual.take(terminal_region, axis=0)\n", " 508 y = y.take(terminal_region, axis=0)\n", " 509 sample_weight = sample_weight.take(terminal_region, axis=0)\n", " 510\n", " 511 numerator = np.sum(sample_weight * residual)\n", " 512 denominator = np.sum(sample_weight * (y - residual) * (1 - y + residual))\n", " 513\n", " 514 if denominator == 0.0:\n", " 515 tree.value[leaf, 0, 0] = 0.0\n", " 516 else:\n", " 517 tree.value[leaf, 0, 0] = numerator / denominator\n", " 518\n", " 519 def _score_to_proba(self, score):\n", " 520 proba = np.ones((score.shape[0], 2), dtype=np.float64)\n", " 521 proba[:, 1] = expit(score.ravel())\n", " 522 proba[:, 0] -= proba[:, 1]\n", " 523 return proba\n", "```\n", "\n", "\n", "[3]: Jerome Friedman - Additive logistic regression: a statistical view of boosting " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "模型$F_M(x)$输出的分值需要转换成各类的概率值,519L的`_score_to_proba`处理思路来源如下:\n", "\n", "通过联理公式,\n", "\n", "\\begin{align}\n", " & F(x) = \\frac{1}{2} \\log \\left [ \\frac{\\operatorname{Pr}(y = 1 | x)}{\\operatorname{Pr}(y = -1 | x)} \\right ] \\\\\n", " & \\operatorname{Pr}(y = 1 | x) + \\operatorname{Pr}(y = -1 | x) = 1\n", "\\end{align}\n", "\n", "可以容易解得:\n", "\n", "\\begin{align}\n", " & \\operatorname{Pr}(y = 1 | x) = \\frac{1}{1 + e^{-2 F(x)}} \\\\\n", " & \\operatorname{Pr}(y = -1 | x) = \\frac{1}{1 + e^{2 F(x)}} \\\\\n", "\\end{align}\n", "\n", "因为$F_M(x)$和$F(x)$有关联,我们可以借用上式将分值近似转换成概率值:\n", "\n", "\\begin{align}\n", " p_{+}(x) &= \\operatorname{\\widehat{Pr}}(y = 1 | x) = \\frac{1}{1 + e^{-2 F_M(x)}} \\\\\n", " p_{-}(x) &= \\operatorname{\\widehat{Pr}}(y = -1 | x) = \\frac{1}{1 + e^{2 F_M(x)}} \\\\\n", "\\end{align}\n", "\n", "用于二分类时,应用如下公式:\n", "\n", "\\begin{equation}\n", " \\hat{y}(x) = 2 \\cdot \\mathbf{1}[c(-1,1) p_{+}(x) > c(1,-1) p_{-}(x)] - 1\n", "\\end{equation}\n", "\n", "其中,$c(\\hat{y}, y)$是将$y$误认为$\\hat{y}$的代价。\n", "\n", "回过头来看`score_to_proba`函数,它其实是上式的简化版,并没有$c(\\cdot)$,同时虽然$p_{+}(x)$和$p_{-}(x)$并非真实概率,但相加等于1,所以只算$p_{+}(x)$。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Influence trimming\n", "\n", "在寻优$\\gamma_{jm}$时,还有优化的空间:\n", "\n", "\\begin{align}\n", " \\gamma_{jm} &= \\displaystyle \\operatorname{arg \\, min}_\\gamma \\sum_{x_i \\in R_{jm}} \\log(1 + e^{-2 y_i ( F_{m-1}(x_i) + \\gamma ) }) \\\\\n", " &= \\displaystyle \\operatorname{arg \\, min}_\\gamma \\sum_{x_i \\in R_{jm}} \\log(1 + e^{-2 \\color{blue}{y_i F_{m-1}(x_i)}} \\cdot e^{-2 y_i \\gamma} ) \\\\\n", " &= \\displaystyle \\operatorname{arg \\, min}_\\gamma \\sum_{x_i \\in R_{jm}} \\phi(x_i)\n", "\\end{align}\n", "\n", "注意,上式中,若$y_i F_{m-1}(x_i)$非常大,则对应的$\\phi(x_i) \\to 0$。也就是说,这些样本对寻优不再有贡献。于是,我们可以定义$w_i = e^{-2 y_i F_{m-1}(x_i)}$作为测量函数,如果它的值小于一定阈值,这个样本就不再参与计算。\n", "\n", "另外,对于一个$x_i$,其损失函数$L(y, F(x_i))$如果到达极值点,就相当于是常数,对于整体寻优$\\operatorname{arg \\, min} L(y, F(x))$不再有贡献。而判断极值点可以用二阶导数来度量,所以二阶导也能作为一种测量函数。具体到现在的逻辑回归树,就可以定义为:\n", "\n", "\\begin{equation}\n", " w_i = \\frac{\\partial^2 L}{\\partial F^2} = |\\tilde{y}_i| (2 - |\\tilde{y}_i|)\n", "\\end{equation}\n", "\n", "至于这个移除的阈值,可以用比例来约束。即我们定阈值为$w_{l(\\alpha)}$,而$l(\\alpha)$满足:\n", "\n", "\\begin{equation}\n", " \\displaystyle \\sum_{i=1}^{l(\\alpha)} w_{(i)} = \\alpha \\sum_{i=1}^{N} w_i\n", "\\end{equation}\n", "\n", "其中,$w_{(i)}$是按升序排列的权值。典型值$\\alpha \\in [0.05, 0.2]$,也就是说,可以减少10到20倍的计算量。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.4 多分类逻辑回归树\n", "\n", "多分类是二分类的推广,相对而言公式推导比较复杂,不再详述。它的简化,相当于是对每一个类建一个「是、否」的二分类树,最后对每个类逐一评分,输出分值最高的类。`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 参数与正则\n", "#### 3.0 Regularization\n", "lack of fit(LOF):\n", "+ regression\n", " - average absolute error\n", "+ classification\n", " - minus twice log-likelihood(deviance)\n", " - misclassification error-rate\n", "\n", "两种shrinkage strategy:\n", "1. 简单:最终模型:$F_\\nu(x) = \\bar{y} + \\nu \\cdot (F_M(x) - \\bar{y})$\n", "2. 复杂:每个迭代模型:$F_m(x) = F_{m-1}(x) + \\nu \\cdot \\rho_m h(x; \\mathbf{a}_m, \\quad 0 < \\nu \\leq 1$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.1 Tree boosting的参数 \n", "\n", "meta-parameter:\n", "\n", "+ $M$: the number of iterations.\n", "+ $\\nu$: the learning rate.\n", "+ $J$: the fixed number of terminal nodes. \n", " The best tree size $J$ is governed by the effective interaction order of the target $F*(x)$, while it is unknown. $\\to$ cross-validation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. 可解释性\n", "理解贡献比较大的变量" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.0 Relative importance of input variables\n", "\n", "The relative influences $I_j$, of the individual inputs $x_j$, on the variation of $\\hat{F}(x)$ over the joint input variable distributation:\n", "\n", "\\begin{equation}\n", " I_j = \\left ( E_x \\left [ \\frac{\\partial \\hat{F}(x)}{\\partial x_j} \\right ]^2 \\cdot \\operatorname{var}_x[x_j] \\right )^{1/2}\n", "\\end{equation}\n", "\n", "据此,Breiman提出了适合于决策树的公式:\n", "\n", "\\begin{equation}\n", " \\hat{I}_j^2(T) = \\displaystyle \\sum_{t=1}^{J-1} \\hat{i}_t^2 \\mathbf{1}(v_t = j)\n", "\\end{equation}\n", "\n", "其中,$v_t$是以$j$作分割特征的中间节点,$\\hat{i}_t^2$是对应节点的Friedman MSE评价$i^2(R_l, R_r) = \\frac{w_l w_r}{w_l + w_r}(\\bar{y}_l - \\bar{y}_r)^2$。\n", "\n", "对于多颗树,就加和取平均:\n", "\n", "\\begin{equation}\n", " \\hat{I}^2_j = \\frac{1}{M} \\displaystyle \\sum_{m=1}^M \\hat{I}^2_j (T_m)\n", "\\end{equation}\n", "\n", "这个思路非常朴素,就是计算各特征对决策树评价函数提升的贡献度。在sklearn中实现如下:\n", "\n", "```python\n", "1201 def feature_importances_(self):\n", "1202 \"\"\"Return the feature importances (the higher, the more important the\n", "1203 feature).\n", "1204\n", "1205 Returns\n", "1206 -------\n", "1207 feature_importances_ : array, shape = [n_features]\n", "1208 \"\"\"\n", "1209 self._check_initialized()\n", "1210\n", "1211 total_sum = np.zeros((self.n_features, ), dtype=np.float64)\n", "1212 for stage in self.estimators_:\n", "1213 stage_sum = sum(tree.feature_importances_\n", "1214 for tree in stage) / len(stage)\n", "1215 total_sum += stage_sum\n", "1216\n", "1217 importances = total_sum / len(self.estimators_)\n", "1218 return importances\n", "```\n", "\n", "此时,我们也就明白了为什么765L决策树使用的friedman_mse损失函数了。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1 Partial dependence plots\n", "\n", "Partial dependence主要是用于可视化一维或二维变量对于整体总结果的影响。它的计算思路非常简单,令有特征集合$X_s \\cup X_c = X$,则$f(X_s = x_s) = \\operatorname{Avg}(f(X_s = x_s, X_{ci}))$。也就是对于特定的$x_s$值,算出它的响应均值。\n", "\n", "下图是一个示例[sklearn: Partial Dependence Plots](http://scikit-learn.org/stable/auto_examples/ensemble/plot_partial_dependence.html)。\n", "\n", "![](http://scikit-learn.org/stable/_images/sphx_glr_plot_partial_dependence_001.png)\n", "\n", "对于一维变量,可以看出,房价与Medlin(平均收入)成正比,与AveOccup(每户人均数)成反比,而与HouseAge(房龄)、AveRoom(房间均数)没有明显关系。再看二维变量(HouseAge - AveOccup),对于每户人均数大于2的情况,房龄与房价关系不大;但当人均数小于2时,则出现了相关性。\n", "\n", "[ref: Partial Dependency Plots and GBM](http://adventuresindm.blogspot.jp/2013/01/partial-dependency-plots-and-gbm.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. 总结\n", "\n", "我们先讲了对GBDT框架的优化,再借此拓展到tree boosting方法,然后略微提了正则和调参的参数,最后介绍了两种用于解释特征变量的方法。\n", "\n", "本文基本上相当于翻译了论文Friedman - Greedy function approximation: A gradient boosting machine,如果有不明晰的地方,可以直接查看原文。" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }