機器學習——邏輯斯特迴歸(包含梯度下降推導)

1. 前言

在之前已經簡單闡述了“線性迴歸”模型,具體的介紹地址爲:https://blog.csdn.net/qq_30232405/article/details/104153928

這種簡單的線性迴歸在擬合複雜模型的時候,會出現擬合能力不足的情況。

例如下圖已經存在的數據:
腫瘤分類

  • 橫座標表示:tumor size(腫瘤大小),用xx表示。
  • 橫座標:malignant(惡行腫瘤),可以用如下公式表示:
    hθ(x)=θTx h_\theta(x) = \theta^{\mathrm{T}}x

圖中有兩條擬合線:

  • 粉紅色直線:當圖中沒有最右異常點的時候,可以用線性迴歸進行擬合
  • 藍色直線:當圖中有最右異常點時,用直線擬合的。

如果一開始設置了hθ(x)h_\theta(x)大於0.5時,默認類別爲1(惡性腫瘤),少於0.5時類別爲0(良性腫瘤),則粉紅色的直線對應的曲線恰好可以有效區分兩種類別。但是藍色直線對應的xx座標則向左偏移,這時候會把腫瘤錯誤預測爲0。

爲了能夠得到更有效的模型,則需要logistic regression(LR)模型來解決這個問題。

2. Logistic Regression模型

2.1 公式

首先展示LR模型的公式:
hθ(x)=g(θTx)g(θTx)=11+eθTx h_\theta(x) = g(\theta^{\mathrm{T}}x) \\ g(\theta^{\mathrm{T}}x)= \frac{1}{1+e^{-\theta^{\mathrm{T}}x}}

可以看到,LR模型在普通的線性迴歸中增加了函數gg,如果把z=θTxz=\theta^{\mathrm{T}}x,可以把gg公式化簡爲:
g(z)=11+ez g(z)= \frac{1}{1+e^{-z}}

這個公式就是典型的sigmoid函數,也可以稱爲是logistic函數。

2.2 Sigmoid函數

現在觀察一下sigmoid函數的圖像形狀:
sigmoid函數圖像

  • zz趨向於infinity時,g(z)g(z)接近於1
  • zz趨向於infinitesimal時,g(z)g(z)接近於0

用上面“預測腫瘤是否爲惡性”的例子,不難看出hθ(x)h_\theta(x)的輸出值就代表腫瘤是否爲惡性的概率。

例如:當hθ(x)=0.7h_\theta(x)=0.7,也就是說該腫瘤有70%的概率會是惡性腫瘤。所以,如果給定xxθ\theta的值,預測yy的概率可以表示爲:
hθ(x)=P(yx;θ) h_\theta(x)=P(y|x;\theta)

對於兩分類來說,這種函數兩個性質:

  • P(y=0x;θ)+P(y=1x;θ)=1P(y=0|x;\theta)+P(y=1|x;\theta)=1
  • P(y=0x;θ)=1P(y=1x;θ)P(y=0|x;\theta)=1-P(y=1|x;\theta)

2.3 Logistic Regression模型的損失函數

迴歸一下,之前的線性迴歸模型的損失函數爲:
J(θ)=12mi=1m(hθ(x(i))y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
也可以用另外的符號來表示:
Cost(hθ(x),y)=J(θ) Cost(h_\theta(x), y)=J(\theta)

如果我們把線性迴歸的損失函數J(θ)J(\theta)以圖像的形式畫出來:
線性迴歸的損失函數
可以看到這個函數是凸函數,可以求出全局最優點

而如果把hθ(x)h_\theta(x)換成LR模型的函數,同時畫出其J(θ)J(\theta)的圖像
LR模型的損失函數圖像
這時候函數是非凸函數,存在很多的局部最優點。所以需要像一個新的損失函數,它應該具有兩個基本的性質

  • 能夠代表預測函數和正確類別之間的距離。
  • 最好函數是一個凸函數,具有全局最優點。

因此研究者找到了一個比較適合的損失函數:
Cost(hθ(x),y)={log(hθ(x))  if y=1log(1hθ(x))  if y=0 Cost(h_\theta(x), y)=\left\{ \begin{aligned} -log(h_\theta(x)) ~~ if~y=1 \\ -log(1-h_\theta(x)) ~~ if~y=0\\ \end{aligned} \right.

爲什麼要引入這樣的損失函數呢,接下來可以用對應的圖像進行解釋。

  • y=1y=1時,其損失函數圖像爲:
    y=1時損失函數圖像
    由於真實標籤爲1,當hθ(x)h_\theta(x)接近於1時,說明此時函數的預測與真實標籤是一致的,那麼損失函數的值就接近於0。如果要進行參數更新,這時候由於損失函數接近0,參數幾乎不用更新。當hθ(x)h_\theta(x)接近於0時,說明此時函數的預測與真實標籤是不一致的,這會導致損失函數的值增大,需要更快的更新參數。

  • y=0y=0時,其損失函數圖像爲:
    y=0時損失函數圖像
    其性質說明和上面的圖像一致,這就不詳細說明了。

2.3 Logistic Regression模型的梯度下降

首先對上面的LR公式進行合併:
J(θ)=Cost(hθ(x(i)),y(i))=1mi=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))) J(\theta) =Cost(h_\theta(x^{(i)}), y^{(i)})= -\frac{1}{m} \sum_{i=1}^{m} y^{(i)} log(h_\theta(x^{(i)})) +(1-y^{(i)} )log(1-h_\theta(x^{(i)} ))

  • y(i)=1y^{(i)}=1時,則會變成:
    J(θ)=1mi=1my(i)log(hθ(x(i)))J(\theta)= -\frac{1}{m} \sum_{i=1}^{m} y^{(i)} log(h_\theta(x^{(i)}))

  • y(i)=0y^{(i)}=0時,則會變成:
    J(θ)=1mi=1m(1y(i))log(1hθ(x(i)))J(\theta)= -\frac{1}{m} \sum_{i=1}^{m} (1-y^{(i)} )log(1-h_\theta(x^{(i)} ))

利用梯度下降法,如果要求出最優參數θ\theta,則需要最小化J(θ)J(\theta),同時更新參數:
θj:=θjαJ(θ)θj \theta_j:=\theta_j- \alpha \frac{\partial J(\theta)}{\partial \theta_j}

要對上面這個偏導數求解,首先要知道sigmoid函數求導後的形式。

2.3.1 sigmoid函數的求導形式

g(z)z=z11+ez=ez(1+ez)2=11+ez1(1+ez)2=g(z)(1g(z)) \frac{\partial g(z)}{\partial z} = \frac{\partial }{\partial z} \frac{1}{1+e^{-z}} =\frac{e^{-z}}{(1+e^{-z})^2} = \frac{1}{1+e^{-z}} - \frac{1}{(1+e^{-z})^2} =g(z)(1-g(z))
可以看到sigmoid函數的求導形式有一個很特別的地方:它的求導形式都可以用原函數表示。最後得到公式:
g(z)=g(z)(1g(z)) g(z)^{'}=g(z)(1-g(z))

如果對g(θTx)g(\theta^{\mathrm{T}}x)求導,其過程差不多,但是會多出一個xj(i)x^{(i)}_j相乘:
g(θTx)θj=g(θTx)(1g(θTx))xj(i) \frac{\partial g(\theta^{\mathrm{T}}x)}{\partial \theta_j}=g(\theta^{\mathrm{T}}x)(1-g(\theta^{\mathrm{T}}x))x^{(i)}_j

  • 要注意的是θ\thetaxx都是一個向量形式

2.3.2 LR函數的求導

有了上述sigmoid函數的求導形式作爲背景,我們可以化簡J(θ)θj\frac{\partial J(\theta)}{\partial \theta_j}。在損失函數J(θ)J(\theta)中,θ\thetaxx都是一個向量形式,也就是:
θ=[θ0,θ1,...,θn]x=[x0,x1,...,xn] \theta=[\theta_0,\theta_1,...,\theta_n] \\ x=[x_0,x_1,...,x_n]
當我們僅僅針對θj\theta_j進行求導的時候:
J(θ)θj=1mimy(i)hθ(x(i))hθ(x(i))θj1y(i)1hθ(x(i))hθ(x(i))θj=1mimy(i)g(θTx)g(θTx)θj1y(i)1g(θTx)g(θTx)θj \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_i^{m} \frac{y^{(i)}}{h_\theta(x^{(i)})} \frac{\partial h_\theta(x^{(i)})}{\partial \theta_j} - \frac{1-y^{(i)}}{1-h_\theta(x^{(i)})} \frac{\partial h_\theta(x^{(i)})}{\partial \theta_j} \\ = -\frac{1}{m} \sum_i^{m} \frac{y^{(i)}}{g(\theta^{\mathrm{T}}x)} \frac{\partial g(\theta^{\mathrm{T}}x)}{\partial \theta_j} - \frac{1-y^{(i)}}{1-g(\theta^{\mathrm{T}}x)} \frac{\partial g(\theta^{\mathrm{T}}x)}{\partial \theta_j}

可以看到上面需要利用sigmoid函數的求導方法:
J(θ)θj=1mimy(i)g(θTx)g(θTx)(1g(θTx))xj(i)1y(i)1g(θTx)g(θTx)(1g(θTx))xj(i)=1mimy(i)(1g(θTx))xj(i)(1y(i))g(θTx)xj(i)=1mim(g(θTx)y(i))xj(i)=1mim(hθ(x(i))y(i))xj(i) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_i^{m} \frac{y^{(i)}}{g(\theta^{\mathrm{T}}x)} g(\theta^{\mathrm{T}}x)(1-g(\theta^{\mathrm{T}}x))x^{(i)}_j - \frac{1-y^{(i)}}{1-g(\theta^{\mathrm{T}}x)} g(\theta^{\mathrm{T}}x)(1-g(\theta^{\mathrm{T}}x))x^{(i)}_j \\ =-\frac{1}{m} \sum_i^{m} y^{(i)} (1-g(\theta^{\mathrm{T}}x))x^{(i)}_j - (1-y^{(i)})g(\theta^{\mathrm{T}}x)x^{(i)}_j \\ =\frac{1}{m} \sum_i^{m}(g(\theta^{\mathrm{T}}x) - y^{(i)})x^{(i)}_j \\ =\frac{1}{m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})x^{(i)}_j

至此,LR的損失函數的求導形式已經結束,這裏面主要用到了sigmoid函數的求導,推導起來其實是比較簡單的。最後寫出梯度下降的更新公式:
θj:=θjα1mim(hθ(x(i))y(i))xj(i) \theta_j:=\theta_j- \alpha \frac{1}{m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})x^{(i)}_j
對比一下線性迴歸的梯度下降公式:
θj:=θjα1mi=1m(hθ(xj(i))y(i))xj(i) \theta_j := \theta_j - \alpha \frac{1}{m} \sum^{m}_{i=1} (h_{\theta}(x^{(i)}_j) - y^{(i)}) x^{(i)}_j
發現他們兩個的公式高度統一,佩服以前的研究工作者能夠想出這麼完美的損失函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章