這次主要想寫兩篇,一篇把決策樹的相關思想和方法解釋清楚,另外一個說一下ensemble形式的決策樹,random forest,依據主要是breiman的論文。
這篇講決策樹(主要以cart為例,因為random forest的大多實現也是根據cart)
1、cart的生成。
cart的全稱是classification and regression tree,意為分類回歸樹。也就是說這類決策樹既可以解決分類問題,也能解決回歸問題。因此針對分類樹和回歸樹,cart有兩種生成方式。這里要注意,樹是根據訓練集數據依據一定的規則生成,對於測試集數據,只需要將數據從根節點輸入,像流水一樣,沿着應該走的管道,到達所預測的類別或者回歸數值。
針對任何一種機器學習模型,其訓練過程都大同小異,目的都是為了使訓練集數據盡可能被較好地分類和擬合。cart也不例外,無論是分類樹還是回歸樹,無外乎都需要在生成過程(訓練過程)使得某些誤差最小,最恰當的安排訓練數據。下面分別說明。
(1)分類樹的生成。
對於一份lable為分類變量的訓練集,存在一個指標叫做基尼指數,只需要知道基尼指數是概率分布的其中一種表示
pk表示某一類別的樣本數占總樣本數的比例。再說一次,只要是分類性質的樣本集,本身就存在基尼指數這個屬性。
然后就是到底按照哪個特征的哪個值進行二分訓練集,注意,cart樹的每一步都是二分,沒有多分情況。
沒有簡單的辦法,只有窮舉,用每個特征(這里是A)的每個可能的值(這里是a)進行二分,每分一次就會產生兩份樣本,然后按照上式求每一次的綜合基尼指數,最后選擇基尼指數最小的那個分法就好了。為什么選擇最小的呢?我們看看基尼指數的含義,實質上表示的是一份樣本集的純凈程度,拿二分類類型的樣本集來說,這個算式在什么情況下最大?最小?當所有樣本都是一類的時候,最小,為0;當一半一半時,最大,為2*0.5^2。所以,越小的基尼指數,意味着這次二分最大程度保證了分開的兩份樣本集各自的純凈度,這也正是我們想要的。
2、回歸樹的生成
對應與分類樹的最小化基尼指數准則,回歸樹該怎么確定哪個分法才最好呢?最小二乘!經典的最小二乘算法!
對於每一個特征的每一個值,我們依然都嘗試一遍,每一次,都算一下5.21式。c1,c2分別是分開的兩份樣本的各自均值,也就是能使擬合誤差最小的預測值。直至滿足停止條件。
(3)關於停止條件。
對於分類回歸樹來說,停止條件可以有多種,也可以人為設定。比如對於分類樹,可以當所有特征都用盡時停止,也可以當某個樹杈包含的所有樣本都純凈時停止。對於回歸樹,可以認為設定當某個樹杈包含的樣本個數或者方差小於某個閾值時停止。
2、cart的剪枝以及其它的剪枝算法。
這里介紹兩種主要的剪枝算法--reduced error prune and cost complexity prune(ccp)
插一句,為什么要剪枝。可以想象一下,對於決策樹來說,它可以把訓練集訓練的100%准確,就是完全擬合,但是對於任何新的數據,它會產生巨大的誤差。因此一顆生長完全的決策樹其實是overfitting的,必須要通過剪枝來降低它的泛化誤差。
另外,剪枝算法通常都需要有驗證集數據的幫助。
(1)reduced error prune
這種剪枝算法是最簡單最直觀的。它完全脫離訓練集數據,采用新的驗證集數據去判斷某一個subtree該不該替換成leaf。首先,先用完整的未剪枝的樹把驗證集測試一遍,肯定有很多錯誤。這時候,針對每一個node,都試着剪掉一遍,然后每剪掉一個node,都再測試一遍,看看是否提高了准確度,最終選擇那個提高准確度最高的node,剪掉它。這叫做一輪剪枝,然后繼續重復,每次剪一個node,直到准確度不再有提高為止。
(2)ccp
這種剪枝算法就是cart樹使用的。
這種算法並沒有完全脫離訓練集。第一步先依據訓練集,嘗試剪掉每個節點(有歧義,其實是每次只剪一個,比如節點A,B,C,先剪掉A,保留B,C;再剪掉B,保留A,C....)
在訓練集上計算以下指標a:
取最小的那個a對應的節點,剪掉!,這時候生成了第一個子樹(N-1個節點,原樹N個)。重復以上步驟,直到最后只剩下根節點,作為最后一個子樹。
這時候,我們有了一系列的子樹,然后第二步:
驗證集登場,這時候,只需要使用驗證集對所有子樹走一遍,取誤差最小的那棵樹,就是我們最終需要的樹!
可以看出,這個指標a,既聯系了tree size,又聯系了error,最終的optimal a相當於一定程度上給決策樹加上了復雜度的懲罰項,也就是做了相應的正則化。既減少了誤差,又平衡了復雜度。
好了,大概就是這些!
下一次寫一點random forest。