1. 程式人生 > >Stanford機器學習筆記-3.Bayesian statistics and Regularization

Stanford機器學習筆記-3.Bayesian statistics and Regularization

3. Bayesian statistics and Regularization

Content

  3. Bayesian statistics and Regularization. 

    3.1 Underfitting and overfitting. 

    3.2 Bayesian statistics and regularization. 

    3.3 Optimize Cost function by regularization. 

      3.3.1 Regularized linear regression. 

      3.3.2 Regularized logistic regression. 

    3.4 Advanced optimization.

key words: underfitting, overfitting, regularization, bayesian statistic

3.1 Underfitting and overfitting

前面已經學習了線性迴歸模型logistic迴歸模型,它們在很多方面都有應用,例如利用線性迴歸模型(也可以是多項式)進行房價預測,logistic迴歸模型垃圾郵件分類等。但是,在應用過程中可能存在一些問題,例如過擬合(overfitting),與之相對的就是欠擬合(underfitting)

所謂過擬合,簡單的說就是我們設計的學習模型對訓練樣本的學習能力太強大了,導致對訓練樣本擬合的太好。此時可能同學就有疑問:擬合得很好不是好事嗎,為什麼還是問題呢?注意,我們設計學習模型的目的並不是對訓練樣本擬合就ok了,我們訓練模型是為了它能夠對不在訓練集中的資料有較好的預測。訓練集是我們所研究的全體資料集的一個子集,我們認為它應該有像其他屬於全體資料集的特徵,但同時,它也通常有它自己獨有的特徵。所以,如果學習模型的學習能力太強,學到了訓練集獨有的特徵,對訓練樣本擬合得太好,也就是過擬合,那麼它可能對不屬於訓練集但屬於我們研究的資料集的資料預測得不好,也就是泛化能力

(generalization)下降。而欠擬合,就是對訓練樣本擬合得太差,連我們所研究的資料集都具有的特徵都沒有學到。從數學上分析,欠擬合將會導致很大的偏差(bias),而過擬合將會導致很大的方差(variance)。

下面通過圖3-1線性迴歸中預測房價的例子和圖3-2Logistic迴歸中0-1分類的例子直觀感受欠擬合和過擬合。

圖3-1 線性迴歸中的欠擬合與過擬合

圖3-2 Logistic迴歸處理0-1分類問題中的欠擬合與過擬合

通常來說,欠擬合是比較好解決的,例如線上性迴歸和Logistic迴歸中,我們可能通過增加新的特徵或者用較高次數的多項式。但過擬合是比較難以控制的,因為它非常的矛盾: 我們認為選出的訓練集可以在很大程度上代表所研究的全體資料集,所以我們希望模型能夠較好的擬合,但是,我們又知道訓練集不可避免的有無法泛化的特徵。所以或多或少我們的學習模型都會學到訓練集所獨有的特徵。雖說如此,但還是有一些措施來減少過擬合的風險。

  1. 減少特徵的數量
    • 儘量選擇我們認為具有一般化的特徵,除去可能只有訓練集才有的特徵。(人工的)
    • 採用模型選擇演算法(Model selection algorithm)
  2. 正則化(Regularization)

3.2 Bayesian statistics and regularization

正則化的基本思想是保留所有的特徵量,但通過減少引數θ來避免某個特徵量影響過大。

下面從Bayesian statistics(貝葉斯統計)學派來理解正則化。

在之前,我們通過利用極大似然法(maximum likelihood: ML)對引數θ進行估計,進而得到代價函式,認為θ的取值應使得似然函式最大,也就使得代價函式最小,即有

 

所以極大似然估計中認為θ是我們不知道的引數,而不是一個變數,這就是頻率學派(frequentist statistics)的觀點。這種觀點認為,θ不是隨機的(自然也就沒有隨機分佈這一說法),它是常量,理應等於某些值。所以我們的工作是用比如極大似然這樣統計學的方法來估計它。

但是貝葉斯學派認為,θ是未知的隨機變數,所以在我們對訓練集進行訓練之前,θ就可能服從某種分佈p(θ),我們稱之為先驗概率(prior distribution)。對於一個訓練集 ,如果我們要對新的進行預測,我們可以通過貝葉斯公式算出θ的後驗概率(posterior distribution),即:

上面就是完整的貝葉斯預測,但是事實上很難計算出θ的後驗概率,因為(1)式要求對θ進行積分,而θ往往是高維的,所以很難實現。

因此在實際應用中我們常常是近似θ的後驗概率。一種常用的近似方式就是一個點的估計來代替(2)式。The MAP(maximum a posteriori)估計如下:

 

我們發現(3)式相較於極大似然估計,只是後面乘了θ的先驗概率。

在實際應用中,通常假設(當然也有其他的假設方式)。在實際中,The Bayesian MAP estimate比極大似然估計更好的減少過擬合。例如,用Bayesian Logistic 迴歸演算法可以用來處理特徵數遠大於訓練樣本數文字分類問題。

3.3 Optimize Cost function by regularization

下面說明如何利用正則化來完善cost function. 首先看一個直觀的例子。如圖3-3所示,一開始由於多項式次數過高導致過擬合,但是如果在cost function後加上1000*theta3^2+1000*theta4^2, 為了使cost function最小,那麼在優化(迭代)過程中,會使得theta3和theta4趨近於0,這樣多項式後兩項的高次作用就減少,過擬合得到了改善。這就相當於對非一般化特徵量的懲罰。

圖3-3 正則化的直觀感受

3.3.1 Regularized linear regression

一般的,對於線性模型正則化後的cost function如下:

(注意正則化不包括theta0)

Lambda的取值應該合適,如果過大(如10^10)將會導致theta都趨於0,所有的特徵量沒有被學習到,導致欠擬合。後面將會討論lambda的取值,現在暫時認為在0~10之間。

既然cost function改變了,那麼如果採用梯度下降法來優化,自然也要做相應的改變,如下:

作為線性迴歸的另一種模型,正規方程(the normal equations)也可以正則化,方式如下:

通過1.2.3節,我們知道,如果訓練樣本數m小於等於特徵數n,那麼X’X是不可逆的(使用matlab中pinv可以得到其偽逆),但是如果lambda > 0,則加上lambda乘以上圖形式的矩陣後就可逆了。

3.3.2 Regularized logistic regression

3.4 Advanced optimization

在實際的應用中,我們通常不會自己實現梯度下降法來優化目標函式,而是使用程式語言函式庫。例如使用matlab中的fminunc函式。所以我們只需要編寫出求cost function以及其導數的函式就可以了,以Logistic regression如下所示,(注意在matlab中向量下標以1開始,所以theta0應為theta(1))。

matlab實現Logistic regression的該函式程式碼如下:

function [J, grad] = costFunctionReg(theta, X, y, lambda)
%COSTFUNCTIONREG Compute cost and gradient for logistic regression with regularization
%   J = COSTFUNCTIONREG(theta, X, y, lambda) computes the cost of using
%   theta as the parameter for regularized logistic regression and the
%   gradient of the cost w.r.t. to the parameters. 

m = length(y); % number of training examples
n = size(X,2);   % features number

J = 0;
grad = zeros(size(theta));

h = sigmoid(X * theta); % sigmoid function

J = sum((-y) .* log(h) - (1-y) .* log(1-h)) / m + lambda * sum(theta(2:n) .^ 2) / (2*m);

grad(1) = sum((h - y) .* X(:,1)) / m;
for i = 2:n
    grad(i) = sum((h - y) .* X(:,i)) / m + lambda * theta(i) / m;
end

end

 呼叫時的matlab程式碼片段如下:

% Initialize fitting parameters
initial_theta = zeros(size(X, 2), 1);
% Set regularization parameter lambda to 1 (you can vary this)
lambda = 1;
% Set Options
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Optimize
[theta, J, exit_flag] = ...
    fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);