邏輯回歸案例
小細節
- 邏輯回歸(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)}$$
-
不斷地更新參數即可
-
-
完成了擬合,投入到預測的時候是使用等價替換之前的假設函數,值得一提的是,前面的等價替換是對目標函數J的操作,和假設函數無關,在機器學習中,大部分的分析的時間除了在構建假設函數之外,就是合理的處理目標函數
如果y的值為0, 1, 2, 3,如果使用擬合出來的函數進行預測
- 思路和對一個函數求偏導是一樣,當我們討論y=0的情況時,就將其他的1,2,3情況都歸為一類,一次類推,我們可以得出y=0,1,2,3的概率,只要\(max(h(x^{(i)}))\)即可,這種情況時需要定義三個h(x)的,在預測的時候進行比較,這種方法叫做one-vs-all。
根據學生的兩次考試成績來判斷是否能夠被大學錄取-正則化(regularize),也可以是懲罰
-
regularize與normalize區別
- normalize是將特征的值樣本值鎖定在0-1之間
- regularize的目的是將我們最終得到的假設函數的高階自變量的參數盡可以的小,這樣就可以減弱高階對預測的影響,防止過擬合,反之高階越多,權重越大,則過擬合的可能性越大。要想實現正則化,我們不需要修改假設函數,而是修改目標函數J
\[J(\theta) = {{1}\over{2m}}[\sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^2 + {\lambda}\sum_{i=0}^{n}{\theta}^2] \]
上面的式子是雖有的\(\theta\)都進行正則化(懲罰)
-
正則化(懲罰)參數與\(\theta\)的關系
- 大致上成反比的關系,如果\(\lambda\)很大,則\(\theta\)就會很小,可以可能會導致擬合出來的目標函數是一條水平直線,反之亦然。
- 永遠不會懲罰\(\theta_0\)
-
梯度
-
變為
-
- for j = 1 $${{{1}\over{m}}\sum_{i=1}^{m}}(h_{\theta}(x^{(i)}) - y^{(i)})x_{j}^{(i)}$$
-
- for j >= 1$$({{{1}\over{m}}\sum_{i=1}^{m}}(h_{\theta}(x^{(i)}) - y^{(i)})x_{j}^{(i)}) + {{\lambda}\over{m}}\theta_{j}$$
-
-
梯度下降公式為
-
\[\theta := \theta - \alpha{{{\partial}\over{\partial}\theta}}J(\theta) \]
- 其中的$${{{\partial}\over{\partial}\theta}}J(\theta)$$用上面的兩個式子替換即可。
-
-
其他
-
在機器學習中,對於分類問題,我們已經擬合出了假設函數,在畫決策邊界的時候,不是根據假設函數繪畫的,而是根據sigmoid函數中封裝的線性回歸函數繪制的,只要把它畫出來即可,如果邊界是直線,則確定兩個點即可,如果是閉合曲線,則使用等高線。
-
要想畫出復雜的曲線,那個這個函數一定是高階的。