# Random Forest = Bagging + Decision Tree
- BAGging 是藉著多個 $g_{t}$ 團結在一起減少消除[單個 $g_{t}$ 會有的 Variance](https://hackmd.io/@ShawnNTU-CS/BywPOgyan#bias-%E5%92%8C-variance),所以 Variance 低。
- Decision Tree 只要得到的 $\mathcal{D}$ 有一些些的不同,下刀的地方就會不一樣,所以 Variance 很大
- $Variance=E[(X-\mu)^{2}]$
- 資料越小就更容易發生,尤其是 Fully-grown Tree。
所以我們就用 Bagging 的方式,把一堆 fully-grown C&RT Decision Tree 結合起來消除 Variance,也就降低了 overfitting 發生。
由於 Bagging 的特性,所以容易平行化;並且決策樹又很有效率,所以就是效率再效率。
:::warning
對隨機性很敏感可以回顧 [第七週 Blending and Bagging](https://hackmd.io/@ShawnNTU-CS/BywPOgyan)
:::
# Random Subspace
Bagging 的特色是在 Data 上 randomness。
另一種製造 randomness 的方式是在 feature 上;也就是不需要每個維度都用,只挑某幾個維度。
$$
\mathcal{Z} \in \mathbb{R}^{d^{'}}\\
\mathcal{X} \in \mathbb{R}^{d}
$$
是一種新的**特徵轉換**,可知 $\mathcal{Z} \in \mathcal{X}$;通常 $d^{'} \ll d$,可以讓 stump 容易切許多。
Random Subspace 也可以用在其他演算法,例如 SVM。
## re-sample when Branching
除了轉換一次後就用那些維度到底,RF 的作者建議可以改在 Branching 的時候就轉換一次維度。
例如總共 100 個維度,第一次可能挑第 1, 3, 5, 7, 9 維度,第二次可能挑第 2, 4, 6, 8, 10 維度。
# 原本的投影 & 更強的投影
原本的 Subspace 特徵轉換可以看做是一個投影的動作:
$$
\phi(\mathbf{x})=\mathbf{P}\cdot \mathbf{x}\\
\mathbf{P}=
\begin{bmatrix}
1 & 0 & \dots & 0\\
0 & 1 & \dots & 0\\
\vdots & \vdots & \ddots & 0\\
0 & 0 & \dots & 1
\end{bmatrix}
$$
可以知道 $\mathbf{P}$ 的每 row 都是各個維度的單位方向 **Natural Basis**。
上面的 $\mathbf{P}$ 是全部的維度都選,所以是個 $d\times d$ 矩陣,如果要投影到 Subspace,就會變成 $d^{'}\times d$ 矩陣,看你想保留幾個維度。
## 更強的投影 combination
每個 row 不一定要是 natural basis,可以換成某幾個維度的線性組合,也就是說讓 row 可能長的像:
$$
\mathbf{p}_{row}=[0,0,c_{1},c_{2},0,...,,c_{j},0]
$$
可知原本的投影是現在的 special case,也就是每個 row 只含有一個值為 1。
## Perceptron-like
所以每次分枝的時候,先將原本的維度,投影到某幾個自己合成的維度,然後從中挑選一個做 stump。
這樣其實就是之前的 perceptron,而 stump 在決定最終的常數值落在哪裡。
:::warning
RF = bagging + radom-combination C&RT,到處充滿了隨機。
:::
:::success
像這樣轉換到比較小的維度可以對照之後 [深度學習](https://hackmd.io/@ShawnNTU-CS/HkIxZtv6h) 提到的 [線性編碼機和PCA](https://hackmd.io/@ShawnNTU-CS/HkIxZtv6h#Principal-Component-Analysis--PCA)。
一個是用來製造隨機性,一個是用來挑選最好的表現方式。
:::
---
# out-of-bag / OOB
Bagging 時沒有被選到的資料叫做 out-of-bag examples;OOB 資料就很像 Valid 沒有被選到的資料,所以一樣可以拿來驗證。
但是我們其實沒有必要驗證 $g_{t}$,因為最後會把他們合成 $G$,我們想驗證的是 $G$。
## $E_{oob}$
所以可以去紀錄 $\mathbf{x}_{n}$ 在哪些 $g_{t}$ 沒有被用到,由這些 $g_{t}$ 組成的 $G^{-}_{n}$ 來對 $\mathbf{x}_{n}$ 預測。
最終把全部可以製造的 $G^{-}_{n}$ 預測的錯誤進行平均,所得到的錯誤平均就是 $E_{oob}$。
$$
\frac{1}{N}\sum_{n=1}^{N}err(y_{n},G^{-}_{n}(\mathbf{x}_{n}))
$$
很像之前的 $E_{loocv}$,都一樣是對「單筆」資料預測後取平均值。
:::warning
$E_{oob}$ 在 RF 實務上通常可以很準確的衡量 $G$ 的表現。
:::
## self-validation
像這樣不需要格外獨立 valid 資料區的特性就叫做 self-validation;並因此少了將 $g^{-}$ 訓練回 $g$ 的動作,更有效率。
---
# Feature Selection
降維打擊,除去冗餘的 redundant,或不相關的 irrelevant 維度。
可以依照特徵的重要性由大到小排列出來,選前面幾大留下來。
- 好處
- 較少的維度讓訓練更有效率
- 如果選到好的維度,代表可以移除掉 noise,因此增加 generalization 減少 overfitting
- 更有助於解釋。
- 壞處
- 要計算怎麼做才是好的選擇,找到之前的計算量可能已經很大,反而更沒效率
- 有可能不小心選到剛好 overfit 的維度組合。
- 因此導致了錯誤的解釋。有可能只有有關係,但其實沒有因果關係。
C&RT 決策樹和 AdaBoost-Stump 因為用了 Stump 所以算是內建的 Feature Selection。
:::success
像這樣轉換到比較小的維度可以對照之後 [深度學習](https://hackmd.io/@ShawnNTU-CS/HkIxZtv6h) 提到的 [線性編碼機和PCA](https://hackmd.io/@ShawnNTU-CS/HkIxZtv6h#Principal-Component-Analysis--PCA)。
:::
# 特徵重要性
可以以各維度的權重的大小做為其重要性。
- 所以如果是一個線性模型可以很容易算出特徵重要性。
- 但是非線性模型就不容易算出出重要性
不過 RF 雖然是非線性模型,但是 Permutation test 可以簡單地評估出特徵重要性。
# Permutation test
- 如果一個維度很重要,那麼將該維度加上雜訊,表現會下降。
- 要注意加上雜訊不能用直接修改值的方式,因為會影響原本值的分布。
- 可以透過把值洗牌的方式來達到雜訊的效果,同時不失去原本資料的分佈
- 假設要洗牌第 n 個維度
- 那麼可能 $x_{1126,n}$ 變成 $x_{6211,n}$,$x_{2611,n}$ 變成 $x_{1126,n}$ ...。
## Importance 函數
對於非線性模型可以透過表現函數算出重要性:
$$
importance(i)=performance(\mathcal{D})-performance(\mathcal{D}^{(p)})
$$
$\mathcal{D}^{(p)}$ 就是經過 Permutation test 洗牌的資料。
普遍來說任何非線性模型表現函數可以使用 $E_{val}$ 來比較洗牌前後的差異,錯誤率變越高通常代表該維度越重要。
## 近似
由於 RF 有 OOB,所以相比其他需要 Validation 的非線性模型方便許多。
但是如果嫌訓練兩次很麻煩,可以用近似的方法,改成對原本 $\mathcal{D}$ 做 OOB 驗證時,同時對 $\mathbf{x}_{n}$ 洗牌的動作。
OOB 是一個 $\mathbf{x}_{n}$ 會有相對應的 $G^{-}_{n}$,所以只能對那些 $\mathbf{x}_{n}$ 進行洗牌。
- 所以不是對全部資料都洗牌,因為可能有資料沒有相對應的 $G^{-}_{n}$
- 由於是對 Valid 的動作進行洗牌,這樣就不用重新訓練。
---
# 特色
可以做出平滑且類似 large margin 的結果;並且 Bagging 的投票機制可以消除 noise。
>或者說消除掉 Variance
# 樹大便是美
幾乎全部的理論都會告訴你,越多棵樹越好,因為這樣會[逼近我們所要的 $\bar{g}$](https://hackmd.io/QKHftqsISyO7gz-nsDVLUQ?view#bias-%E5%92%8C-variance):
$$
\bar{g}=\lim_{T\rightarrow \infty}G
$$
## 要幾顆樹
由於 RF 會受隨機過程影響而不穩定,所以直到 $G$ 的結果受 random seed 的影響很小的時候就可以了。
>也就是說我們消除了大部分的 Variance