1. 程式人生 > >通俗地說邏輯迴歸【Logistic regression】演算法(一)

通俗地說邏輯迴歸【Logistic regression】演算法(一)

在說邏輯迴歸前,還是得提一提他的兄弟,線性迴歸。在某些地方,邏輯迴歸演算法和線性迴歸演算法是類似的。但它和線性迴歸最大的不同在於,邏輯迴歸是作用是分類的。

還記得之前說的嗎,線性迴歸其實就是求出一條擬合空間中所有點的線。邏輯迴歸的本質其實也和線性迴歸一樣,但它加了一個步驟,邏輯迴歸使用sigmoid函式轉換線性迴歸的輸出以返回概率值,然後可以將概率值對映到兩個或更多個離散類。

如果給出學生的成績,比較線性迴歸和邏輯迴歸的不同如下:

  • 線性迴歸可以幫助我們以0-100的等級預測學生的測試分數。線性迴歸預測是連續的(某個範圍內的數字)。
  • Logistic迴歸可以幫助預測學生是否通過。邏輯迴歸預測是離散的(僅允許特定值或類別)。我們還可以檢視模型分類背後的概率值。

一.從迴歸到分類的核心 --Sigmoid Function

之前介紹線性迴歸的時候,它的函式是這樣樣子的:

h(x)=θ0 + θ1 * x1 + θ2 * x2 + θ3 * x3 ...

但這樣的函式是沒辦法進行分類的工作的,所以我們要藉助一下其他函式,那就是Sigmoid Function。

我們先來看看這個Sigmoid Function長什麼樣,Sigmoid Function的數學公式是這樣子的:

如果表示在平面座標軸上呢,那它長這個樣子。

這個Sigmoid Function可以將線性的值,對映到[0-1]這個範圍中。如果對映結果小於0.5,則認為是負的樣本,如果是大於0.5,則認為是正的樣本。

比方說要對垃圾郵箱進行分類,分垃圾郵箱和正常郵箱。當這個Sigmoid Function的計算出來後,小於0.5,則認為是垃圾郵箱,大於0.5則是非垃圾郵箱。

原先線性迴歸的計算公式是這樣的:

那麼將這個z函式代入到Sigmoid Function中,OK,現在我們就有了一個邏輯迴歸的函數了。

二.代價函式Cost Function

和線性迴歸一樣,邏輯迴歸也有代價函式。並且都是通過最小化Cost Function來求得最終解的。

我們先來看單個點的情況,

這個代價函式呢,叫做交叉熵,其中y(i)指的是預測的結果,而hθ(xi)指的是xi這個點原本的值。

那麼它具體是什麼意思呢,為什麼叫做交叉熵?我們舉兩個極端的例子看看就明白了:

1.xi原始值hθ=1,預測結果,yi=1的情況

這個時候,代價函式的加號右邊會被消掉,因為右邊(1-y(i))是0,左邊部分呢,因為hθ(xi)=1,故而log(1)=0。

y(i)log(hθ(xi)) = 1 * log(0) = 0

也就是說,若xi原始值是1,當預測值y=1的時候,代價函式是0的。這個也比較好理解,代價函式為0就是說預測結果和原始結果完全一致的,沒有半點出差錯。

2.計算結果,yi=0,原始值hθ=0

這次的結果就和上面的反過來了,因為yi=0,所以左邊部分全軍覆沒,來看右邊,

(1-yi) * log(1-hθ(xi)) = 1 * log(0) = 0

因為1-hθ(xi),最終結果還是等於0。

也就是說,這個損失函式,只要原始值與預測結果越相符,損失函式就越大,反之,損失函式就會越小。

以上說的只是一個點的情況,實際的代價函式,是要計算所有點的損失函式的均值,如下所示:

三.梯度下降

和線性迴歸一樣,邏輯迴歸的解法也可以通過梯度下降來進行求解。梯度下降的目的,是為了最小化代價函式Cost function。

要求使用梯度下降,需要先求解偏導數,以下是求導數的一個具體過程:

而梯度下降的計算方法也和線性迴歸的計算方法是一樣的。只是其中的代價函式,換成了邏輯迴歸的代價函式。

其中,α右邊部分對應我們上面對代價函式求偏導的結果。而α是用來控制訓練速率的,這個線上性迴歸那裡已經有說到,這裡就不再介紹了。

最終就是對θj不斷迭代,直到損失函式降到最小,那就可以求出我們要的θ值了。

四.小結

OK,今天介紹了線性迴歸和邏輯迴歸的區別,同樣都是迴歸分析,邏輯迴歸能完成分類任何的核心,就算使用了Sigmoid Function。

這裡留一個小問題,上面所述的邏輯迴歸,通常是僅僅能夠進行二分類,那有沒有辦法來讓邏輯迴歸實現多分類呢?

下一次將闡述用邏輯迴歸進行多分類,以及正則化相關內容,並介紹sklearn的邏輯迴歸引數和用法!!

以上~~


推薦閱讀:
通俗得說線性迴歸演算法(一)線性迴歸初步介紹
通俗得說線性迴歸演算法(二)線性迴歸初步介紹
Scala 函數語言程式設計指南(一) 函式式思想介紹
通俗地說決策樹演算法(二)例項解析
大資料儲存的進化史 --從 RAID 到 Hadoop Hdfs
C,java,Python,這些名字背後的江湖