1. 程式人生 > >CS229 Machine Learning學習筆記:Note 5(正則化與模型選擇)

CS229 Machine Learning學習筆記:Note 5(正則化與模型選擇)

n) 不重復 所有 交叉 war 比例 class 搜索 machine

模型選擇

假設目前有d個學習模型構成的集合\(\mathcal M=\{M_1,\cdots,M_d\}\),訓練集S,下面介紹幾種選取模型的方法

Hold-out cross validation(Simple cross validation)

  • 1.按一定比例隨機將原始訓練集S分為訓練集\(S_{train}\)和交叉驗證集\(S_{CV}\),一般比例為7:3

  • 2.依次用\(S_{train}\)訓練每個模型

  • 3.用\(S_{CV}\)上的經驗誤差估計每個模型的泛化誤差,最終選取\(h_i\)\(S_{CV}\)上的經驗誤差\(\hat \varepsilon_{S_{CV}}(h_i)\)

    最小

但是這一方法在訓練過程中丟失了一部分數據(\(S_{CV}\)),在原始訓練集大小很小時,這一方法並不適用

K-fold cross validation

  • 1.隨機將大小為m的原始訓練集S劃分成k個互不重復的子集\(S_1,\cdots,S_k\),每個子集有\(\frac m k\)個訓練樣本。
  • 2.對每個模型\(M_i\),按以下方法估計泛化誤差:

    For j=1...k{
    ____用除\(S_j\)外的其他數據訓練\(M_i\)得到假設函數\(h_{i,j}\)
    ____在\(S_j\)上測試\(h_{i,j}\)得到經驗誤差\(\hat \varepsilon_{S_j}(h_{i,j})\)


    }
    \(\hat \varepsilon_{S_j}(h_{i,j})\)的平均值為對模型\(M_i\)的泛化誤差的估計

一般k=10,但當原始訓練集大小實在太小的時候,會選擇極端的k=m,以使得每次訓練時丟掉最少的數據,這種交叉驗證方法叫Leave-one-out cross validation

特征選擇

當訓練樣本的特征數n遠大於訓練樣本數目m時,即使使用只有n個左右參數的線性分類器(如感知機),根據Note 4的結論,至少要有\(O(n)\)個訓練樣本才能使模型最終表現良好。因此,此時面臨嚴重的過擬合問題。

假設特征中只有少量特征與學習任務有關,現在要從n種特征中保留其中若幹種特征。最簡單粗暴的辦法就是枚舉所有\(2^n\)

種選擇方案,但這種方法顯然計算量太大。

下面介紹幾種高效的特征選取算法。

  • 1.初始化\(\mathcal F\)為空集
  • 2.執行以下循環:

    Repeat until \(|\mathcal F|=n\)\(|\mathcal F|\geq t\)(閾值){
    ____For i=1...n{
    ________若\(i \notin \mathcal F\),令\(\mathcal F_i=\mathcal F\cup \{i\}\),用上述的某種交叉驗證方法估計保留特征\(\mathcal F_i\)並訓練後,得到的泛化誤差
    ____}
    ____選取泛化誤差最小的\(\mathcal F_i\),令\(\mathcal F:=\mathcal F_i\)
    }

CS229 Machine Learning學習筆記:Note 5(正則化與模型選擇)