決策樹 – 回歸


解決問題

  實現基於特征范圍的樹狀遍歷的回歸。

解決方案

  通過尋找樣本中最佳的特征以及特征值作為最佳分割點,構建一棵二叉樹。選擇最佳特征以及特征值的原理就是通過滿足函數最小。其實選擇的過程本質是對於訓練樣本的區間的分割,基於區間計算均值,最終區域的樣本均值即為預測值。

  在預測的時候,將會根據提供的樣本的特征,來遍歷二叉樹(確定區域的過程),其中葉子節點的值就是預測值。

  構建回歸決策樹,過程,其實可以理解對訓練樣本進行監督式聚類,每個分類都是有一組特征邏輯范圍做描述;預測的時候,其實就是在匹配,那個分類邏輯范圍路徑和預測樣本匹配,然后取這個分類里面的y值均值作為預測值。

  因為決策樹每一步都是當前損失函數的最優解,所以本質還是貪心算法,因為每一步都是局部最優;所以CART的回歸算法也是一種啟發式算法的范疇。

  所以,決策樹的構建過程本質就是兩步走:

  1. 對於一個特征值序列進行各個點位的二分,計算每一次二分之后的兩個點位的殘差平方和(yi和mean(yi)的殘差),選擇最小的那個特征值作為候選分割點;

  2. 在針對候選的分割點的選出殘差平方和最小的作為當前層的分割點。

  其實無論是決策樹回歸還是分類,你會發現決策樹解決思路都是一樣的,遍歷所有的特征的特征值,來作為分割點,然后看哪一個分割點的效果最好,在分類里面看的是信息增益(C3),信息增益比(C4.5)以及gini指數(CART),回歸(CART)就是看孩子節點的殘差平方和之和;然后再在各個孩子節點中繼續選擇分割點,直到層次達到了指定或者孩子節點只有一個樣本。

 

實現

  通過下面的公式可以看出來解決方案的實現,因為CART的回歸,所以解決的思路求得是損失函數的最小值,如下式所示:

  這里套了兩層min,第一min是各個特征在自己的特征值層面上選出最小值,即各個特征選出最佳分割特征值,外層min則是在各個特征層面上,選擇誤差最小的特征,這樣選出了“最佳”的分割特征值,最佳打引號是因為決策樹這種方式是啟發式,並不一定是全局最佳,只是局部最佳。

  R1和R2兩個區域代表的是二叉樹(j特征的特征值s作為邏輯判斷條件)所划分的兩個區域(樣本集合);j代表的是樣本x的第j個特征(是一個索引值),xj代表的是x第j個特征的特征值;s則代表j的指定特征值。

R1(j, s) = {x | xj ≤ s}, R2(j, s) = {x | xj > s}

  c1和c2則是葉子節點的樣本值,下面的式子代表枚舉葉子節點所有的樣本值c,獲取其取值范圍,在這個范圍內來計算yi - c,取(yi-c)²的最小值。

  這個c的最佳值(滿足(yi -c)²最小)是c值的均值(這個可以通過求導值為0計算出來,c值為y的均值),上式可以寫成(將minC1/ minC2的約束改為具體的值:c1_hat和c2_hat,_hat代表估算的最佳值,即均值)下面的公式,注意,里面的min算子消失了,c變成了c_hat:

  最終我們構建的決策樹的模型是:

  關於f(x)的公式,我們看下面的圖會更加直觀,回歸決策樹本質其實就是為樣本划分區域,在遍歷樹種非葉子節點的過程就是在逐漸的細化范圍,以下圖為例,首先是選擇一個最佳點進行二分划分(圖中黑色實線部分),然后再這對每一部分,在尋找各自的最佳二分點進行二次划分(圖中虛線部分),最后到了葉子節點其實就是每個被細化的區域區域了。

  區域里面的(訓練)樣本y值的均值就是這個區域的值(x值即特征值用於區域划分)。從這個視角我們再來看f(x)=Σcm_hat * I,cm_hat就是區域的均值(葉子節點值),I是一個只是函數,如果是帶預測樣本是在該區域,I值為1,否則為0。這個函數其實就是用來定位(唯一)區域的。

  這個模型看起來有些抽象,看一下決策樹回歸的圖形,首先來一張樹狀圖:

  下圖左側就是上圖對應的數據展示,最后一層葉子節點因為沒有區分度,所以不算一層,只有包含父節點的才算一層。

  通過上圖可以看出來,決策樹的圖形其實是在指定的范圍內的值為直線,這個范圍就是每個節點的條件。

  我們先來看一下左側的depth為2的圖:根節點是0.2作為分割線,即靠左側的實線線,將整個樣本空間一分為二,R1:(0,0.2), R2:(0.2, 1.0);然后是第二層兩個子節點,分別是0.1和0.8(近似值),將根節點所划分的區域繼續一分為二,這樣就有了四個區域;每個區間都有自己的R空間(樣本),其中的紅線就是各個空間里面樣本的應變量的均值,即cm值。通過這種方式划分,其實實現了損失函數值最小。

  我們再來看一下右側圖,即depth=3,你會發現一個特點,任何一個R區間都會包含一個最后一層,這是因為最后獲取葉子節點,這是因為每個子節點(非葉子)一定回事把所有的父節點所划分的區域一分為2,所以所有的區域一定是有最有一層節點對應的分割線的。

  總之,我們會發現決策樹其實是通過階梯式的圖像,來擬合訓練空間的樣本(一定程度上是有一些生硬的。所以做回歸,一般很少直接使用CART,而是CART的簇,隨機森林)。

  那么我們再回到公式,我們就拿左側圖(depth=2)來舉例,對於f(0.5),這個值只會屬於其中一個R空間,這里是(0.2,0.8)區域,所以其他區域在公式計算中都應該取值為0,這個就是指示函數的作用,類似於開關作用,確保只有應該計算點是有值,其他都是0值。

   

實際案例

  下面通過一個實際的例子來解釋一下這個求解過程。

  下面的圖標是某個特征j的特征值:

  需要考慮如下9個切分點:{1.5, 2.5, 3.5, 4.5, 6.5, 7.5, 8.5, 9.5},這里切分點是取相鄰的兩個特征值的均值。

  對於第一個切分點1.5,y值數據(5.56)為第一個數據區域R1,2.5~9.5為第二個數據區域R2。

  於是有c1 = 5.56,c2 = (1/9)*Σyi = 7.5

  L(1.5) = (y1 - 5.56)² + Σ(yi - c2)² = 15.72,這里 i∈[1, 9]

  繼續,按照第二個切分點2.5,R1={5.56, 5.7},R2={5.91, 6.4,..., 9.05},於是有:

  c1 = mean(R1) = 5.63, c2 = mean(R2) = 7.73

  L(2.5) = Σ(yi - c1)² + Σ(yj - c2)² = 12.07,其中i∈[0, 1],j∈[2, 9]

  以此類推有:

  我們看到該屬性損失函數最小的是6.5這個點,於是對於該屬性最佳區分點就是6.5。於是有(這里的R采用x:y模式來表示):

R1={1:5. 2:56, 3:5.7, 4:5.91, 5:6.4, 6:7.05}, R2={7:8.9, 8:8.7, 9:9, 10:9.05}

  如果該樣本還有其他屬性,也是以此類推,計算出來各個最佳區分點的L(s),然后選出L(s)值最小的特征以及區分點,作為二叉樹的節點;然后提出到選定的特征,再從R1和R2中繼續該操作分別獲得新的子節點,循環往復。

   

附錄

  為什么c1_hat和c2_hat的最優解是對應的均值呢(注意,帶hat代表該值是估計值)?

  這里我們看一下推倒的過程:

  F(a) = (x1 - a)² + (x2 - a)² + ... + (xn - a)²

  考察其單調性(通過求導來求其極值):

  F'(a) = -2*(x1 - a) - 2(x2 - a) - ... - 2(xn - a) = 2na - 2*Σxi(此處注意,因為是對a求導,a前面是-號,所以求導后系數為-2

  F'(a) = 0 => a = (1/n)*Σxi

  根據其單調性,可以知道a_hat = (1/n)*Σxi為最小值。

  根據公式來看求得是L2的值,所以構建的樹也稱之為最小二乘回歸樹

   

  單調性為什么可以通過求導體現出來,怎么體現出來?

  導數代表的是函數變化速率,單調性代表了y值和x值變化是否是同方向,同方向則>0,反方向則<0;基於這個理解,不難退出導數如下定理:

  f'(x) > 0 => f(x)是增函數(單調遞增)

  f'(x) < 0 => f(x)是減函數(單調遞減)

  f'(x) = 0 => f(x)是常數函數。

  注意,這個左側條件為充分條件而非必要條件,單調增減並不推導出函數導數的正負性。

  導數怎么來判斷極值的,是極大值還是極小值?

  首先要明白一點,極值是一個局部概念,只是描述某個點兩邊的變化趨勢。

  首先導數=0,稱之為函數的駐點,然后分析駐點兩邊的導數值是否異號,如果異號:左邊區域>0,右邊區域<0 =>駐點是極大值(峰值,可以想象沿着x軸正方向,山峰的左側是上行,右側是下行),反之是極小值(谷底值,可以想象,沿着x軸正向,山谷左側是下行,右側是上行)。如果駐點兩側同號,則稱該點為鞍點:

  導數的峰值分析,一般思路:

  1. 求導數公式,令導數為0,求出駐點;

  2. 基於駐點和指定的區間,以駐點為截線將x軸進行區域分割,分析駐點兩邊導數正負號,來決定駐點的是否為極值點或者說為哪一類極值點。

  下面舉一個例子:

  y = (1/3)*x³ - 4x + 4

  求導:y' = x² - 4 = (x+2)*(x-2)

  求駐點:y' = 0 = (x + 2)*(x - 2) => x= ±2

  划分區域,分段分析極值:

   

   

參考

https://zhuanlan.zhihu.com/p/42505644

https://blog.csdn.net/weixin_40604987/article/details/79296427

https://www.jianshu.com/p/b90a9ce05b28

https://wenku.baidu.com/view/eb97650e76c66137ee061960?fr=uc 導數極值例子參考

https://wenku.baidu.com/view/4357a7ce58f5f61fb73666c3?fr=uc 提到了極值只是局部概念

https://blog.csdn.net/wfei101/article/details/80766934 提到了駐點概念

  

 

其實無論是決策樹回歸還是分類,你會發現決策樹解決思路都是一樣的,遍歷所有的特征的特征值,來作為分割點,然后看哪一個分割點的效果最好,在分類里面看的是信息增益(C3),信息增益比(C4.5)以及gini指數(CART),回歸(CART)就是看孩子節點的殘差平方和之和;然后再在各個孩子節點中繼續選擇分割點,直到層次達到了指定或者孩子節點只有一個樣本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM