1. 程式人生 > >過擬合與模型選擇

過擬合與模型選擇

欠擬合是指模型不能很好的捕獲到資料特徵,不能很好的擬合數據,學習能力底下。解決方法:增加模型的複雜度

    

  過擬合是指模型不僅僅學習了資料集中的有效資訊,也學習到了其中的噪音資料,使得模型在訓練集上的表現非常好,但是對於測試集的預測效果很差。解決方案:

  (1) 導致過擬合的一個原因可能是由於資料不純、包含大量的噪聲資料,這時候我們需要重新清洗資料

  (2) 增加訓練資料的樣本量

  (3) 採用正則化方法,降低模型引數複雜度(引數大小和引數量),從而降低模型複雜度

  (4) 神經網路中常採用dropout方法:在訓練的時候讓神經元以一定的概率不工作。

    

  如何判斷你的模型是欠擬合還是過擬合?通常的做法就是將你的訓練資料集拆分成訓練集和驗證集,通過觀察訓練誤差和驗證誤差的情況來判斷模型對訓練資料的擬合情況。

正則化

  監督學習問題無非就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們模型更好的擬合數據,而規則化引數是為了防止模型對資料的過分擬合。前面我們也提到,當我們的模型處於過擬合時,我們可以通過在模型損失函式上新增正則化項,用於控制模型引數的複雜度,從而得到更為簡單的引數,獲得更為理想的模型。可見,正則化的一個根本目的就是使我們可以選擇出那種既能夠很好的擬合數據,相對來說又最簡單的模型。

  線性迴歸正則化後的表示式為:

    

 這裡的代表正則化係數,是我們常說的正則化項,正則化項常用的形式有哪些呢?

  該範數表示的是引數向量中非0元素的個數。這時候我們可以試想我們用範數正則化一個引數矩陣

的話,就相當於讓中值為0元素非常多,也就是讓引數矩陣稀疏。

      

 該範數表示的是引數向量中各元素絕對值之和範數也稱為稀疏規則運算元。我們試想用範數正則化一個引數向量的話,就相當於讓中每一個元素都很小甚至是等於0。

      

那問題來了Question1:範數為什麼可以實現稀疏

  加入範數後的代價函式可以表示為無約束形式

      

  最小化又等價於約束問題下最小化

      

   這裡我們假設引數向量只有兩個元素,我們可以在一個平面上畫出的等高線圖以及約束條件的表示,如圖

      

  我們知道等高線越向外損失越大(凸函式),約束在圖上可以表示為如圖的正方形,兩圖形的第一個交點就是代價函式取最小時的情形。兩圖形第一個交點相交於正方形頂角上的概率遠遠大於相交於其他位置的概率(很明顯)。頂點座標只有一個引數不為0,另一個引數為0,也就是更加容易產生稀疏。在更高維的情況下也是如此,因此

會使得引數更多的為0,只是又較少的一部分不為0。的這種特性使它可以應用於特徵選擇。

  前面我們也提了範數也可以實現稀疏,那問題又來了Question2:為什麼實現稀疏上基本上是使用範數而很少使用範數呢?這主要有兩個原因:

  (1) 範數很難優化求解

  (2) 範數是範數的最優凸近似,並且範數更容易優化求解

  範數是引數向量中各元素的平方和再開平方。在防止過擬合問題上範數被廣泛的應用。

    

  那麼問題來了Question1:是什麼使得它可以非常好的解決過擬合問題呢?我們再來試想:若我們最小化正則項,會使得引數向量發生什麼樣的變化? 會使得引數向量的每一個元素都很小,都接近於0,而非等於0(與最大的不同),這樣就成功的降低了模型引數複雜度,從而避免了過擬合現象的出現。那麼問題又來了Question2:為什麼會使得引數元素都趨向於0,而非等於0呢?我們像那樣給出代價函式的約束等價問題:

      

該約束問題在圖形上的表示,如下:

    

不同,的約束條件表示為一個圓形,兩個圖形的第一個交點大多不會出現在非座標軸上,因為要想交於座標軸那麼的圓心也必須在座標軸上,這種情況是很少發生的,故不會擁有的那種使得引數大部分都是0的特性。而最小化正則就會使得引數元素都很小,也就是都趨於0。

總結:會趨向於產生少量的特徵,而其他特徵的引數(權值)都為0,可以用來做特徵選擇; 而會選擇更多的特徵,這些特徵的引數都趨於0,廣泛應用與過擬合問題。

補充:Question1:其實除了有防止過擬合的特性,它還可以使得梯度下降的求解過程變得穩定而迅速,這又是如何實現的呢?

我們前面給出了加入正則項後的線性迴歸代價函式的表示形式:

    

    

我們對其求導後得到了梯度下降的權值更新公式:

    

這時我們發現中的是第j個引數的符號,是個定值; 而中的是變得。故,正則化後的引數更新速度會隨著引數的更新而變動,引數大更新快,引數小更新慢,所以它會進一步優化梯度下降的求解。

 Question2:正則化係數要如何確定呢?

可以嘗試一系列資料 0, 0.01, 0.02,0.04, 0.08, ……, 10.24(10),…… 【2倍關係】

每一個的取值都會得到一組引數,這樣會得到多組引數向量

然後用每一組引數計算檢驗集的誤差

  

我們選擇檢驗集的誤差最小的那個,作為最優取值。