初識GBDT回歸流程

2021-10-21 08:50:24 字數 2784 閱讀 2125

自己對於gbdt的過程不是很了解,所以找了些資料學習了一下。這篇文章會以乙個小例子,簡單介紹一下用gbdt做回歸的大致流程。要是能幫助你理解gbdt回歸,那就再好不過了。

這篇文章主要講述流程,數學推導後面再寫篇文章講述。

演算法是需要資料訓練的,讓我們先造一些假資料吧 ?

假設上面是5個男生高富帥這三個特徵的資料,還有他們受女生歡迎的程度的資料。

現在呢,想用gbdt訓練出乙個回歸模型,用於**某個男生受女生歡迎的程度?

3.1 求平均值

第一步,我們用5個男生的平均值來作為第一次**的歡迎程度,也就是 (88+86+59+67+91)/5=78.2

也就是說,不管這個男生高不高,富不富,帥不帥,我們都**他的受女生歡迎程度是78.2分

至於為什麼是求平均值,後面數學推導篇會講述

3.2 求殘差

我們用觀測值減去**值,得到殘差,對應**粉紅色的那一列

3.3 根據殘差構造dt(決策樹)

接著,我們要根據高富帥這三個特徵,構造一顆決策樹來擬合殘差

形成這樣一顆決策樹有對應的演算法,比如回歸樹有最小二乘回歸樹生成演算法,分類樹有基尼指數相關生成演算法。這裡只是隨便畫的,沒有用對應演算法生成。

3.4 求新一輪的模型

接著,我們就可以求新一輪的模型了,怎麼做呢,把葉子結點的值用平均值代替

比如,對於第二個葉子結點來說,就是 (9.8-11.2)/2 啦,也就是 -0.7

為什麼用平均值也是數學可以推導的,後面理論篇講述

對於其他葉子結點來說,因為只有乙個值,所以他們的平均值還是他們自己。所以我們就得到了新的一顆樹

現在,我們只需要把一開始的**值加上這顆樹,就是我們的新模型啦

也就是

3.5 學習率

我們試著用這個新模型來**一下原來**中的最後一行

pred(178,富,帥) = (78.2 + 12.8) = 91

哇!跟觀測值一模一樣。 這對嗎?

這是不對的,這樣會導致模型進入過擬合,也就是很好地擬合訓練資料,但是對於測試資料表現欠佳,整個模型沒有泛化性。我們不應該一步到位,應該朝著正確的方向,一小步一小步地前進。所以我們引入了學習率,我們假設學習率是0.1,所以目前為止模式長這樣子

我們用這個新的模型**原來**裡面的5條資料

可以看到,新一輪的**值,比原來的**值,更加接近觀測值了 ?

然後就是周而復始了,繼續算殘差

繼續構造決策樹

求平均值然後,構造新模型

我們現在已經第二次更新了我們的模型,我們用我們的模型來**一下一條新資料

比如乙個男生(190,不富,帥)

他的**受歡迎分= 78.2 + 0.1* -0.7 + 0.1 * 9.87 = 79.117

因為我們的學習率設定了0.1,而且只是第二輪,所以看到模型學到的還不是很多,但是我們可以看到它已經在往正確的方向學習啦~

剩下的,就是迴圈往復,周而復始,直到滿足停止條件

停止條件可以是比如結點中的個數小於預定的閾值,或者沒有更多特徵,或者再分下去對模型沒有太大幫助

最後,gbdt的模型,會變成這樣子

gbdt = g + b + dt

dt(decision tree) 決策樹,說白了就是一堆if-else集合,然後用演算法尋找最優的切分變數和最佳切分點,gbdt模型裡面用的決策樹是cart(對映到上文是那一顆顆的樹)

b(boosting) 提公升樹的意思,我的理解就是類似於高中時候的「錯題本「,每次不是從整張卷子開始練,而是從上一次卷子得到的錯題集開始,強化殘差。會的題已經會了,再做100w遍也只能提公升一點點; 但是不會的錯題,只要突破乙個知識點,對於整張卷子的分數影響更大(對映到上文是目標是殘差,不是原來的觀測值)

g(gradient) 這個就是梯度的意思,用損失函式的梯度,來擬合上一次的殘差(對映到上文是結點求均值,還沒有數學推導,不好對映 ?

合起來就是,gbdt

從回歸樹到GBDT

gbdt可以看做是由多棵回歸樹組成的,所以要理解gbdt,就要先理解回歸樹。回歸樹也是為了做 只是將特徵空間劃分成了若干個區域,在每個區域裡進行 舉個簡單例子。圖中的資料有兩個特徵 x1 x2 根據這兩個特徵可以很容易地把資料分為左下角 左上角 右上角 右下角四個區域,這四個區域各有乙個中心點 5,...

GBDT梯度提公升之回歸演算法個人理解

前面的文章中介紹了梯度提公升方法,將梯度提公升方法中的基學習器替換成cart回歸樹模型,梯度提公升方法就變成了梯度提公升回歸樹gbdt方法。gbdt演算法的思想與提公升樹演算法類似,不同點在於殘差的計算 1 首先對於資料集初始化乙個簡單模型 2 計算損失函式對於函式 為例,損失函式關於 3 計算第二...

初識Oracle PL SQL控制流程

else if declare sals number begin select sal into sals from emp where empno empno if sals 2000 then dbms output.put line 掙得不多,需努力 else if sals 5000 th...