邏輯迴歸實戰
邏輯迴歸案例
小細節
- 邏輯迴歸(logistic regression)雖然被稱之為邏輯迴歸,但是它本質上其實是一種分類演算法(classification algorithm),邏輯迴歸名字的由來是有歷史原因的。
- sigmoid函式在邏輯迴歸中站著重要的位置,sigmoid function也被稱為logistic function,稱之為邏輯函式就做到了見名知意了,說明 \({{1}\over{1 + e^{-x}}}\) 與邏輯迴歸密切相關。
- 線上性迴歸中得知,假設函式 \(h(x) = \theta_0 + \theta_1x\) ,邏輯迴歸處理的是分類的問題,那麼我們的演算法要麼輸出的是概率(返回在0到1之間),要麼是輸出的就是0或者1等等,線上性迴歸中建立的假設函式 \(h(x) = \theta_0 + \theta_1x\) 顯然不會在0到1之間或者輸出的值為0或者1,這個時候就需要sigmoid函數了;sigmoid函式可以將實數範圍內的值轉換為0-1之間的值,而這個值恰巧就是概率所在的範圍,進一步的,得到了概率的值,只要我們設定了閾值(threshold)就可以將其轉換為0或者1等等。
- 邏輯迴歸是線上性迴歸的基礎上發展而來的,它是依賴於線性迴歸的,為什麼?因為在邏輯迴歸中,定義的假設函式時 \(h_{\theta}(x) = g(\theta^{T}x)\) ,其中 \(\theta^{T}x\) 就是線上性迴歸中假設函式的矩陣形式,在邏輯迴歸中通過g函式將其 封裝 到sigmoid函式中, \(g(x) = {{1} \over {1 + e^{-x}}}\) ,只有這樣,才能將 \(\theta^{T}x\) 這個輸出在R上的值對映到0-1之間,所有邏輯迴歸中的假設函式為 \(h_{\theta}(x) = g(\theta^{T}x) = {{1} \over {1 + e^{-\theta^{T}x}}}\) 。
- 邏輯迴歸假設函式的概率表現形式: \(h(x) = g(\theta^{T}x) = P(y = 1|x; \theta)\) ,在提醒一下,這裡的 \(\theta\) 是一個 列向量 ,在MATLAB/Octave中出現公式的地方,十有八九都是使用矩陣方程表達的,輸入和輸出也大部分是列向量或者矩陣。
- 關於閾值(threshold),在上面幾點中已經提到的,這裡提一下如何將一個0-1的概率值轉換為一個0或者1等等的分類結果,首先根據通過sigmoid函式,我們的線性迴歸的結果會被鎖定到0-1之間,這個時候如果假設函式 \(h_{\theta}(x) = g(\theta^{T}x) = {{1} \over {1 + e^{-\theta^{T}x}}}\) 的結果為0.7,表示 \(y = 1\) 的概率為0.7,對立的, \(y = 0\) 的概率為0.3,如果規定threshold為0.5,則表示如果假設函式 \(h()\) 的輸出大於等於0.5則 \(y = 1\) ,如果小於0.5則 \(y = 0\) ,換一個角度來說,sigmoid中封裝的線性迴歸函式在大於等於0的時候, \(y = 1\) ,在小於0的時候, \(y = 0\) 。
sigmoid function(logistic function)
- 定義
- \({{1} \over {1 + e^{-x}}}\)
- 影象
根據學生的兩次考試成績來判斷是否能夠被大學錄取
案例概要
- 第一列為第一次考試成績 列向量
- 第二列為第二次考試成績 列向量
- 第三列為是否被錄取(0 or 1)
案例分析
- 定義假設函式 \(h(x) = g(\theta^{T}x) = {{1} \over {1 + e^{-\theta^{T}x}}}\) 。
- 資料變數
- m: the number of training examples,樣本的數量。
- n: the number of features,特徵的數量,這裡不包括第0個特徵,所以為2。
- x的上標:樣本的行數。
- x的下標:表示第幾個特徵。
-
輸入X, 注意:這裡的X已經新增上了預設的第0個特徵,這個列向量中的值都為1
\[ \begin{bmatrix} 1 & x^{1}_{1} & x^{1}_{2} \\ 1 & x^{2}_{1} & x^{2}_{2} \\ \vdots & \vdots & \vdots \\ 1 & x^{m}_{1} & x^{m}_{2} \end{bmatrix} \]
- 目標函式( \(J(\theta)\) )
- 與線性迴歸中一樣 \[J(\theta) = {{1} \over {2m}}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^{2} = {{1} \over {2m}}\sum_{i=1}^{m}({{1} \over {1 + e^{-\theta{x^{(i)}}}}} - y^{(i)})^{2}\] 這裡的 \(\theta\) 為列向量。
- 思考,如何計算 \(minimize_{\theta}J(\theta)\)
- 線上性迴歸中我們使用梯度下降的方法可以很好的收斂,因為線性迴歸中的最小化方程是一個凸函式,沒有區域性最優點,只有一個全域性最優點,但是在邏輯迴歸中,因為我們將線性迴歸函式封裝到了sigmoid函式中,導致目標函式 \(J(\theta)\) 與 \(\theta\) 構成的函式影象是彎彎曲曲的,有多個區域性最優點,導致了無法使用梯度下降的方法求出最優解。
- 此時應該對目標函式進行等價替換( 注意:等價替換值得是效果一樣,但是數值可能不同 )
- 首先 \[J(\theta) = {{1} \over {2m}}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^{2} = {{1} \over {m}}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^{2}\]
- 接著定義Cost函式 \[Cost(h_{\theta}({x^{(i)}}), y^{(i)}) = (h_{\theta}(x^{(i)}) - y^{(i)})^{2}\] ,為什麼?因為我們接下來要將 \[(h_{\theta}(x^{(i)}) - y^{(i)})^{2}\] 等價替換成一個分段函式,在機器學習的數學公式表示中,如果遇到一個分段函式,則在原來函式中使用一個新的邏輯函式( 為什麼說是抽象函式?因為在這裡這個新的函式還沒有函式的實體 )將其替換掉,再對這個新的變數進行定義。
- 其次將Cost函式等價替換為
\[ Cost(h_{\theta}({x^{(i)}}), y^{(i)}) = \begin{cases} -log(h_{\theta}({x^{(i)}})) & if & y = 1 \\ -log(1 - h_{\theta}({x^{(i)}})) & if & y = 0 \end{cases} \]
上面的等價替換就是將返回概率值的假設函式 \(h_{\theta}(x^{(i)})\) 轉為取log之後的結果。 -
現在目標函式 \(J(\theta)\) 為
\[ J(\theta) = {{1}\over{m}}\sum_{i=1}^{m}Cost(h_{\theta}({x^{(i)}}), y^{(i)}) \\ Cost(h_{\theta}({x^{(i)}}), y^{(i)}) = \begin{cases} -log(h_{\theta}({x^{(i)}})) & if & y = 1 \\ -log(1 - h_{\theta}({x^{(i)}})) & if & y = 0 \end{cases} \]
-
通過數學方法可以將上面的兩個式子合併為一個
\[ J(\theta) = -{{1}\over{m}}[\sum_{i=0}^{m}y^{(i)}log(h_{\theta}({x^{(i)}})) + (1 - y^{(i)})log(1 - h_{\theta}({x^{(i)}}))] \]
-
梯度下降
- 梯度(也就是偏導)
- \(grad = {{\partial}\over{\partial{\theta}}}J(\theta)\)
- 梯度下降
- \(\theta_{j} := \theta_{j}- \alpha{{\partial}\over{\theta_{j}}}J(\theta)\) ,對所有的特徵都進行梯度下降
- 展開來就是和線性迴歸一樣的式子 \[\theta_{j} := \theta_{j}- \alpha{\sum_{i=1}^{m}(h_{\theta}}(x^{(i)}) - y^{(i)})x_{j}^{(i)}\]
- 不斷地更新引數即可
- 梯度(也就是偏導)
如果y的值為0, 1, 2, 3,如果使用擬合出來的函式進行預測
- 思路和對一個函式求偏導是一樣,當我們討論y=0的情況時,就將其他的1,2,3情況都歸為一類,一次類推,我們可以得出y=0,1,2,3的概率,只要 \(max(h(x^{(i)}))\) 即可