決策樹(二):迴歸樹和模型樹

下面介紹的迴歸樹和另一篇文章介紹的分類樹,都屬於決策樹範疇。分類樹的模型是每個非葉子節點都是一個分類特徵,按照該分類特徵的不同取值,將數據集分爲多少個子集;並且分類樹模型我們要找的是測試數據集的最終分類結果,而這個結果是標稱型數據。而在迴歸樹的概念中,每個非葉子節點也是需要根據某個特徵分出子樹,但是這個特徵的取值是連續的,就不可能像分類樹那樣依據多少個取值分爲多少個子樹,所以在迴歸樹模型中,一般都是二叉樹,每個非葉子節點的分類特徵都取一個值,小於這個值的數據分到左子樹,大於這個值的分到右子樹,等於這個值的我感覺是兩邊都可。

換一種說法,二叉樹內部取“是”和“否”的分法,一個節點的條件時x<=a(a是我們計算出來的合適的分隔數據點),其中小於等於a的我們取“是”,也就是放到左子樹,大於a的,我們取“否”,放到右子樹。

  1. 迴歸樹的生成

我們知道,不管是在迴歸樹的生成過程中,還是生成之後,所有的葉子節點都是一堆數據集,而我們的目標就是對葉子節點上的數據集進行誤差最小化分析,不斷劃分,直到葉子節點的誤差小於一定的閾值。所以在每個葉子節點上,我們用平方誤差

,來表示迴歸樹訓練過程中的預測誤差,其中f(xi)是期望最優值,我們取所有yi的平均值,即 。下來就是需要取,最優的分割特徵及其分割值,我們採用啓發式方法(我理解的啓發式方法,通俗的說,就是每次拿一個特徵,然後取此特徵按照一定步長改變該特徵的值從小到大去試,然後遍歷完所有特徵後,取到誤差最小的特徵及其分割值)。下面先給出公式,然後對這個公式做解釋:

上面的兩個公式是對數據集進行預劃分,R1和R2分別是劃分後的兩個數據集,j是選擇第j個變量,也就是我們熟悉的第j個特徵,s是劃分標準,x(j)是每個樣本中第j個變量的取值。上面已經將數據預劃分成了兩個數據集,下面就是要計算這兩個數據集的誤差:

上式中的中括號裏面的表示,在父節點劃分標準爲第j個變量,劃分點爲s的情況下,取兩個子集小誤差,裏面是兩個最小值的和,分別表示取一個合適的c1和c2,使子集的平方和最小,而這個c1和c2的取值分別是子集yi的平均數。而外層的循環,就是取合適的變量j,以及其合適的劃分標準s使劃分後的子集誤差最小。

所以以上過程是個不斷迭代的過程,不斷取j和其對應的s值,等取完所有的j和s後,得到誤差最小的那個j和s,作爲此次的劃分依據。

  1. 模型樹的生成

其實模型樹和迴歸樹生成過程差不多,只不過是葉子結點的損失計算方式不同。從上面的迴歸樹的生成過程可知,構建過程中每個葉子結點的預測值是yi的平均值,然後再用取平方誤差的方式。但是模型樹構建過程中,不用平均值作爲預測值,而是用節點的樣本擬合一條直線 ,然後計算 作爲預測值,放到迴歸樹的生成過程中,f(xi)就是所有yi的平均值。

具體的直線擬合的公式,可以參考我的另一篇文章《迴歸》中擬合直線的方式。這裏只給出計算公式:

是直線的擬合參數,X是樣本數據,y是樣本數據對應的結果。

  1. 決策樹的剪枝

其實迴歸樹和模型樹的剪枝過程和分類樹的剪枝過程類似,其損失函數都可以寫成以下的表達式:

,和分類樹不同的是預測誤差的計算方式不同,即C(T)的計算方式不同。 ,這裏f(xi)是預測值或者平均數。

 

不過有的書上損失的函數的損失函數的計算方法沒有考慮數的複雜程度,也就是沒有α|T|項,這個應該是不同的書上有不同的方法,得知道有這麼種方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章