機器學習基礎---邏輯回歸(假設函數與線性回歸不同)


一:分類

(一)分類基礎

在分類問題中,你要預測的變量y是離散的值,我們將學習一種叫做邏輯回歸 (Logistic Regression) 的算法,這是目前最流行使用最廣泛的一種學習算法。

在分類問題中,我們嘗試預測的是結果是否屬於某一個類(例如正確或錯誤)。分類問題的例子有:判斷一封電子郵件是否是垃圾郵件;判斷一次金融交易是否是欺詐;之前我們也談到了腫瘤分類問題的例子,區別一個腫瘤是惡性的還是良性的。

我們從二元的分類問題開始討論。(當然存在多分類問題,例如y可以取到 0,1,2,3這幾個值)

我們將因變量(dependent variable)可能屬於的兩個類分別稱為負向類(negative class)和正向類(positive class),則因變量 ,其中 0 表示負向類(沒有某項東西):良性腫瘤,1 表示正向類(含有某項東西):惡性腫瘤。

(二)對比線性回歸 

我們對數據集建立線性模型,得到線性回歸函數。同時設置一個閾值y_0=0.5,此時x_0對應y_0,當x<x_0時,則返回0,當x>x_0則返回1。

上面解釋似乎很合理,但是當我們出現下面的數據集分布時:

重新建立線性模型,導致原本屬於正向類的數據,被划分到負向類中。

因此,不建議將線性回歸用於分類問題。

如果我們要用線性回歸算法來解決一個分類問題,對於分類, y取值為 0 或者1,但如果你使用的是線性回歸,那么假設函數的輸出值可能遠大於 1,或者遠小於0,即使所有訓練樣本的標簽y都等於 0 1。盡管我們知道標簽應該取值0 或者1,但是如果算法得到的值遠大於1或者遠小於0的話,就會感覺很奇怪。

所以我們在接下來的要研究的算法就叫做邏輯回歸算法,這個算法的性質是:它的輸出值永遠在01 之間。

順便說一下,邏輯回歸算法是分類算法,我們將它作為分類算法使用。有時候可能因為這個算法的名字中出現了回歸使你感到困惑,但邏輯回歸算法實際上是一種分類算法,它適用於標簽y取值離散的情況,如:1 0 0 1

二:假說表示

(一)模型引出

我們引入一個新的模型,邏輯回歸,該模型的輸出變量范圍始終在01之間。 

邏輯回歸模型的假設是:

其中:X表示特征向量,g表示邏輯函數,是一個常用的邏輯函數(為S形函數Sigmoid function)

Sigmoid function公式:

當z趨於正無窮,g(z)--->1。當z趨於負無窮,g(z)--->0。因此g(z)再(0,1)之間。

因此,完整的邏輯回歸模型如下:

(二)參數θ擬合數據

當我們拿到一個數據集,我們需要給參數選定一個值。假說模型會幫我們做出預測。

三:決策邊界

(一)假設函數的屬性---決策邊界

決策邊界這個概念能更好地幫助我們理解邏輯回歸的假設函數在計算什么。

在邏輯回歸中,我們預測:

根據上面繪制出的 S 形函數圖像,我們知道:

現在假設我們有一個模型:

 

並且假設我們擬合好了參數,參數θ是向量[-3 1 1].則當-3+x_1+x_2>=0,即x_1+x_2>=3時,模型將預測y=1

我們可以繪制直線x_1+x_2=3,這條線便是我們模型的分界線,將預測為1和預測為0的區域分開。

 

這條洋紅色線,被稱為決策邊界。具體地說,這條直線x_1+x_2=3。它對應h(x)=0.5的區域。

決策邊界,也就是這條直線將整個平面分成了兩部分,其中一片區域假設函數預測y等於1,而另一片區域假設函數預測y等於0。

決策邊界是假設函數的一個屬性:

它包括參數θ_0 θ_1 θ_2。

即便我們去除這個數據集之后:

這條決策邊界,以及我們預測y=1,與y=0。他們都是假設函數的屬性,決定於其參數θ_j,而不是數據集的屬性(不同於線性回歸)

當然,我們后面還將討論如何擬合參數,那時,我們將使用訓練集,使用我們的數據來確定參數的取值。

但是,一旦我們有確定的參數取值,有確定的θ0 θ1 θ2,我們就將完全確定決策邊界。

這時,我們實際上並不需要在繪制決策邊界的時候,繪制訓練集。

(二)復雜數據集

給定一個這樣的訓練集,我們如何使用邏輯回歸來擬合這些數據?

早些時候,當我們談論多項式回歸或者線性回歸時,我們談到可以添加額外的高階多項式項,同樣我們也可以對邏輯回歸使用相同的方法。

添加了兩個額外的特征,x_1方和x_2方。並且我現在有5個參數,θ_0到θ_4。

假設我們以及擬合了參數θ_j是[-1 0 0 1 1]

這樣我們就可以獲得決策邊界:

因此,通過增加這些復雜的多項式特征變量,可以得到更復雜的決定邊界,而不只是用直線分開正負樣本。

再次強調:決策邊界不是訓練集的屬性,而是假設本身及其參數的屬性。我們不是用訓練集來定義的決策邊界,而是用訓練集來擬合參數θ

四:代價函數---擬合邏輯回歸模型的參數θ

如何自動選擇參數θ,使我們能在給定一個訓練集時,我們可以根據數據自動擬合參數θ。

(一)原始代價函數

具體來說,我要定義用來擬合參數的優化目標或者叫代價函數,這便是監督學習問題中的邏輯回歸模型的擬合問題。

對於線性回歸模型,我們定義的代價函數是所有模型誤差的平方和。理論上來說,我們也可以對邏輯回歸模型沿用這個定義,但是問題在於,當我們將

帶入到這樣定義了的代價函數中時,我們得到的代價函數將是一個非凸函數non-convexfunction。

這意味着我們的代價函數有許多局部最小值,這將影響梯度下降算法尋找全局最小值。

相應的,我們希望我們的代價函數J(θ)是一個如下的凸函數:

所以我們對這個凸函數使用梯度下降法,就可以確保一定可以收斂到該函數的全局最小值。

但是由於我們中間的的h(x)函數是非線性的,就導致了代價函數是非凸函數。

(二)修正后的代價函數

我們重新定義邏輯回歸的代價函數為:

推導-log(h(x)):

注意:,所以h(x)的取值范圍在(0,1)之間。

全部-log(h(x))和-log(1-h(x))表示:

因為是分類(邏輯回歸),所以y取值只有y=1和y=0兩種,每種對應一個cost方法。

則h(x)和cost(h(x),y)之間的關系如下圖所示:

上圖是y=1的情況下,cost代價值(縱軸)和h(x)預測值(橫軸)之間的關系。

其性質是:

當預測值是h(x)=1,實際標簽值y也是為1,那么cost代價值則為0。

但是當預測值是0,實際標簽值是1,那么cost代價值是∞大,這就說明我們的預測是錯誤的,那么我們就用非常非常大的代價值來懲罰這個學習算法。


 

是y=0的情況下,cost代價值(縱軸)和h(x)預測值(橫軸)之間的關系。

當預測值是h(x)=0,實際標簽值y也是為0,那么cost代價值則為0。

但是當預測值是1,實際標簽值是0,那么cost代價值是∞大,這就說明我們的預測是錯誤的,那么我們就用非常非常大的代價值來懲罰這個學習算法

(三)將y=1和y=0的cost函數合並,簡化

將構建的cost(h(x),y)簡化如下:(不再單獨區分y=0和y=1)

帶入代價函數得到:

即:

補充:這是由最大似然函數來的,是一個凸函數

(四)代碼實現cost

import numpy as np
def cost(theta, X, y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X* theta.T)))    second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
    return np.sum(first - second) / (len(X))

其中,h(x)如下:是一個sigmod函數,傳參為X*theta.T

五:梯度下降法---為訓練集擬合出來參數θ

在得到這樣一個代價函數以后,我們便可以用梯度下降算法來求得能使代價函數最小的參數了。

算法為:

求導后得到:

注:雖然得到的梯度下降算法表面上看上去與線性回歸的梯度下降算法一樣,但是這里的

與線性回歸中不同,所以實際上是不一樣的。

推導過程:

 

所以:

另外,在運行梯度下降算法之前,進行特征縮放依舊是非常必要的。特征縮放依舊適用於邏輯回歸。

六:高級優化

(一)梯度下降法

一些高級優化算法和一些高級的優化概念,利用這些方法,我們就能夠使通過梯度下降,進行邏輯回歸的速度大大提高,而這也將使算法更加適合解決大型的機器學習問題,比如,我們有數目龐大的特征量。 現在我們換個角度來看什么是梯度下降:

我們有個代價函數J(θ),而我們想要使其最小化,那么我們需要做的是編寫代碼,當輸入參數θ時,它們會計算出兩樣東西:J(θ)以及J等於 01直到n時的偏導數項。

梯度下降所做的就是反復執行這些更新,從而來更新參數θ。

(二)其他高級算法

然而梯度下降並不是我們可以使用的唯一算法,還有其他一些算法,更高級、更復雜。

如果我們能用這些方法來計算代價函數J(θ)和偏導數兩個項的話,那么這些算法就是為我們優化代價函數的不同方法。

共軛梯度法,BFGS (變尺度法) L-BFGS (限制變尺度法) 就是其中一些更高級的優化算法,它們需要有一種方法來計算J(θ),以及需要一種方法計算導數項。

然后使用比梯度下降更復雜的算法來最小化代價函數。這三種算法的具體細節過於麻煩,這里只需要了解一些他們的特性:

一個是使用這其中任何一個算法,你通常不需要手動選擇學習率α ,所以對於這些算法的一種思路是:
給出計算導數項和代價函數的方法,你可以認為算法有一個智能的內部循環。
而且,事實上,他們確實有一個智能的內部循環,稱為線性搜索(line search)算法,它可以自動嘗試不同的學習速率α ,並自動選擇一個好的學習速率α,
因此它甚至可以為每次迭代選擇不同的學習速率,那么你就不需要自己選擇。
這些算法實際上在做更復雜的事情,而不僅僅是選擇一個好的學習率,所以它們往往最終收斂得遠遠快於梯度下降。
而且我們往往不需要特別去了解算法的內部細節(太復雜),就可以很好的使用他,到各種應用場景

舉例使用:

如果想用高級優化算法里的一個,來最小化代價函數。如果我們不知道最小值在(5,5)時取到,但是還想要找到最小值。

我們可以使用梯度下降法,但是最好用比它更加高級的算法。

Octave 函數實現了這樣一個代價函數,比如costFunciton(theta)----返回兩個自變量:

第一個是jVal:它是我們要計算的代價函數

第二個是梯度值,梯度值應該是一個2×1的向量,梯度向量的兩個元素對應這里的兩個偏導數項

運行這個costFunction 函數后,你就可以調用高級的優化函數,這個函數叫 fminunc,它表示Octave 里無約束最小化函數。

你要設置幾個options,這個 options 變量作為一個數據結構可以存儲你想要的options。

所以 GradObj On,這里設置梯度目標參數為打開(on),這意味着你現在確實要給這個算法提供一個梯度,然后設置最大迭代次數。

比方說100,我們給出一個θ的猜測初始值,它是一個2×1的向量,那么這個命令就調用fminunc,這個@符號表示指向我們剛剛定義的costFunction 函數的指針。

如果你調用它,它就會使用眾多高級優化算法中的一個,當然你也可以把它當成梯度下降,只不過它能自動選擇學習速率α,你不需要自己來做。

然后它會嘗試使用這些高級的優化算法,就像加強版的梯度下降法,為你找到最佳的θ值。

當有一個很大的機器學習問題時,選擇這些高級算法,而不是梯度下降。有了這些概念,你就應該能將邏輯回歸和線性回歸應用於更大的問題中,這就是高級優化的概念。

七:多元分類---一對多

使用邏輯回歸 (logistic regression)來解決多類別分類問題

(一)案例

(二)二元分類和多分類對比

二元分類問題,我們的數據看起來可能是像這樣:

對於一個多類分類問題,我們的數據集或許看起來像這樣:

我們現在已經知道如何進行二元分類,可以使用邏輯回歸,對於直線或許你也知道,可以將數據集一分為二為正類和負類。

用一對多的分類思想,我們可以將其用在多類分類問題上。

下面將介紹如何進行一對多的分類工作,有時這個方法也被稱為"一對余"方法。

現在我們有一個訓練集,好比上圖表示的有3個類別,我們用三角形表示y=1,方框表示y=2,叉叉表示y=3 

我們下面要做的就是,將這個訓練集,將其分成3個獨立的二元分類問題。

我們先從用三角形代表的類別1開始,實際上我們可以創建一個,新的""訓練集,類型2和類型3定為負類,類型1設定為正類,我們創建一個新的訓練集,如下圖右側所示的那樣,我們要擬合出一個合適的分類器。

這里的三角形是正樣本,而圓形代表負樣本。可以這樣想,設置三角形的值為1,圓形的值為0,下面我們來訓練一個標准的邏輯回歸分類器,這樣我們就得到一個正邊界。

 

這里的h_θ(x)上標(1)代表類別1,我們對三角形類別1進行上面這樣的處理。


 同樣對類別2進行同樣的處理:將方形樣本設置為正樣本,其他為負樣本,以此來擬合第二個邏輯回歸分類器h_θ^(2)(x):

  

這里的h_θ(x)上標(2)代表類別2,我們對方形類別2進行上面這樣的處理。


同樣,設置叉型為類別3:


總結:

為了能實現這樣的轉變,我們將多個類中的一個類標記為正向類(y=1),

然后將其他所有類都標記為負向類,這個模型記作:

----計算在給定x和θ時,y的值為1的概率。

接着,類似地第我們選擇另一個類標記為正向類(y=2),再將其它類都標記為負向類,將這個模型記作:

依此類推。最后我們得到一系列的模型簡記為:(一系列分類器)

每個分類器都針對其中一種情況進行訓練。

總之:我們訓練了一個邏輯回歸分類器,預測i類別y=i的概率。

最后為了做出預測,我們給出一個新的輸入值x,期望獲得預測。我們要做的就是在我們三個分類器里面輸入x,

然后我們選擇一個讓最大的i,即。選出三個當中,可信度最高,效果最好的那個分類器。

無論i值是多少,我們都能得到一個最高的概率值,我們預測就是那個值。

這就是多類別分類問題,以及一對多的方法,通過這個小方法,你現在也可以將邏輯回歸分類器用在多類分類的問題上。

最后,在我們需要做預測時,我們將所有的分類機都運行一遍,然后對每一個輸入變量,都選擇最高可能性的輸出變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM