1. 程式人生 > >機器學習之旅(三)

機器學習之旅(三)

吳恩達教授的機器學習課程的第三週相關內容:

1、邏輯迴歸(Logistic Regression)

1.1、分類問題

在分類問題中,你要預測的變數 y 是離散的值,我們將學習一種叫做邏輯迴歸 (Logistic Regression) 的演算法,這是目前最流行使用最廣泛的一種學習演算法。
我們從二元的分類問題開始討論。
我們將因變數(dependant variable)可能屬於的兩個類分別稱為負向類(negative class)和正向類(positive class),則因變數 y

{ 0 , 1 } y\in \left \{ 0,1 \right \} , 其中 0 表示負向類, 1 表示正向類。我們在接下來的要研究的演算法就叫做邏輯迴歸演算法,這個演算法的性質是:它的輸出值永遠在 0 到 1 之間。
小結:邏輯迴歸是一種分類演算法,適用於標籤y取值離散的情況,如0,1,2…。

1.2、假說表示(Hypothesis Representation)

根據線性迴歸模型我們只能預測連續的值,然而對於分類問題,我們需要輸出 0 或 1,
我們可以預測:當 h θ ( x )

h_{\theta }\left ( x \right ) 大於等於 0.5 時,預測 y=1,當 h θ ( x ) h_{\theta }\left ( x \right ) 小於 0.5 時,預測 y=0 。
我們引入一個新的模型,邏輯迴歸,該模型的輸出變數範圍始終在 0 和 1 之間。 邏輯迴歸模型的假設是: h θ ( x ) = g ( θ x ) h_{\theta }\left ( x \right )=g\left (\theta ^{\top }x \right ) ,
其中:X 代表特徵向量、g 代表邏輯函式(logistic function)是一個常用的邏輯函式為 S 形函式(Sigmoid function),公式為:
g ( z ) = 1 1 + e z g\left ( z \right )=\frac{1}{1+e^{-z}} ,合起來,我們得到邏輯迴歸模型的假設: h θ ( x ) = 1 1 + e θ x h_{\theta }\left ( x \right )=\frac{1}{1+e^{-\theta ^{\top }x }} , h θ ( x ) h_{\theta }\left ( x \right ) 的作用是,對於給定的輸入變數,根據選擇的引數計算輸出變數=1 的可能性(estimated probablity)即: h θ ( x ) = P ( y = 1 x ; θ ) h_{\theta }\left ( x \right )=P\left (y=1 \mid x;\theta \right ) ,例如, 如果對於給定的 x, 通過已經確定的引數計算得出 hθ(x)=0.7, 則表示有 70%的機率 y 為正向類,相應地 y 為負向類的機率為 1-0.7=0.3。
小結:通過Sigmoid函式將模型輸出變數控制在0到1,>=0.5的取1,<0.5的取0,繼而滿足模型要求。

1.3、判定邊界(Decision Boundary )

在邏輯迴歸中,我們預測:
h θ ( x ) h_{\theta }\left ( x \right ) 大於等於 0.5 時,預測 y=1。
h θ ( x ) h_{\theta }\left ( x \right ) 小於 0.5 時,預測 y=0 。
根據上面繪製出的 S 形函式影象,我們知道當
z=0 時 g(z)=0.5
z>0 時 g(z)>0.5
z<0 時 g(z)<0.5
z = θ x z=\theta ^{\top }x ,即:
θ x \theta ^{\top }x 大於等於 0 時,預測 y=1, θ x \theta ^{\top }x 小於 0 時,預測 y=0
現在假設我們有一個模型:
在這裡插入圖片描述

並且引數 是向量[-3 1 1]。 則當 3 + x 1 + x 2 -3+x_{1}+x_{2} 大於等於 0,即 x 1 + x 2 x_{1}+x_{2} 大於等於 3 時,模型將預測 y=1。
我們可以繪製直線 x 1 + x 2 = 3 x_{1}+x_{2}=3 ,這條線便是我們模型的分界線,將預測為 1 的區域和預測為 0 的區域分隔開。
在這裡插入圖片描述

假使我們的資料呈現這樣的分佈情況,怎樣的模型才能適合呢?
在這裡插入圖片描述

因為需要用曲線才能分隔 y=0 的區域和 y=1 的區域,我們需要二次方特徵: 假設引數:
在這裡插入圖片描述
是[-1 0 0 1 1],則我們得到的判定邊界恰好是圓點在原點且半徑為 1 的圓形。我們可以用非常複雜的模型來適應非常複雜形狀的判定邊界。
小結:判定邊界就是用來把大部分不同的資料分開,以方便更好的去預測新樣本。

1.4和1.5、代價函式、簡化的代價函式和梯度下降(Simplified Cost Function and Gradient Descent)

我們重新定義邏輯迴歸的代價函式為: :
在這裡插入圖片描述
這個式子可以合併成:
在這裡插入圖片描述

邏輯迴歸的代價函式:
在這裡插入圖片描述
為了擬合出引數,我們要試圖找儘量讓 J ( θ ) J\left ( \theta \right ) 取得最小值的引數 θ \theta
最小化代價函式的方法,是使用梯度下降法(gradient descent)。這是我們的代價函式:
在這裡插入圖片描述
梯度下降演算法:
在這裡插入圖片描述

小結:注意梯度下降演算法表面上和線性迴歸的一樣,但是要注意假設函式變了。

1.6、 高階優化(Advanced Optimization)

我們換個角度來看什麼是梯度下降, 我們有個代價函式 J ( θ ) J\left ( \theta \right ) , 而我們想要使其最小化, 那麼我們需要做的是編寫程式碼, 當輸入引數 θ 時, 它們會計算出兩樣東西: J ( θ ) J\left ( \theta \right ) 以及 J 等於 0、 1 直到 n 時的偏導數項。
在這裡插入圖片描述
梯度下降所做的就是反覆執行這些更新。另一種考慮梯度下降的思路是: 我們需要寫出程式碼來計算 J ( θ ) J\left ( \theta \right ) 和這些偏導數, 然後把這些插入到梯度下降中, 然後它就可以為我們最小化這個函式。這些演算法就是為我們優化代價函式的不同方法, 共軛梯度法 BFGS (變尺度法) 和 L-BFGS (限制變尺度法) 就是其中一些更高階的優化演算法(不需要手動選擇學習率 α)。對於這些演算法的一種思路是,給出計算導數項和代價函式的方法,你可以認為演算法有一個智慧的內部迴圈,而且, 事實上,他們確實有一個智慧的內部迴圈, 稱為線性搜尋(line search)演算法, 它可以自動嘗試不同的學習速率 α, 並自動選擇一個好的學習速率 α。
小結:高階優化演算法的簡單使用和思路。

1.7、多類別分類:一對多(Multiclass Classification_ One-vs-all)

多類別的分類問題,主要思想:把其中一類設為正類,其他所有類設為負類,得出一個假設函式模型,照此迴圈,直到分完所有類,這個方法被稱為‘一對多分類’。一系列的模型簡記為:
在這裡插入圖片描述

2 、正則化(Regularization)

2.1、過擬合的問題(The Problem of Overfitting )

線性迴歸:
在這裡插入圖片描述
第一個模型是一個線性模型, 欠擬合,不能很好地適應我們的訓練集;第三個模型是一個四次方的模型, 過於強調擬合原始資料,而丟失了演算法的本質:預測新資料。我們可以看
出,若給出一個新的值使之預測,它將表現的很差,是過擬合,雖然能非常好地適應我們的訓練集但在新輸入變數進行預測時可能會效果不好;而中間的模型似乎最合適。
分類問題中同樣也有此問題:
在這裡插入圖片描述
過擬合處理方法:

  1. 丟棄一些不能幫助我們正確預測的特徵。可以是手工選擇保留哪些特徵, 或者使用
    一些模型選擇的演算法來幫忙(例如 PCA)
  2. 正則化。 保留所有的特徵,但是減少引數的大小。

2.2、代價函式

假如我們有非常多的特徵,我們並不知道其中哪些特徵我們要懲罰,我們將對所有的特徵進行懲罰,並且讓代價函式最優化的軟體來選擇這些懲罰的程度。這樣的結果是得到了一個較為簡單的能防止過擬合問題的假設:
在這裡插入圖片描述
其中 λ \lambda 又稱為正則化引數(Regularization Parameter)。 注:根據慣例,我們不對 θ 0 \theta _{0} 進行懲罰( θ 0 \theta _{0} 作為單獨的一項參與模型中)。經過正則化處理的模型與原模型的可能對比如下圖所示:
在這裡插入圖片描述
小結:如果選擇的正則化引數 λ \lambda 過大,為了最小化代價函式, 則會把所有的引數都最小化了,導致模型變成直線,就會欠擬合。相反,則會過擬合。故 λ \lambda 的取值很關鍵。

2.3、正則化線性迴歸( Regularized Linear Regression)

正則化線性迴歸的代價函式為:
在這裡插入圖片描述
如果我們要使用梯度下降法令這個代價函式最小化,因為我們未對 θ 0 \theta _{0} 進行正則化,所以梯度下降演算法將分兩種情形:
在這裡插入圖片描述
我們同樣也可以利用正規方程來求解正則化線性迴歸模型,方法如下所示:
在這裡插入圖片描述

2.3、正則化的邏輯迴歸模型(Regularized Logistic Regression )

代價函式和梯度下降的更新同2.2,
1.雖然正則化的邏輯迴歸中的梯度下降和正則化的線性迴歸中的表示式看起來一樣,但
由於兩者的 h θ ( x ) h_{\theta }\left ( x \right ) 不同所以還是有很大差別。
2. θ 0 \theta _{0} 不參與其中的任何一個正則化。

3、第三週程式設計題

1、sigmoid.m, g=(1+exp(-z)).^(-1),注意位運算。
2、costFunction.m,
J = -(y’log(sigmoid(Xtheta))+(1-y)‘log(1-sigmoid(Xtheta)))/m;
grad =(X’(sigmoid(Xtheta)-y))/m;
3、predict.m,p=round(sigmoid(Xtheta));round - 四捨五入為最近的小數或整數,此 MATLAB 函式 將 X 的每個元素四捨五入為最近的整數。在對等情況下,即有元素的小數部分恰為 0.5 時,round函式會偏離零四捨五入到具有更大幅值的整數。
4、costFunctionReg.m,
J=
-(y’log(sigmoid(Xtheta))+(1-y)'log(1-sigmoid(Xtheta)))/m+lambda/2/m
sum(theta(2:length(theta)).^2);

grad(1) =((sigmoid(X*theta)-y)'X(:,1))/m(取X的第一列)
for i=2:length(theta)
grad(i) =((sigmoid(X
theta)-y)'X(:,i))/m+lambdatheta(i,:)/m;(取X的第i列, θ \theta 的第i行)

θ 0 \theta _{0} 即octave/MATLAB中的 θ 1 \theta _{1} 不參與正則化。