如今有一家醫院,想要對病人的病情進行分析,其中有一項就是關於良性\惡性腫瘤的判斷,如今有一批數據集是關於腫瘤大小的,任務就是根據腫瘤的大小來斷定是良性仍是惡性。這就是一個很典型的二分類問題,即輸出的結果只有兩個值----良性和惡性(一般用數字0和1表示)。如圖1所示,咱們能夠作一個直觀的斷定腫瘤大小大於5,即爲噁心腫瘤(輸出爲1);小於等於5,即爲良性腫瘤(輸出爲0)。html
分類問題本質上屬於有監督學習,給定一個已知分類的數據集,而後經過分類算法來讓計算機對數據集進行學習,這樣計算機就能夠對數據進行預測。以腫瘤的例子來講,已有數據集如圖1所示,如今要對一個病人的病情進行診斷,那麼計算機只須要將該病人的腫瘤大小和5進行比較,而後就能夠推斷出是惡性仍是良性。分類問題和迴歸問題有必定的類似性,都是經過對數據集的學習來對未知結果進行預測,區別在於輸出值不一樣。迴歸問題的輸出值是連續值(例如房子的價格),分類問題的輸出值是離散值(例如惡性或者良性)。既然分類問題和迴歸問題有必定的類似性,那麼咱們能不能在迴歸的基礎上進行分類呢?答案是能夠的。一種可行的思路是,先用線性擬合,而後對線性擬合的預測結果值進行量化,即將連續值量化爲離散值。算法
分類問題雖然和迴歸問題有必定的相似,可是咱們並不能直接使用迴歸問題中的假設函數做爲分類問題的假設函數。仍是以圖1的例子爲例,若是咱們採用一元線性函數(即\(h(x) = \theta_0+\theta_1x\))去進行擬合的話,結果多是這樣子的:$h_\theta(x) = \dfrac{5}{33}x-\frac{1}{3} $,體如今圖片中就是:函數
這樣,你可能會作這樣的一個判斷:對於這個線性擬合的假設函數,給定一個腫瘤的大小,只要將其帶入假設函數,並將其輸出值和0.5進行比較,若是大於0.5,就輸出1;小於0.5,就輸出0。在圖1的數據集中,這種方法確實能夠。可是若是將數據集更改一下,如圖3所示,此時線性擬合的結果就會有所不一樣:學習
若是採用相同的方法,那麼就會把大小爲6的狀況進行誤判爲良好。因此,咱們不能單純地經過將線性擬合的輸出值與某一個閾值進行比較這種方式來進行量化。對於邏輯迴歸,咱們的量化函數爲Sigmoid函數(也稱Logistic函數,S函數)。其數學表達式爲:\(S(x) = \dfrac{1}{1+e^{-x}}\) ,其圖像如圖4:spa
能夠看到S函數的輸出值就是0和1,在邏輯迴歸中,咱們採用S函數來對線性擬合的輸出值進行量化,因此邏輯迴歸的假設函數爲:.net
\[h_\theta(x)=\dfrac{1}{1+e^{-\theta^Tx}}=\dfrac{1}{1+e^{-\sum_{i=0}^n\theta_ix_i}} \tag{3.1}\]htm
其中,\(x\)爲增廣特徵向量(1*(n+1)維),\(\theta\)爲增廣權向量(1*(n+1)維)。這個假設函數所表示的數學含義是:對於特定的樣本\(x\)與參數矩陣\(\theta\),分類爲1的機率(假設y只有0和1兩類),也就即\(h_\theta(x) = P(y=1|x;\theta)\)。根據其數學意義,咱們能夠這樣認爲:若是\(h_\theta(x)>0.5\),則斷定y = 1;若是\(h_\theta(x)<0.5\),則斷定y = 0。blog
代價函數(成本函數),也就是損失函數。在邏輯迴歸中,代價函數並非採用均方偏差(主要緣由是,邏輯迴歸的均方偏差並非一個凸函數,並不方便使用梯度降低法),而是經過極大似然法求解出來的一個函數,其數學表達式爲:圖片
\[J(\theta)= \dfrac{1}{m}\sum_{i=1}^m[-yln(h_\theta(x))-(1-y)ln(1-h_\theta(x))] \tag{4.1}\]get
這個函數看起來有點複雜,咱們將它一步步進行拆分來理解,咱們將每一個樣本點與假設函數之間的偏差記爲\(Cost(h_\theta(x),y)=-yln(h_\theta(x))-(1-y)ln(1-h_\theta(x))\),這樣代價函數就能夠理解爲偏差的均值。下面咱們再詳細看一下這個偏差函數,因爲y的取值只能是0或者1,咱們能夠將偏差函數寫成分段函數的形式:
\[Cost(h_\theta(x),y)=\begin{cases} -ln(h_\theta(x)),\quad &y = 1 \\ -(1-y)ln(1-h_\theta(x)), &y=0 \end{cases} \tag{4.2}\]
4.2式和4.1式是等價的,依據4.2式,不可貴出:當y=1時,若是斷定爲y=1(即\(h_\theta(x) = 1\)),偏差爲0;若是誤判爲y=0(\(即h_\theta(x) = 0\)),偏差將會是正無窮大。當y=0時,若是斷定爲y=0(即\(h_\theta(x) = 0\)),偏差爲0;若是誤判爲y=1(即\(h_\theta(x) = 1\)),偏差將會是正無窮大。(注意:\(h_\theta(x) = 1\)表示y等於1的機率爲1,等價於認爲y=1;\(h_\theta(x) = 0\)表示y等於1的機率爲0,等價於認爲y=0)
若是用矩陣來表示代價函數,就是:
\[J(\theta)=-\dfrac{1}{m}Y^Tln(h_\theta(X))-(E-Y)^Tln(E-h_\theta(X)) \tag{4.3}\]
其中\(Y\)爲樣本真實值組成的列向量(m*1維),\(X\)爲增廣樣本矩陣((1+n)*m維),E爲全1列向量(m*1維)。
邏輯迴歸的代價函數和線性迴歸的損失函數同樣,都是凸函數,因此咱們能夠採用梯度降低法來求參數矩陣\(\theta\)使得代價函數\(J(\theta)\)取得最小值。其具體算法與線性迴歸中的梯度降低法(能夠參考個人另外一篇博客線性迴歸之梯度降低法)並無太大區別,只是對應的偏導有所不一樣。邏輯迴歸的代價函數的偏導爲:
\[\dfrac{\partial J(\theta)}{\theta_i} = \dfrac{1}{m}\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})x_i^{(j)} = \dfrac{1}{m}\sum_{j=1}^m(\dfrac{1}{1+e^{-\sum_{i=0}^n\theta_ix_i^{(j)}}}-y^{(j)})x_i^{(j)}\quad (i=0,1,\dots,n)\tag{5.1}\]
對應的參數更新規則爲:
\[\theta_i = \theta_i-\alpha\dfrac{\partial J(\theta)}{\theta_i} = \theta_i-\alpha\dfrac{1}{m}\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})x_i^{(j)}\quad (i=0,1,\dots,n)\tag{5.2}\]
若是用矩陣表示就是:
\[\dfrac{\partial J(\theta)}{\theta} = \dfrac{1}{m}X^T(h_\theta(X)-Y),\quad \theta=\theta-\alpha\dfrac{1}{m}X^T(h_\theta(X)-Y) \tag{5.3}\]
其中,\(\alpha\)爲迭代步長。
對於多元邏輯迴歸,一種可行的思路是將其簡化爲二元。例如,若是數據集的分類包含1,2,3這三個類別。若是如今要判斷一個樣本是否是類1,咱們能夠將數據集看做是兩類----即1類和非1類(將類2和類3),這樣咱們就能夠求得針對類1的假設函數\(h^{(1)}_\theta(x)\),同理還有\(h^{(2)}_\theta(x)\)和\(h^{(3)}_\theta(x)\)。這樣咱們的斷定規則就變爲:
\[if \quad max\{h^{(i)}_\theta(x)\} = h^{(j)}_\theta(x), then \quad y = j\quad(i,j=1,2,3) \tag{6.1}\]
雖然邏輯迴歸中帶有「迴歸」二字,但其實它是一個分類算法。邏輯迴歸的思想和模式識別中的判別函數很是類似,二者能夠結合起來進行學習。
參考連接: