今天帶來第三週課程的筆記:迴歸問題和正則化。
主要講解的內容包含:
- 邏輯迴歸
- 代價函式
- 線性迴歸和邏輯迴歸的比較
- 正則化問題
- 邏輯迴歸
- 分類問題
邏輯迴歸
分類問題
假設預測的變數y是離散的值,需要使用邏輯迴歸Logistic Regression,LR的演算法,實際上它是一種分類演算法
二元分類問題
將因變數dependent variable可能屬於的兩個類分別稱為負向類negative class和正向類positive class,因變數y的取值只能在0和1之間,其中0表示負類,1表示正類
假說表示Hypothesis Representation
分類器的輸出值在0和1之間,因此,希望找出一個滿足某個性質的假設函式,這個性質是它的預測值要在0和1之間
引入一個新的模型:邏輯迴歸,該模型的輸出變數範圍始終在0和1之間。邏輯迴歸模型的假設是:
其中X代表的是特徵向量g的邏輯函式,常用的S型函式(上圖的右邊,sigmoid function)公式為
Python程式碼實現sigmod啟用函式:
import numpy as np
def sigmod(z):
return 1 / (1 + np.exp(-z))
hθ(x)作用是對於給定的輸入變數,根據選擇的引數計算輸出變數=1的可能性,即:hθ(x)=P(y=1|x;θ)
例如:對於給定的x,透過已經確定的引數計算得出hθ(x)=0.7hθ(x)=0.7,則表示有70%的機率y屬於正類
決策邊界decision boundary
解釋邏輯迴歸
在邏輯迴歸中h≥0.5h≥0.5預測y=1y=1;反之y=0
在啟用函式g(z)g(z)中:
當z≥0z≥0則g(z)≥0.5g(z)≥0.5
當z<0z<0則g(z)<0.5g(z)<0.5
又因為 z=θTx ,即: θTx>=0 時,預測 y=1y=1 ;反之:θTx<0 時,預測 y=0
例項demo
在下圖的中例項中,引數θ滿足[-3,1,1],當−3+x1+x2≥0,即x1+x2≥3時,模型預測y=1;說明此時:直線x1+x2=3就是決策邊界
複雜的模型邊界問題
代價函式Cost Function
如何擬合LR模型的引數θ
- 線性模型中代價函式是模型誤差的平方和 :
如果直接使用線性模型中的代價函式,即誤差平方和,得到的代價函式是個非凸函式,但是實際上我們期望看的是凸函式(右邊)
重新定義邏輯迴歸的代價函式
將上面的兩個式子進行合併:
hθ(x)和Cost(hθ(x),y)之間的關係
根據y的不同取值來進行分別判斷,同時需要注意的是:假設函式h的取值只在[0,1]之間
y=1的情形
y=0的情形
Python程式碼實現代價函式
利用Python實現下面的代價函式
- first 表示的是右邊第一項
- second 表示的是右邊第二項
import numpy as np
def cost(theta, X, y):
# 實現代價函式
theta=np.matrix(theta)
X = np.matrix(X)
y = np.matrxi(y)
first = np.multiply(-y, np.log(sigmod(X * theta.T)))
second = np.multiply((1 - y), np.log(1-sigmod(X * theta.T)))
return np.sum(first - second) / (len(X))
利用梯度下降來求解LR最小引數
1、LR中的代價函式是 :
2、最終結果:
3、具體過程
不斷地迭代更新θj:
如果存在n個特徵,也就是θ=[θ0,θ1,…,θn]T。那麼就需要根據上面的式子從0-n來更新所有的θ
線性迴歸 VS 邏輯迴歸
假設的定義規則發生變化
線性迴歸:
邏輯迴歸:
因此,即使更新引數的規則看起來基本相同,但由於假設的定義發生了變化,所以邏輯函式的梯度下降,跟線性迴歸的梯度下降實際上是兩個完全不同的東西。
其他求解代價函式最小的演算法
- 共軛梯度conjugate gradient
- 區域性最佳化法Broyden fletcher goldfarb shann,BFGS
- 有限記憶體區域性最佳化法LBFGS
- 多類別分類one-vs-all
多類別分類one-vs-all
我們舉一個實際中的例子來說明:
假如現在需要一個學習演算法能自動地將郵件歸類到不同的資料夾裡,或者說可以自動地加上標籤,那麼需要一些不同的資料夾,或者不同的標籤來完成這件事,來區分開來自工作、朋友、家人或者有關興趣愛好的郵件,那麼,就有了這樣一個分類問題:其類別有4個,分別用y=1,2,3,4 來代表。
正則化問題Regularization
正則化基礎
正則化技術主要是為了解決過擬合的問題。過擬合指的是:對樣本資料具有很好的判斷能力,但是對新的資料預測能力很差。
- 第一個模型是一個線性模型,欠擬合,不能很好地適應我們的訓練集
- 第三個模型是一個四次方的模型,過於強調擬合原始資料,而丟失了演算法的本質:預測新資料
- 中間的模型似乎最合適
如果是多項式擬合,x的次數越高,擬合的效果越好,但是相應的預測能力就可能變差。對於過擬合的處理:
丟棄一些不能正確預測的特徵。可以是手工選擇保留哪些特徵,或者使用一些模型選擇的演算法,例如PCA
正則化。保留所有的特徵,但是減少引數的大小magnitude
加入正則化引數
在模型hθ(x)=θ0+θ1×1+θ2×2+θ3×3+θ4×4中,主要是高次項產生的過擬合問題:
加入正則化引數後能夠防止過擬合問題,其中λλ是正則化引數Regularization Parameter
那麼,相應的代價函式變成為:
Attention:
一般地,不對θ0進行懲罰;加上正則化引數實際上是對引數θ進行懲罰。經過正則化處理後的模型和原模型的對比:
如果λ過大,所有的引數最小化,模型變成了hθ(x)=θ0,造成了過擬合
正則化線性迴歸Regularized Linear Regression
正則化線性迴歸的代價函式:
Attention:線上性迴歸中,不對θ0進行正則化:
當j=1,2,…,n時:
調整下變成:
正則化邏輯迴歸Regularized Logistic Regression
LR問題兩種最佳化方法:
– 梯度下降法
– 更高階最佳化演算法
加上正則懲罰項後的代價函式為:
python程式碼實現
import numpy as np
# 實現代價函式
def costReg(theta, X, y, lr):
theta= np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X * theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))
reg = (lr / (2 * len(X)) * np.sum(np.power(theta[:, 1:theta.shape[1]], 2)) # theta[:, 1:theta.shape[1]] 代表的是 \theta_j
return np.sum(first - second) / len((X)) + reg
透過求導,得到梯度下降演算法,本質上就是對θ的不斷更新:
至此,第三週的課程筆記完畢!
系列文章:
吳恩達《Machine Learning》精煉筆記 1:監督學習與非監督學習
吳恩達《Machine Learning》精煉筆記 2:梯度下降與正規方程
本文首發於公眾號:AI有道(ID: redstonewill),歡迎關注!