ML:基礎學習
課程:機器學習基石
簡介:第十五講 Validation
目標:選出最小 \(E_{out}\) 的 \(H_{m^*}\) 對應的演算法為 \(A_{m^*}\)
但 \(E_{out}\) 未知,該如何選?
流程圖
訓練 \(N\) 個資料,需要花 \(N^2\) 的時間
若 \(K=\frac{N}{5}\),且有 25 個 model,請問需要花多少時間找到 \(g_{m^*}\) ?
那麼 \(e_n\) 如何接近 \(E_{out}(g)\) 呢?取平均的 \(E_{val}^{(n)}\)
訓練 \(N\) 個資料,需要花 \(N^2\) 的時間
若為 10-fold,且有 25 個 model,請問需要花多少時間找到 \(g_{m^*}\) ?
課程:機器學習基石
簡介:第十五講 Validation
Model 挑選的問題
假設有 M 個 models \(H_1,H_2,\cdots , H_M\) 對應的演算法則有 \(A_1,A_2,\cdots , A_M\)目標:選出最小 \(E_{out}\) 的 \(H_{m^*}\) 對應的演算法為 \(A_{m^*}\)
但 \(E_{out}\) 未知,該如何選?
- 用眼睛看?
- 不行
- 在第十二講提過,內部大腦運作後,加進去不見得比較好
- 最好的 \(E_{in}\)? \(m^* = \underset{1 \le m \le M}{argmin}(E_m=E_{in}(A_m(D)))\)
- 不行
- \(\Phi _{1126}\) 永遠比 \(\Phi _1\) 好,加了 \(\lambda \) 的反而比較差
- 假設在 \(H_1,H_2,\cdots , H_M\) 挑出 \(g_{m^*} \),相當於在聯集 \(H_1\cup H_2\cup \cdots \cup H_M\) 取,這會造成 model 複雜度上升 \(d_{VC}(H_1\cup H_2\cup \cdots \cup H_M)\)
- 最好的 \(E_{test}\)? \(m^* = \underset{1 \le m \le M}{argmin}(E_m=E_{test}(A_m(D)))\)
- 似乎可行
- \(E_{out}(g_{m^*}) \le E_{test}(g_{m^*})+O(\sqrt{\frac{log M}{N_{test}}})\)
第四講的 finite-bin Hoeffding \(\mathbb{P}[E_{in}(g)-E_{out}(g)>\epsilon ] \le 2Me^{-2\epsilon ^2N}\) - 該如何找出測試資料?不可能,存在於未來的考試
- 最好的 \(E_{val}\)? \(m^* = \underset{1 \le m \le M}{argmin}(E_m=E_{val}(A_m(D_{train})))\)
- 從原有的 \(D\) 分出一些資料 \(D_{val}\)
- 乾淨,未被任何演算法污染過
驗證
$$
E_{out}(g_m^-) \le E_{val}(g_m^-)+O(\sqrt{\frac{log M}{K}})
$$
流程圖
$$
E_{out}(g_{m^*}) \le E_{out}(g_{m^*}^-) \le E_{val}(g_{m^*}^-)+O(\sqrt{\frac{logM}{K}})
$$
由下圖可看出- \(E_{val}(g^-)\approx E_{out}(g^-)\)
- 需要較大的 K,才能保證兩者很接近
- \(E_{out}(g^-)\approx E_{out}(g)\)
- 需要較小的 K,這樣訓練的資料才會多,才能保證兩者很接近
- 實務經驗上通常 \(K=\frac{N}{5}\)
訓練 \(N\) 個資料,需要花 \(N^2\) 的時間
若 \(K=\frac{N}{5}\),且有 25 個 model,請問需要花多少時間找到 \(g_{m^*}\) ?
$$
\begin{align*}
T &= 25*(\frac{4}{5}N)^2+N^2\\
&= 17N^2\\
\end{align*}
$$
可以發現,若直接找最小的 \(E_{in}\) 反而時間還花得比較多 \(25N^2\)
Leave-one-out Cross Validation
假設 K=1,\(D_{val}^{(n)}={(\mathbf{x}_n,y_n)}\) 且 \(E_{val}^{(n)}(g_n^-)=err(g_n^-(\mathbf{x}_n),y_n)=e_n\)那麼 \(e_n\) 如何接近 \(E_{out}(g)\) 呢?取平均的 \(E_{val}^{(n)}\)
$$
E_{loocv}(H,A)=\frac{1}{N}\sum_{n=1}^{N}e_n=\frac{1}{N}\sum_{n=1}^{N}err(g_n^-(\mathbf{x}_n),y_n)
$$
$$
\begin{align*}
\underset{D}{\mathbb{E} } E_{loocv}(H,A)&= \underset{D}{\mathbb{E} } \frac{1}{N}\sum_{n=1}^{N}e_n\\
&= \frac{1}{N}\sum_{n=1}^{N}\underset{D}{\mathbb{E} }e_n\\
&= \frac{1}{N}\sum_{n=1}^{N}\underset{D_{train}}{\mathbb{E} }\underset{(\mathbf{x}_n,y_n)}{\mathbb{E} }e_n\\
&= \frac{1}{N}\sum_{n=1}^{N}\underset{D_{train}}{\mathbb{E} }\underset{(\mathbf{x}_n,y_n)}{\mathbb{E} }err(g_n^-(\mathbf{x}_n),y_n)\\
&= \frac{1}{N}\sum_{n=1}^{N}\underset{D_{train}}{\mathbb{E} }E_{out}(g_n^-)\\
&= \frac{1}{N}\sum_{n=1}^{N}\overline{E_{out}}(N-1)\\
&= \overline{E_{out}}(N-1) \\
\end{align*}
$$
從下圖看出,使用 \(E_{loocv}\) 比 \(E_{in}\) 好
缺點 Leave-one-out Cross Validation
- 極度花時間
- linear regression 有公式解,故可實現
- Error 不夠穩定
- 在實務上不常使用
V-Fold Cross Validation
想法與 leave-one-out 一樣,但不是只拿一筆,而是切成十等份,然後輪流做為驗證
$$
E_{cv}(H,A)=\frac{1}{V}\sum_{v=1}^{V}E_{val}^{(v)}(g_v^-)\\
m^*=\underset{1 \le m \le M}{argmin}(E_m=E_{cv}(H_m,A_m))
$$
實際經驗上,通常切為十份訓練 \(N\) 個資料,需要花 \(N^2\) 的時間
若為 10-fold,且有 25 個 model,請問需要花多少時間找到 \(g_{m^*}\) ?
$$
\begin{align*}
T &= (\frac{9}{10}N)^2*10*25 +N^2\\
&= \frac{81}{100}N^2*10*25 +N^2\\
&= \frac{81}{2}N^2*5 +N^2\\
&= \frac{405}{2}N^2 +N^2\\
&= \frac{407}{2}N^2\\
\end{align*}
$$
結論
- 驗證工具選用
- 若計算上允許,V-Fold 會比只有一次的驗證還好
- 5-Fold or 10-Fold 通常已足夠好,不需用到 Leave-One-Out
- 實際流程
- 訓練:在各個 hypotheses 選出第一名
- 驗證:針對每個第一名測試,並再選出最好
- 測試:實際上戰場,不做任何選擇
- 驗證還是比測試樂觀,因有選擇就可能存在污染的風險
驗證的表現再好,都沒用,只有測試的表現才最重要
留言
張貼留言