第10章-基於樹的方法(2)-樹的剪枝
###10.8 通過剪枝得到最優規模的樹
之前我們討論的都是如何生成樹,接下來我們要講解的是如何進行剪枝。
我們令一個樹 T 的誤分類誤差的期望為
.
回想一下,我們是用再代入誤差估計,估計的
,即
再來想一下,10.3中所講的,r(t)是葉節點t的誤分類概率,等於
1-‘基於訓練集得到的葉節點t的頻率最大的類別點對應的概率’, 即
對於整個樹,對葉節點的誤分類比例進行加權累計求和,就得到了總的誤分類概率。
並且,在10.3中,我們提到過,再代入誤差是有趨於更小的,即樹傾向生成更大的規模。我們證明了,父節點的誤分類概率一定大於等於子節點誤分類概率加權求和。
以上說明,如果我們用再代入誤差最小化為策略時,我們總是傾向於選擇更大的樹,且無法解決減輕過擬合的影響。
(例子 略)
###10.8.1 剪枝的預備知識
首先,我們先要生成最大的樹,用
來表示。
其次,設定停止生成樹的閾值並不是那麼重要。因為,只要樹足夠大,何時停止生成樹影響不大。最後,樹也都會在剪枝過程中被修減。下面列出幾種決定何時停止生成樹的方法:
- 一直生成樹,直到所有的葉節點都是"純的"(只屬於一類)
- 一直生成樹,直到所有的葉節點之和都不超過給定的閾值
- 只要樹足夠大,原始樹的大小就會變得不那麼重要
以上,重點就是要確保剪枝之前樹要生成的足夠大。
最後,我們需要預先進行一些定義:
- Descendant: 如果一個節點 t′ 可以從一個節點 t 沿著一個連續路徑向下派生出來,我們就說,t’是t的派生節點(Descendant)
- Ancestor: 在1中的情況中,反過來說,t 是 t’的Ancestor節點
- A branch : 在一個樹T 中,以一個節點t(t∈T)為根節點衍生出來的所有子(葉)節點,包括t點本身,構成了
- 從樹T 中剪枝去掉 ,意味著從T中去掉t節點以及t節點派生出來的所有節點,可用 表示。
- 如果T′ 是樹T 已經剪枝成功後的狀態,那麼T’ 被稱為T的剪枝後的子樹,且
即使對於適中規模的樹來說,子樹的數量都是非常巨大的。因此,我們無法窮盡遍歷所有子樹找到最優的情況。而且,我們通常也沒有獨立的測試集為有偏的選擇提供服務。
我們需要更聰明的辦法,這個辦法需要滿足以下兩點:
- 某種程度上看,子樹要是最優的
- 且,最優子樹的搜尋,計算量要保證簡單易行
10.8.2 最小代價-複雜度的剪枝
如之前討論的,再代入誤差 R(T) 並不是一個很好選擇子樹的度量方式,因為它會傾向選擇更大的樹。我們需要加入對複雜度的懲罰,懲罰項要傾向於更小的樹,以此來平衡再代入誤差 R(T)。
代價-複雜度的定義:
對於任一子樹
, 定義樹的複雜度為
, 表示樹的葉節點(終節點)的個數。定義實數 α≥0,被稱作複雜度引數 ,則定義代價-複雜度
為
葉節點越多,複雜度也就越大,因為我們把空間劃分成子區域的方式會有更多,所以,會有更大的可能性更適合訓練集的資料。除了複雜度,樹的規模也是非常重要的。而這些問題都轉化為用複雜度引數 α 來進行調整了。
最後,我們就說用上述的代價複雜度公式進行樹的剪枝的。當 α=0 時,複雜度相當於被去掉,退化成再代入誤差。所以,公式會選擇生成最大規模的樹。當 α 接近無窮大時,樹的規模將為1,只有單一根節點。
通常,如果預先給定α 後,就能夠找到子樹T(α),使得代價複雜度 Rα(T) 最小。
那麼,對於任意一個 α,最小化子樹總是可解的。因為只有有限多個子樹。
兩個問題:
- 存在一個唯一的子樹 ,滿足 最小麼?
- 在最小化子樹的序列中,T1,T2,⋯每個子樹能否通過對上一個子樹剪枝得到,即,這些子樹是巢狀的麼?
如果最優的子樹都是巢狀的,那麼計算量將會大幅下降。我們先找到 ,然後找 時,不需要再從頭開始,而是直接從 開始(因為T2是T1的子樹,是巢狀的)。隨著 α 的增加,我們將對越來越小的樹進行剪枝。
定義:對於引數α,最優最小樹 :
- 如果 ,那麼 $ T(α)≤T$,即,如果對於同樣的 α , 存在其他的樹的代價複雜度同樣也達到最小,那麼其他樹的規模一定是小於等於 .
根據上述定義,如果T(α)存在,那麼一定是唯一的。之前我們也討論過最小子樹總是存在的,因為只有有限個子樹。更近一步,我們可以證明最小子樹總是存在的。這點是很重要的,因為一個樹比另一個樹小,說明它是是巢狀在大一點的樹中的。
剪枝的開始點不是 (所有葉節點都是純的), 而是 , 是 的最小子樹(最小損失複雜度),且滿足:
得到 的步驟如下:
首先,先來看最大樹 ,然後從同一個父節點劃分出兩個葉節點