從decision tree到bagging、boosting

本文主要講解決策樹模型,以及基於決策樹模型的bagging、boosting模型。

一、決策樹模型

  1. 決策樹模型概覽
    下面是一個決策樹的例子
    這裏寫圖片描述

決策樹可以看作是對多維空間的劃分,
這裏寫圖片描述
上面的二維空間中,橫線條代表以x作爲劃分的feature,而豎線條代表以y作爲劃分的feature。
結合上圖,決策樹的空間劃分有兩個特點,
1)給定數據集,可能的空間劃分可能會有相當多種,甚至是難以窮舉的。
2)所有的線條都是直線(平行於座標軸),沒有斜線。

雖然決策樹的空間劃分圖中所有的線條都是“直線“,沒有“斜線“,但是決策樹模型卻是一個典型的non-linear model。
這裏寫圖片描述
雖然決策樹中的每一條空間劃分都是直線,但是這些大量的直線組合起來,就起到了非線性的功能。如上圖中的最右子圖,可以認爲是一條豎線和一條水平行組合成的折線,對樣本進行了正確的分類。
從本質上講,機器學習就是找到邊界線(直線或曲線),對數據進行正確的區分。如果邊界線是直線,則對應的模型是線性模型,而如果邊界是曲線,則對應的模型是非線性模型。
這裏寫圖片描述

對於上圖中的分類任務,直線邊界可以對樣本進行正確的分類,決策樹模型也可以用由若干個直線組合成的折線對樣本進行正確的分類。

這裏寫圖片描述
上圖的例子,決策樹模型通過複雜的折線可以實現樣本的正確分類。
雖然上例中的折線過於複雜,而實際上一條簡單的直線就能搞定,看似決策樹模型是殺雞用牛刀,但那是因爲上例中的數據過於特殊,實際中可沒有這樣的好事,一條直線就能把樣本完美分類。

2.決策樹模型的訓練
從最簡單的決策樹模型開始,逐步深入討論決策樹模型的節點分裂過程。
最簡單的決策樹,那就是一個只有root的樹,輸出只有一個類別,或只有一個值。
這裏寫圖片描述
如果有兩個層級的決策樹呢?譬如由一個root和兩個children組成的決策樹,把所有樣本分成兩個集合,預測值有兩個。

我們怎麼衡量決策樹對樣本分類效果的好壞?那就是看葉子結點的不純度(impurity)。好的分類就是葉子結點的不純度較低。如果純度是50%,那該葉子結點就毫無分類作用(近乎瞎猜)。
這裏寫圖片描述
上圖中的例子中,右圖的分類導致總的不純度沒有降低,所以這樣的分類沒有意義。
這裏寫圖片描述
上圖中的分類還是沒能降低不純度。
而下圖中的分類則實現了樣本的完美分類
這裏寫圖片描述

這裏寫圖片描述

0/1 loss存在一些問題,比如容易想到的一個問題是,0/1 loss在計算每個葉子結點的loss的時候沒有考慮該葉子結點的樣本總數,所以對於0/1 loss來說,100個樣本分錯1個和10個樣本分錯一個的loss是一樣的。
這裏寫圖片描述
0/1 Loss 是離散的,對於訓練也是不利的。

那該用什麼樣的loss來代替0/1 loss呢?
先用伯努利方差來作爲loss,伯努利分佈的方差爲np(1p)np(1-p)
這裏寫圖片描述

其他的loss
這裏寫圖片描述

決策樹中最常見的loss是entropy loss,這個已經比較熟悉了。
決策樹的生長什麼時候停止呢?理論上,決策樹可以一直生長下去,直到train error爲0,但是這樣的決策樹可能會過擬合,
這裏寫圖片描述
爲了避免過擬合,加正則!
決策樹有哪些正則項方法呢?常用的正則項包括
1)max_depth,即樹的最大深度;
2)min_samples_split,即節點進行進一步分裂的最小樣本數(如果一個節點的樣本樹小於這個值,則不進行進一步的分裂);
3)min_samples_leaf,即葉子結點所包含的最小樣本數,如果一個節點分裂後的子節點包含的樣本數小於該值,則不進行分裂;
4)min_impurity_decrease,即不純度下降的最小值,如果對該節點分裂後不純度的減小值大於該值,則對該節點進行分裂;
5)min_impurity_split,即分裂的不純度最小值,如果該節點的不純度大於該值,則對該節點進行分裂。

二、bagging
1.bagging方法
模型的error由bias和variance組成
這裏寫圖片描述
決策樹是low bias、high variance的模型,除非你做很嚴格的regularization,但如果是做了過於嚴格的regularization(比如決策樹退化爲一個stump),效果可能還不如一個linear model。
決策樹是一種高度非線性化的模型,容易overfitting,決策樹模型的另一個特點是不同的訓練數據可能會長出很不同的決策樹。
如何降低決策樹的variance呢?bagging就派上了用場。
所謂bagging,就是Bootstrap Aggregation的簡寫,這裏的bootstrap,主要是針對樣本進行(又放回)抽樣。每次從總樣本SS中又放回的抽出數據集SS^{'}(二者包含的樣本樹相等),分別訓練決策樹模型,把諸多的決策樹的output取average或majority vote作爲最後的預測。
bagging主要應用於bias較低而variance較高的模型,而線性模型一般variance較低,所以加bagging往往收效甚微。

2.random forest

3.extremely randomized trees
ET或Extra-Trees(Extremely randomized trees,極端隨機樹)是由PierreGeurts等人於2006年提出。該算法與隨機森林算法十分相似,都是由許多決策樹構成。但該算法與隨機森林有兩點主要的區別:
1)隨機森林應用的是Bagging模型,而ET是使用所有的訓練樣本得到每棵決策樹,也就是每棵決策樹應用的是相同的全部訓練樣本;
2)隨機森林是在一個隨機子集內得到最佳分叉屬性,而ET是完全隨機的得到分叉值,從而實現對決策樹進行分叉的。
對於第2點的不同,我們再做詳細的介紹。我們僅以二叉樹爲例,當特徵屬性是類別的形式時,隨機選擇具有某些類別的樣本爲左分支,而把具有其他類別的樣本作爲右分支;當特徵屬性是數值的形式時,隨機選擇一個處於該特徵屬性的最大值和最小值之間的任意數,當樣本的該特徵屬性值大於該值時,作爲左分支,當小於該值時,作爲右分支。這樣就實現了在該特徵屬性下把樣本隨機分配到兩個分支上的目的。然後計算此時的分叉值(如果特徵屬性是類別的形式,可以應用基尼指數;如果特徵屬性是數值的形式,可以應用均方誤差)。遍歷節點內的所有特徵屬性,按上述方法得到所有特徵屬性的分叉值,我們選擇分叉值最大的那種形式實現對該節點的分叉。從上面的介紹可以看出,這種方法比隨機森林的隨機性更強。
對於某棵決策樹,由於它的最佳分叉屬性是隨機選擇的,因此用它的預測結果往往是不準確的,但多棵決策樹組合在一起,就可以達到很好的預測效果。
當ET構建好了以後,我們也可以應用全部的訓練樣本來得到該ET的預測誤差。這是因爲儘管構建決策樹和預測應用的是同一個訓練樣本集,但由於最佳分叉屬性是隨機選擇的,所以我們仍然會得到完全不同的預測結果,用該預測結果就可以與樣本的真實響應值比較,從而得到預測誤差。如果與隨機森林相類比的話,在ET中,全部訓練樣本都是OOB樣本,所以計算ET的預測誤差,也就是計算這個OOB誤差。

4.totally randomized trees
在每一顆樹內部的分裂節點山,都是隨機選取一個特徵及分裂點進行分裂。所以該種方法就不去尋找最優分裂點,是一種無監督的方法(而如果要尋找最優分裂點,則必須參考樣本的標籤,也就是有監督方法)。
該方法常用來做embedding,也就是把每個樣本無監督地映射到高維空間中,參考sklearn中的RandomTreesEmbedding函數
三、boosting
1.boosting方法
boosting展示了weak classifiers的強大力量。
shallow decision tree,很淺的決策樹,即只有少量的node的決策樹,擁有高bias低variance,對於這樣的決策樹,不同的訓練集得到的樹很相似,error偏大,模型的效果可能只是略好於random guessing。這樣的決策樹的典型例子就是decision stump,即只分裂一次的樹。
shallow decision tree在不同的訓練集上學到的樹很相似,例如下圖
這裏寫圖片描述
把shallow decision tree推而廣之,它屬於weak classifier的一種,所謂weak classifier就是準確率略高於0.5的分類器。

四、對比bagging和boosting
1.Bagging doesn’t work so well with stable models. Boosting might still help.

2.Boosting might hurt performance on noisy datasets. Bagging doesn’t have this problem

3.In practice bagging almost always helps.

4.On average, boosting helps more than bagging, but it is also more common for boosting to hurt performance.

5.The weights grow exponentially.

6.Bagging is easier to parallelize.

參考資料:
https://www.quora.com/What-are-the-differences-between-Random-Forest-and-Gradient-Tree-Boosting-algorithms

https://blog.csdn.net/zhaocj/article/details/51648966

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