[english][all] 如同本章第一節的人口曲線擬合範例所述,擬合多項式的次數會對新資料(未出現於訓練集之中的資料)的預測產生很大的影響,如下所述:
- 如果多項式的次數過小,則模型的複雜度可能過低,這會導致模型可能無法表示人口成長曲線的特性。
- 如果多項式的次數過高,則模型的複雜度可能過高,這會導致模型除了會抓到訓練資料的特性外,也很容易受到訓練資料中的雜訊所影響,導致模型對未見過資料的預測能力降低。
因此我們需要一個系統化的方法來決定擬合多項式的次數,此過程統稱為模型選取(Model Selection),特別是在用於系統鑑別(System Identification)或是樣式辨認(Pattern Recognition)等領域時。在本節中,我們將描述一個適用於多項式擬合的模型選取方法,此方法稱為「留一測試法」(Leave-one-out Test),亦可用於一般的迴歸問題。
假設我們有一個資料集 $D$,包含了 $n$ 個輸入輸出對: $$ D=\{ (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) \} $$
我們可以定義一個模型 $f()$ 對於此資料集 $D$ 的 RMSE (root-mean-squared error): $$ rmse(f, D) = \sum_{i=1}^n |y_i-f(x_i)|^2 $$
此外,由
polyfit 指令所回傳的多項式可以表示如下: $$ f = polyfit(D, r)$$其中 $D$ 是用於擬合的資料集,$r$ 則是多項式的次數。
在現實世界中,資料集 $D$ 中的資料筆個數是有限的,因此我們必須對資料集中的每一筆資料善加應用(用於模型建置以及模型驗證),以發揮此資料集的最大效力。一個非常直覺的方法,是先隱藏一筆資料,然後使用所有其他資料來建立模型,再用之前所隱藏的資料來驗證模型,並記錄其 RMSE。假設我們有 $n$ 筆資料,則我們會建立 $n$ 個模型,得到 $n$ 個 RMSE,在求其平均 RMSE,稱為 Leave-one-out RMSE (LOORMSE)。對於不同的結構參數(例如多項式的次數),我們可以建立不同的模型,並計算其 LOORMSE,最後我們選取的模型結構參數,會使得 LOORMSE 為最小。特別需要注意的是:LOORMSE 只用於選擇模型的結構參數(例如多項式的次數),確定結構參數後,我們還需使用最小秤方法來決定最佳參數值。
為了更清楚地說明「留一測試法」,我們可以定義兩種 RMSE:
- Training RMSE: $t(r)=\sum_{i=1}^n rmse(f_i, D-\{(x_i, y_i)\})$,其中 $f_i$ 是由資料集 $D-\{(x_i, y_i)\}$ 所建立的模型。(另一種表示法:$f_i=polyfit(D-\{(x_i, y_i)\}, r)$.)
- Validating RMSE: $v(r)=\sum_{i=1}^n rmse(f_i, \{(x_i, y_i)\})$,其中 $f_i$ 是由資料集 $D-\{(x_i, y_i)\}$ 所建立的模型。(另一種表示法:$f_i=polyfit(D-\{(x_i, y_i)\}, r)$.)
請特別注意,$t$ 和 $v$ 都是多項式次數 $r$ 的函數(或是更一般而言,是迴歸模型複雜度的函數)。因此我們可以畫出 $t$ 及 $v$ 對 $r$ 的圖形,並選出一個 $r$ 值使得 validating RMSE 為最小值。(相關實作可參考本章相關習題。)
MATLAB程式設計:進階篇