在邏輯迴歸模型中咱們不能再像以前的線性迴歸同樣使用相同的代價函數,不然會使得輸出的結果圖像呈現波浪狀,也就是說再也不是個凸函數。代價函數的表達式以前有表示過,這裏咱們把1/2放到求和裏面來。算法
$$ J(\theta) = \frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_\theta(x^(i))-y^(i))^2 $$機器學習
這裏的求和部分咱們能夠表示爲:函數
$$ Cost(h_\theta(x(i)),y) $$學習
很顯然,若是咱們把在以前說過的分類問題的假設函數帶進去,即$h_\theta(x) = \frac{1}{1+e^{-z}}$,獲得的結果可能就是上述所說的不斷起伏的情況。若是這裏使用梯度降低法,不能保證能獲得全局收斂的值,這個函數就是所謂的非凸函數。所以咱們須要找一個不一樣的代價函數,而且是個凸函數,使得咱們可使用好的算法並找到全局最小值。這個代價函數以下所示:優化
咱們能夠畫出$J(\theta)$的圖像以下所示,分別爲當y=1和y=0時的圖像:spa
那根據圖像咱們能夠得出結論:code
$$ Cost(h_\theta(x),y) = 0 \quad if \quad h_\theta(x) = y \\ Cost(h_\theta(x),y) \rightarrow \infty \quad if \quad y = 0 \quad and \quad h_\theta(x) \rightarrow 1 \\ Cost(h_\theta(x),y) \rightarrow \infty \quad if \quad y = 1 \quad and \quad h_\theta(x) \rightarrow 0 $$rem
若是y的值爲0,則當假設函數輸出0時代價函數也爲0,若是假設函數趨向於1,則代價函數趨向於無窮大;若是y的值爲1,則當假設函數輸出1時代價函數爲0,若是假設函數趨向於0,則代價函數趨向於無窮大。同步
上述的代價函數能夠簡化成以下所示:it
$$ Cost(h_\theta(x),y) = -ylog(h_\theta(x)) - (1-y)log(1-h_\theta(x)) $$
若y=1則第二項爲0,若y=0則第一項爲0,所以此等式和上述的分段描述的函數是等價的。
那麼能夠寫出完整的代價函數:
用向量表示則是:
咱們以前有講過梯度降低算法的概念:
將公式帶入進行導數計算後獲得:
用向量法表示:
固然要注意這個算法和咱們在線性迴歸中的方法同樣,咱們須要同步的更新全部的$\theta$的值。
換個角度來看梯度降低的話,實際上就是咱們有一個代價函數$J(\theta)$,咱們須要使它最小化。咱們要作的就是編寫代碼來計算輸入$\theta$時,獲得$J(\theta)$和$J(\theta)$對$\theta_j$的偏導。梯度降低本質上就是不斷重複這個過程來更新參數$\theta$。也就是說梯度降低就是編寫代碼計算出$J(\theta)$和$J(\theta)$的偏導帶入梯度降低公式中,而後它就能夠爲咱們最小化這個函數。實際上對於梯度降低而言,不是必定要計算出$J(\theta)$的值,但若是爲了能更好的監控到$J(\theta)$的收斂性,須要本身編寫代碼來計算代價函數和偏導性。
除了梯度降低以外還有一些其餘算法來優化代價函數。包括共軛梯度法BFGS和L-BFGS還有Conjugate gradient。這些算法相對梯度降低算法更高級但同時也是更加的複雜。這些算法都暫時不在當前學習的範疇內。不過這裏能夠簡單說一下他們的特性:
咱們能夠經過寫一個方法來計算$J(\theta)$和$\frac{\partial}{\partial\theta_j}J(\theta)$的值:
function [jVal, gradient] = costFunction(theta) jVal = [...code to compute J(theta)...]; gradient = [...code to compute derivative of J(theta)...]; end
其中jVal就是咱們代價函數的值,第二個就是梯度。下圖就是一個簡單的例子以及對應的octave的代碼:
接下來咱們來介紹多類別的分類問題,也就是說咱們的類別可能不止兩種。好比天氣多是晴天、陰天、雨天,或者郵件分類可能包括工做、朋友、垃圾郵件等等。那這個時候的y={0,1}就再也不適用了,而是y={0,1,2...,n}。下圖中,左邊表明的是以前說的二元分類問題的數據集,有兩種不一樣的符號表示;右邊的是多類別分類問題,用三種不一樣的符號表示三個不一樣的類別中的樣本。
咱們要作的就是找到合適的算法來進行分類,在二元分類問題中咱們知道了經過迴歸來解決分類問題,利用直線將數據分紅正類和負類。利用一對多的思想咱們一樣能夠將其應用在多分類問題上。下圖爲一個簡單的有三種類別的分類問題。
咱們能夠建立一個新的數據集將類別1當作正類,類別2和3設定爲負類,擬合出一個邏輯迴歸分類器$h^(1)_\theta(x)$。一樣的對類別2和類別3也能夠擬合出其餘邏輯迴歸分類器$h^(2)_\theta(x)$和$h^(3)_\theta(x)$。總的來講就是$h^(i)_\theta(x) = P(y=i|x;\theta) \quad (i=1,2,3))$。即給定x和$\theta$時y=i的機率。當輸入一個新的x時,咱們要作的就是在這三個分類器中輸入x,而後選擇h最大的類別,即選出三個分類器中可信度最高的一個
以上,爲吳恩達機器學習logistic regression章節的內容。